From 56fc7f5325fb9e1d53c7fd8c8e1e925ea727561a Mon Sep 17 00:00:00 2001 From: satyansh-y <56058777+satyansh-y@users.noreply.github.com> Date: Tue, 5 Apr 2022 18:28:33 -0500 Subject: [PATCH 1/6] Working Text recognition --- app/build.gradle | 9 ++ .../com/example/snackscan/MainActivity.java | 2 +- .../snackscan/TextRecognitionActivity.java | 92 ++++++++++++++++++- .../res/layout/activity_text_recognition.xml | 2 +- 4 files changed, 100 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 42f7aa5..2d6d6e2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,13 @@ dependencies { testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'org.json:json:20180813' + implementation 'org.apache.commons:commons-lang3:3.8.1' + implementation 'org.apache.commons:commons-text:1.6' + implementation 'org.apache.commons:commons-collections4:4.4' + implementation 'org.apache.commons:commons-lang3:3.9' + implementation 'org.apache.commons:commons-lang3:3.12.0' + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/snackscan/MainActivity.java b/app/src/main/java/com/example/snackscan/MainActivity.java index c1323ac..ddb7d48 100644 --- a/app/src/main/java/com/example/snackscan/MainActivity.java +++ b/app/src/main/java/com/example/snackscan/MainActivity.java @@ -59,7 +59,7 @@ protected void onCreate(Bundle savedInstanceState) { nextBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ - System.out.println("Button working"); + Intent sendText = new Intent(getApplicationContext(), TextRecognitionActivity.class); sendText.putExtra("scanned_text", resultText); startActivity(sendText); diff --git a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java index 8f47538..6bf70cd 100644 --- a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java +++ b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java @@ -1,27 +1,113 @@ package com.example.snackscan; +//package org.apache.commons.text.similarity; import androidx.appcompat.app.AppCompatActivity; +import org.apache.commons.text.similarity.CosineDistance; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Locale; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; + + +import com.google.android.gms.common.util.ArrayUtils; +import com.google.common.primitives.Ints; + public class TextRecognitionActivity extends AppCompatActivity { TextView Ingredients; + TextView Calories; + TextView Protein; + TextView Sugar; + TextView Fat; + private int caloriesIndex; + private int proteinIndex; + private int sugarIndex; + private int fatIndex; + public static double findSimilarity(String x, String y) { + + double maxLength = Math.max(x.length(), y.length()); + if (maxLength > 0) { + // optionally ignore case if needed + return (maxLength - StringUtils.getLevenshteinDistance(x, y)) / maxLength; + } + return 1.0; + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_recognition); + Ingredients = (TextView)findViewById(R.id.ingredients); + Calories = (TextView)findViewById((R.id.calnumber)); + Protein = (TextView)findViewById(R.id.proteinnumber); + Sugar = (TextView)findViewById((R.id.sugarnumber)); + Fat = (TextView)findViewById(R.id.fatnumber); + + + + + + // Function to get similarity - Ingredients = (TextView)findViewById(R.id.ingredients); Intent intent = getIntent(); String id = intent.getStringExtra("scanned_text"); - Ingredients.setText(id); - System.out.println(id); + id.replace("\n", " "); + String [] food_info = id.split("\\s+"); + //String [] food_info = {"CElurios", "560", "prOton", "34","fut", "23", "Sagar","9859"}; + +// System.out.println("TESTING!!!!!!!"); +// System.out.println(food_info.length); +// System.out.println(); + + for(int i=0; i< food_info.length; i++){ + if(findSimilarity("calories", food_info[i].toLowerCase())>= 0.5){ + + caloriesIndex = i+1; + } + if(findSimilarity("protein", food_info[i].toLowerCase())>= 0.5){ + + proteinIndex = i+1; + + } + if(findSimilarity("fat", food_info[i].toLowerCase())>= 0.5){ + + sugarIndex = i+1; + + } + if(findSimilarity("sugar", food_info[i].toLowerCase())>= 0.5){ + + fatIndex = i+1; + + } + + } +// System.out.println(caloriesIndex); +// System.out.println(proteinIndex); +// System.out.println(sugarIndex); +// System.out.println(fatIndex); +// +// System.out.println(Arrays.deepToString(food_info)); +// System.out.println("printing Array of food"); + + Calories.setText(food_info[caloriesIndex]); + Protein.setText(food_info[proteinIndex]); + Sugar.setText(food_info[sugarIndex]); + Fat.setText(food_info[fatIndex]); + //Ingredients.setText(id); + + + + //System.out.println(Arrays.deepToString(food_info)); + + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_text_recognition.xml b/app/src/main/res/layout/activity_text_recognition.xml index 39c010f..f154876 100644 --- a/app/src/main/res/layout/activity_text_recognition.xml +++ b/app/src/main/res/layout/activity_text_recognition.xml @@ -41,7 +41,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/ubuntu_mono_bold" - android:text="1500" + android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Display1" android:textSize="18dp" app:layout_constraintBottom_toBottomOf="parent" From b6212e705f8203e54b2909977764c06894ee1cee Mon Sep 17 00:00:00 2001 From: Syed Ammar Raza Date: Tue, 5 Apr 2022 19:28:49 -0500 Subject: [PATCH 2/6] working similarity checker --- .../snackscan/TextRecognitionActivity.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java index 6bf70cd..1b583aa 100644 --- a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java +++ b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java @@ -28,6 +28,11 @@ public class TextRecognitionActivity extends AppCompatActivity { private int proteinIndex; private int sugarIndex; private int fatIndex; + private Boolean foundCal=false; + private Boolean foundProtein=false; + private Boolean foundSugar=false; + private Boolean foundFat=false; + public static double findSimilarity(String x, String y) { double maxLength = Math.max(x.length(), y.length()); @@ -63,38 +68,42 @@ protected void onCreate(Bundle savedInstanceState) { String [] food_info = id.split("\\s+"); //String [] food_info = {"CElurios", "560", "prOton", "34","fut", "23", "Sagar","9859"}; -// System.out.println("TESTING!!!!!!!"); + System.out.println("TESTING!!!!!!!"); // System.out.println(food_info.length); // System.out.println(); for(int i=0; i< food_info.length; i++){ - if(findSimilarity("calories", food_info[i].toLowerCase())>= 0.5){ + if(findSimilarity("calories", food_info[i].toLowerCase())>= 0.5 && !foundCal){ caloriesIndex = i+1; + foundCal = true; } - if(findSimilarity("protein", food_info[i].toLowerCase())>= 0.5){ + if(findSimilarity("protein", food_info[i].toLowerCase())>= 0.5 && !foundProtein){ proteinIndex = i+1; + foundProtein = true; } - if(findSimilarity("fat", food_info[i].toLowerCase())>= 0.5){ + if(findSimilarity("carbohydrates", food_info[i].toLowerCase())>= 0.5 && !foundSugar){ sugarIndex = i+1; + foundSugar = true; } - if(findSimilarity("sugar", food_info[i].toLowerCase())>= 0.5){ + if(findSimilarity("fat", food_info[i].toLowerCase())>= 0.5 && !foundFat){ fatIndex = i+1; + foundFat = true; } } -// System.out.println(caloriesIndex); -// System.out.println(proteinIndex); -// System.out.println(sugarIndex); -// System.out.println(fatIndex); -// -// System.out.println(Arrays.deepToString(food_info)); + System.out.println(caloriesIndex); + System.out.println(proteinIndex); + System.out.println(sugarIndex); + System.out.println(fatIndex); + + System.out.println(Arrays.deepToString(food_info)); // System.out.println("printing Array of food"); Calories.setText(food_info[caloriesIndex]); From 172b146b9a9eaff30d2265e7f76d21ce6aca3eff Mon Sep 17 00:00:00 2001 From: Syed Ammar Raza Date: Tue, 5 Apr 2022 19:42:49 -0500 Subject: [PATCH 3/6] working similarity checker --- .../snackscan/TextRecognitionActivity.java | 29 +++++++------------ .../res/layout/activity_text_recognition.xml | 20 ++++++------- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java index 1b583aa..d664aaa 100644 --- a/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java +++ b/app/src/main/java/com/example/snackscan/TextRecognitionActivity.java @@ -6,31 +6,24 @@ import org.apache.commons.lang3.StringUtils; import java.util.Arrays; -import java.util.ArrayList; -import java.util.Locale; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; - - -import com.google.android.gms.common.util.ArrayUtils; -import com.google.common.primitives.Ints; - public class TextRecognitionActivity extends AppCompatActivity { TextView Ingredients; TextView Calories; TextView Protein; - TextView Sugar; + TextView Carb; TextView Fat; private int caloriesIndex; private int proteinIndex; - private int sugarIndex; + private int carbIndex; private int fatIndex; private Boolean foundCal=false; private Boolean foundProtein=false; - private Boolean foundSugar=false; + private Boolean foundCarb =false; private Boolean foundFat=false; public static double findSimilarity(String x, String y) { @@ -47,10 +40,10 @@ public static double findSimilarity(String x, String y) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_recognition); - Ingredients = (TextView)findViewById(R.id.ingredients); +// Ingredients = (TextView)findViewById(R.id.ingredients); Calories = (TextView)findViewById((R.id.calnumber)); Protein = (TextView)findViewById(R.id.proteinnumber); - Sugar = (TextView)findViewById((R.id.sugarnumber)); + Carb = (TextView)findViewById((R.id.carbnumber)); Fat = (TextView)findViewById(R.id.fatnumber); @@ -84,13 +77,13 @@ protected void onCreate(Bundle savedInstanceState) { foundProtein = true; } - if(findSimilarity("carbohydrates", food_info[i].toLowerCase())>= 0.5 && !foundSugar){ + if(findSimilarity("carbohydrates", food_info[i].toLowerCase())>= 0.5 && !foundCarb){ - sugarIndex = i+1; - foundSugar = true; + carbIndex = i+1; + foundCarb = true; } - if(findSimilarity("fat", food_info[i].toLowerCase())>= 0.5 && !foundFat){ + if(findSimilarity("fat", food_info[i].toLowerCase())>= 0.8 && !foundFat){ fatIndex = i+1; foundFat = true; @@ -100,7 +93,7 @@ protected void onCreate(Bundle savedInstanceState) { } System.out.println(caloriesIndex); System.out.println(proteinIndex); - System.out.println(sugarIndex); + System.out.println(carbIndex); System.out.println(fatIndex); System.out.println(Arrays.deepToString(food_info)); @@ -108,7 +101,7 @@ protected void onCreate(Bundle savedInstanceState) { Calories.setText(food_info[caloriesIndex]); Protein.setText(food_info[proteinIndex]); - Sugar.setText(food_info[sugarIndex]); + Carb.setText(food_info[carbIndex]); Fat.setText(food_info[fatIndex]); //Ingredients.setText(id); diff --git a/app/src/main/res/layout/activity_text_recognition.xml b/app/src/main/res/layout/activity_text_recognition.xml index f154876..0d3140d 100644 --- a/app/src/main/res/layout/activity_text_recognition.xml +++ b/app/src/main/res/layout/activity_text_recognition.xml @@ -82,7 +82,7 @@ app:layout_constraintVertical_bias="0.405" /> - + + + + + + + \ No newline at end of file From 66a5cec894fcbb0019e8977d4cd8651a8ba5cdc1 Mon Sep 17 00:00:00 2001 From: QQIN Date: Sat, 16 Apr 2022 20:01:31 -0400 Subject: [PATCH 4/6] add manual upload button in the camera page --- app/src/main/AndroidManifest.xml | 3 + .../com/example/snackscan/MainActivity.java | 14 +- .../snackscan/ManualInputActivity.java | 33 +++ .../main/res/layout/activity_manual_input.xml | 189 ++++++++++++++++++ app/src/main/res/layout/camera_page.xml | 18 +- 5 files changed, 254 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/example/snackscan/ManualInputActivity.java create mode 100644 app/src/main/res/layout/activity_manual_input.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5fd4e3..98303ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,6 +30,9 @@ + diff --git a/app/src/main/java/com/example/snackscan/MainActivity.java b/app/src/main/java/com/example/snackscan/MainActivity.java index ddb7d48..09ab4e1 100644 --- a/app/src/main/java/com/example/snackscan/MainActivity.java +++ b/app/src/main/java/com/example/snackscan/MainActivity.java @@ -28,6 +28,7 @@ import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; @@ -41,6 +42,7 @@ public class MainActivity extends AppCompatActivity { private ImageView iview; private Button btn; private Button nextBtn; + private Button manualBtn; private String fileName = ""; private Button CaptureImageBtn,detectTextBtn; private ImageView imageView; @@ -54,7 +56,8 @@ protected void onCreate(Bundle savedInstanceState) { iview = (ImageView) findViewById(R.id.imageview); btn = (Button) findViewById(R.id.button); nextBtn = (Button) findViewById(R.id.nextBtn); - + // manual enter btn : take you to a screen where you can manually enter 4 elements + manualBtn = (Button) findViewById(R.id.manualBtn); nextBtn.setOnClickListener(new View.OnClickListener(){ @Override @@ -68,6 +71,7 @@ public void onClick(View v){ } }); + btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -80,6 +84,14 @@ public void onClick(View v) { } }); + // TODO: set up manualBtn click leads to activity_manual_input.xml + manualBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(getApplicationContext(), ManualInputActivity.class)); + finish(); + } + }); } public void logout(View view) { diff --git a/app/src/main/java/com/example/snackscan/ManualInputActivity.java b/app/src/main/java/com/example/snackscan/ManualInputActivity.java new file mode 100644 index 0000000..d35a0fd --- /dev/null +++ b/app/src/main/java/com/example/snackscan/ManualInputActivity.java @@ -0,0 +1,33 @@ +package com.example.snackscan; + +import android.os.Bundle; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.firestore.FirebaseFirestore; + +public class ManualInputActivity extends AppCompatActivity { + EditText mCal, mCarb, mFat, mProtein; + Button mSubmit; + FirebaseAuth fAuth; + FirebaseFirestore fStore; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_manual_input); + // TODO: add 4 elements, click submit btn then upload to the user db to firebase + mCal = findViewById(R.id.calMnumber); + mCarb = findViewById(R.id.carbMnumber); + mFat = findViewById(R.id.fatMnumber); + mProtein = findViewById(R.id.proteinMnumber); + mSubmit = (Button) findViewById(R.id.submitButton); + + System.out.print("test"); + } +} diff --git a/app/src/main/res/layout/activity_manual_input.xml b/app/src/main/res/layout/activity_manual_input.xml new file mode 100644 index 0000000..12ac86e --- /dev/null +++ b/app/src/main/res/layout/activity_manual_input.xml @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +