Skip to content

Commit 47f7382

Browse files
committed
Improve logic
1 parent 4a196ad commit 47f7382

1 file changed

Lines changed: 31 additions & 104 deletions

File tree

  • dl3/android/DeepLabV3Demo/app/src/main/java/org/pytorch/executorchexamples/dl3

dl3/android/DeepLabV3Demo/app/src/main/java/org/pytorch/executorchexamples/dl3/MainActivity.java

Lines changed: 31 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,11 @@ public class MainActivity extends Activity implements Runnable {
6363
private static final String MODEL_FILENAME = "dl3_xnnpack_fp32.pte";
6464
private String mModelPath; // Will be set in onCreate using getFilesDir()
6565

66-
private final ArrayList<String> mImageFiles = new ArrayList<>();
66+
// Sample images from assets
67+
private static final String[] SAMPLE_IMAGES = {"corgi.jpeg", "deeplab.jpg", "dog.jpg"};
68+
private int mCurrentSampleIndex = 0;
6769

68-
private int mCurrentImageIndex = 0;
69-
70-
private static final int REQUEST_READ_EXTERNAL_STORAGE = 1001;
7170
private static final int REQUEST_PICK_IMAGE = 1002;
72-
private static final String LOCAL_IMAGE_DIR = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/";
7371

7472
// see http://host.robots.ox.ac.uk:8080/pascal/VOC/voc2007/segexamples/index.html for the list of
7573
// classes with indexes
@@ -177,75 +175,22 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
177175
}
178176
}
179177

180-
private void loadImagesFromLocal() {
181-
// Load images from /data/local & /sdcard/Pictures
182-
boolean hasAnyLocalFiles = populateImagePathFromLocal();
183-
boolean isImageShown = showImage();
184-
if (hasAnyLocalFiles && isImageShown) {
185-
showUIMessage(this, "Refreshed images from external storage and/or Assets folder");
186-
}
187-
}
188-
189-
private boolean showImage() {
190-
boolean isImageShown = false;
191-
if (mImagename == null) {
192-
showUIMessage(this, "No image to display");
193-
mImageView.setImageBitmap(null);
194-
return isImageShown;
195-
}
178+
private void loadSampleImage() {
196179
try {
197-
if (mImagename.startsWith("/")) {
198-
mBitmap = BitmapFactory.decodeFile(mImagename);
199-
} else {
200-
mBitmap = BitmapFactory.decodeStream(getAssets().open(mImagename));
201-
}
180+
String imageName = SAMPLE_IMAGES[mCurrentSampleIndex];
181+
mBitmap = BitmapFactory.decodeStream(getAssets().open(imageName));
202182
if (mBitmap != null) {
203183
mBitmap = Bitmap.createScaledBitmap(mBitmap, 224, 224, true);
204184
mImageView.setImageBitmap(mBitmap);
205-
isImageShown = true;
206185
}
207186
} catch (IOException e) {
208-
Log.e("ImageSegmentation", "Error reading image", e);
209-
mImageView.setImageBitmap(null);
187+
Log.e("MainActivity", "Error loading sample image", e);
210188
}
211-
return isImageShown;
212189
}
213190

214-
private boolean populateImagePathFromLocal() {
215-
boolean hasLocalFiles = false;
216-
File dir = new File(LOCAL_IMAGE_DIR);
217-
File[] files = dir.listFiles((d, name) ->
218-
name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png"));
219-
ArrayList<String> imageList = new ArrayList<>();
220-
if (files != null && files.length > 0) {
221-
for (int i = 0; i < files.length; i++) {
222-
mImageFiles.add(files[i].getAbsolutePath());
223-
hasLocalFiles = true;
224-
}
225-
mImagename = mImageFiles.get(0);
226-
} else {
227-
mImagename = null;
228-
}
229-
230-
return hasLocalFiles;
231-
}
232-
233-
private void populateImagePathFromAssets() {
234-
try {
235-
String[] allFiles = getAssets().list("");
236-
if (allFiles != null && allFiles.length > 0) {
237-
for (String file : allFiles) {
238-
if (file.endsWith(".jpg") || file.endsWith(".jpeg") || file.endsWith(".png")) {
239-
mImageFiles.add(file);
240-
}
241-
}
242-
mCurrentImageIndex = 0;
243-
mImagename = !mImageFiles.isEmpty() ? mImageFiles.get(0) : null;
244-
}
245-
} catch (IOException e) {
246-
Log.e("ImageSegmentation", "Error listing assets", e);
247-
finish();
248-
}
191+
private void nextSampleImage() {
192+
mCurrentSampleIndex = (mCurrentSampleIndex + 1) % SAMPLE_IMAGES.length;
193+
loadSampleImage();
249194
}
250195

251196
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@@ -261,7 +206,7 @@ protected void onCreate(Bundle savedInstanceState) {
261206
finish();
262207
}
263208

264-
// Initialize all views first!
209+
// Initialize all views
265210
mImageView = findViewById(R.id.imageView);
266211
mButtonXnnpack = findViewById(R.id.xnnpackButton);
267212
mDownloadModelButton = findViewById(R.id.downloadModelButton);
@@ -272,57 +217,39 @@ protected void onCreate(Bundle savedInstanceState) {
272217
// Set model path to app's private storage
273218
mModelPath = getFilesDir().getAbsolutePath() + "/" + MODEL_FILENAME;
274219

275-
populateImagePathFromAssets();
276-
showImage();
220+
// Load first sample image
221+
loadSampleImage();
277222

278223
// Check if model exists and load it, otherwise show download button
279224
loadModelOrShowDownloadButton();
280-
mImageView.setImageBitmap(mBitmap);
281225

282226
// Download button click handler
283227
mDownloadModelButton.setOnClickListener(v -> downloadModel());
284228

229+
// Next sample image button
285230
final Button buttonNext = findViewById(R.id.nextButton);
286-
buttonNext.setOnClickListener(
287-
new View.OnClickListener() {
288-
public void onClick(View v) {
289-
if (mImageFiles == null || mImageFiles.isEmpty()) {
290-
// No images available
291-
return;
292-
}
293-
// Move to the next image, wrap around if at the end
294-
mCurrentImageIndex = (mCurrentImageIndex + 1) % mImageFiles.size();
295-
mImagename = mImageFiles.get(mCurrentImageIndex);
296-
showImage();
297-
}
298-
});
231+
buttonNext.setOnClickListener(v -> nextSampleImage());
299232

300-
mButtonXnnpack.setOnClickListener(
301-
new View.OnClickListener() {
302-
public void onClick(View v) {
303-
mButtonXnnpack.setEnabled(false);
304-
mProgressBar.setVisibility(ProgressBar.VISIBLE);
305-
mInferenceTimeText.setVisibility(View.INVISIBLE);
306-
mButtonXnnpack.setText(getString(R.string.run_model));
307-
308-
Thread thread = new Thread(MainActivity.this);
309-
thread.start();
310-
}
311-
});
233+
// Run segmentation button
234+
mButtonXnnpack.setOnClickListener(v -> {
235+
mButtonXnnpack.setEnabled(false);
236+
mProgressBar.setVisibility(ProgressBar.VISIBLE);
237+
mInferenceTimeText.setVisibility(View.INVISIBLE);
238+
mButtonXnnpack.setText(getString(R.string.run_model));
239+
new Thread(MainActivity.this).start();
240+
});
312241

242+
// Reset to current sample image
313243
final Button resetImage = findViewById(R.id.resetImage);
314-
resetImage.setOnClickListener(
315-
v -> showImage());
244+
resetImage.setOnClickListener(v -> loadSampleImage());
316245

317-
// Pick Image Button - opens gallery
246+
// Pick Image from gallery
318247
final Button pickImageButton = findViewById(R.id.loadAndRefreshButton);
319-
pickImageButton.setOnClickListener(
320-
v -> {
321-
Intent intent = new Intent(Intent.ACTION_PICK);
322-
intent.setType("image/*");
323-
startActivityForResult(intent, REQUEST_PICK_IMAGE);
324-
}
325-
);
248+
pickImageButton.setOnClickListener(v -> {
249+
Intent intent = new Intent(Intent.ACTION_PICK);
250+
intent.setType("image/*");
251+
startActivityForResult(intent, REQUEST_PICK_IMAGE);
252+
});
326253
}
327254

328255
@Override

0 commit comments

Comments
 (0)