From 61539262ab36497720dda0cb9fe1dff71e8b7208 Mon Sep 17 00:00:00 2001 From: Guido <guido.jansen@wur.nl> Date: Fri, 6 Jan 2023 10:21:47 +0100 Subject: [PATCH] NAK Demo Version * Full Proof of Concept Pipeline * FoV bugs --- .../invite/traitdetector/MainActivity.java | 23 +++++++++-------- .../invite/traitdetector/ModelProcessor.java | 7 +++++- .../traitdetector/depth/ARActivity.java | 6 +++-- .../traitdetector/depth/DepthHandler.java | 1 + .../traitdetector/gallery/TomatoActivity.java | 3 +++ .../processing/BoundingBoxHandler.java | 2 +- .../src/main/res/layout/tomato_activity.xml | 25 +++++++++++++++++++ 7 files changed, 53 insertions(+), 14 deletions(-) diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/MainActivity.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/MainActivity.java index 5135037..a437ded 100644 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/MainActivity.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/MainActivity.java @@ -184,15 +184,17 @@ public class MainActivity extends AppCompatActivity { public void onClick(View v) { File csvFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "trialData.csv"); - if (!csvFile.exists()) { - try { - csvFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } + if (csvFile.exists()) { + csvFile.delete(); + } + + try { + csvFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); } - String columns = "year,trial,id,label,39,40,41,distance\n"; + String columns = "year,trial,id,label,width,length,volume,ratio,distance\n"; try { FileUtils.writeStringToFile(csvFile, columns); } catch (IOException e) { @@ -212,9 +214,10 @@ public class MainActivity extends AppCompatActivity { JSONObject traits = variety.getJSONObject("traits"); - values += traits.getInt("39") + ","; - values += traits.getInt("40") + ","; - values += traits.getInt("41") + ","; + values += ((traits.has("width")) ? traits.getInt("width") : "0") + ","; + values += ((traits.has("length")) ? traits.getInt("length") : "0") + ","; + values += ((traits.has("volume")) ? traits.getInt("volume") : "0") + ","; + values += ((traits.has("ratio")) ? traits.getInt("ratio") : "0") + ","; values += variety.getInt("distance") + "\n"; diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/ModelProcessor.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/ModelProcessor.java index 7aea0ec..97bf76f 100644 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/ModelProcessor.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/ModelProcessor.java @@ -149,6 +149,8 @@ public class ModelProcessor { int depth) { ArrayList<Result> results = new ArrayList<>(); + Log.d("COUNT", String.valueOf(countResult)); + if (countResult == 0) { return results; } @@ -204,6 +206,9 @@ public class ModelProcessor { lengths[i] = Ty/H; widths[i] = Tx/W; + lengths[i] = (float) (Ty/H/2.8); + widths[i] = (float) (Tx/W/2.8); + // Get centroids for finding top, side and bottom int centroidX = (L + end_point_xx)/2; int centroidY = (T + end_point_yy)/2; @@ -226,6 +231,7 @@ public class ModelProcessor { // Get bottom, side, top Arrays.sort(centroidsY_list); + Log.d("CENTROID", String.valueOf(centroidsY_list.length)); ValueIndex[] bottoms = Arrays.copyOfRange(centroidsY_list, 0, 3); ValueIndex[] sides = Arrays.copyOfRange(centroidsY_list, 3, 6); ValueIndex[] tops = Arrays.copyOfRange(centroidsY_list, 6, 9); @@ -307,7 +313,6 @@ public class ModelProcessor { float[] the_mask = output_results.get(i); Traits traits = new Traits(lengths_sorted[i], widths_sorted[i], volumes[i], shape_ratios[i]); - Result result = new Result(classes[i], confs[i], rects[i], diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/ARActivity.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/ARActivity.java index 2237837..3964ea8 100755 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/ARActivity.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/ARActivity.java @@ -318,7 +318,7 @@ public class ARActivity extends AppCompatActivity implements GLSurfaceView.Rende if (cameraDistance == 0) { messageToShow = "Initialising depth."; - } else if (cameraDistance < 500) { + } else if (cameraDistance < 700) { messageToShow = "Camera too close"; } else if (cameraDistance > 1200) { messageToShow = "Camera too far"; @@ -352,7 +352,9 @@ public class ARActivity extends AppCompatActivity implements GLSurfaceView.Rende if (capturePicture) { capturePicture = false; float[] fov = getCameraFOV(); - Bitmap sampleBitmap = BitmapFactory.decodeStream(getAssets().open("test0.png")); +// Bitmap sampleBitmap = BitmapFactory.decodeStream(getAssets().open("test7.jpg")); + Bitmap sampleBitmap = BitmapFactory.decodeStream(getAssets().open("test8.jpg")); +// Bitmap sampleBitmap = BitmapFactory.decodeStream(getAssets().open("test0.png")); JSONObject traits = depthTexture.saveDepth(this, frame, qrCodeValues, cameraDistance, fov, sampleBitmap); qrCodeValues.put("traits", traits); diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/DepthHandler.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/DepthHandler.java index d14644a..2b1437f 100644 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/DepthHandler.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/depth/DepthHandler.java @@ -144,6 +144,7 @@ public final class DepthHandler { // TODO: Remove sample bitmap final Outputs outputs = ModelProcessor.processImage(bitmap); +// final Outputs outputs = ModelProcessor.processImage(sampleBitmap); Bitmap resizedBitmap = outputs.resizedBitmap; int count = outputs.count; diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/gallery/TomatoActivity.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/gallery/TomatoActivity.java index b927a8c..4ef008d 100644 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/gallery/TomatoActivity.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/gallery/TomatoActivity.java @@ -43,6 +43,7 @@ public class TomatoActivity extends AppCompatActivity { TextView lengthValue = findViewById(R.id.lengthValue); TextView volumeValue = findViewById(R.id.volumeValue); TextView ratioValue = findViewById(R.id.ratioValue); + TextView distanceValue = findViewById(R.id.distanceValue); File trialDataPath = new File(this.getFilesDir().getPath() + "/trial_data"); @@ -69,6 +70,8 @@ public class TomatoActivity extends AppCompatActivity { volumeValue.setText(df.format(traits.getDouble("volume"))); ratioValue.setText(df.format(traits.getDouble("ratio"))); + distanceValue.setText(df.format(variety.getDouble("distance"))); + ArrayList<Cropped> cropped = new ArrayList<>(); File maskDataPath = new File(this.getFilesDir().getPath() + "/trial_data/" + varietyCode + "/masks/"); diff --git a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/processing/BoundingBoxHandler.java b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/processing/BoundingBoxHandler.java index 48da35f..9e16f27 100644 --- a/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/processing/BoundingBoxHandler.java +++ b/TraitDetector/app/src/main/java/com/wur/invite/traitdetector/processing/BoundingBoxHandler.java @@ -23,7 +23,7 @@ public class BoundingBoxHandler { int x = result.rect.left; int y = result.rect.top; - Bitmap croppedBitmap = Bitmap.createBitmap(resizedBitmap, x, y,croppedWidth, croppedHeight); + Bitmap croppedBitmap = Bitmap.createBitmap(resizedBitmap, x-15, y-15,croppedWidth+30, croppedHeight+30); final File out = new File(masksPath.getAbsolutePath(), id + ".png"); FileOutputStream fos = new FileOutputStream(out); diff --git a/TraitDetector/app/src/main/res/layout/tomato_activity.xml b/TraitDetector/app/src/main/res/layout/tomato_activity.xml index 92a6f07..625ba84 100644 --- a/TraitDetector/app/src/main/res/layout/tomato_activity.xml +++ b/TraitDetector/app/src/main/res/layout/tomato_activity.xml @@ -107,6 +107,19 @@ app:layout_constraintStart_toEndOf="@+id/ratioLabel" app:layout_constraintTop_toBottomOf="@+id/volumeValue" /> + <TextView + android:id="@+id/distanceValue" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="24dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="16dp" + android:textSize="20sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toEndOf="@+id/ratioLabel" + app:layout_constraintTop_toBottomOf="@+id/ratioValue" /> + <TextView android:id="@+id/widthValue" android:layout_width="0dp" @@ -131,6 +144,18 @@ app:layout_constraintStart_toEndOf="@+id/image" app:layout_constraintTop_toBottomOf="@+id/volumeLabel" /> + <TextView + android:id="@+id/distanceLabel" + android:layout_width="128dp" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:text="Distance (mm)" + android:textSize="20sp" + android:textStyle="bold" + app:layout_constraintStart_toEndOf="@+id/image" + app:layout_constraintTop_toBottomOf="@+id/ratioLabel" /> + <TextView android:id="@+id/volumeLabel" android:layout_width="128dp" -- GitLab