@@ -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