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