diff --git a/Lookify/app/src/main/AndroidManifest.xml b/Lookify/app/src/main/AndroidManifest.xml index 165dde3..ff7d16f 100644 --- a/Lookify/app/src/main/AndroidManifest.xml +++ b/Lookify/app/src/main/AndroidManifest.xml @@ -12,11 +12,12 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + - + diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java b/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java index 6c6a7f8..c476da1 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java @@ -1,5 +1,6 @@ package com.example.lookifyv2; +import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; @@ -23,11 +24,15 @@ import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.imgproc.Imgproc; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import static org.opencv.imgproc.Imgproc.ADAPTIVE_THRESH_MEAN_C; +import static org.opencv.imgproc.Imgproc.THRESH_BINARY; + public class Decode extends AppCompatActivity { //inicjacja logów OpenCV @@ -35,6 +40,9 @@ public class Decode extends AppCompatActivity { String filePath; Mat matPic; + Mat matPicG; + Mat matPicGB; + Mat matPicGBT; //OpenCV domyślnie uruchamia się po onCreate co powoduje problemy - zapobiegamy więc temu private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @@ -65,10 +73,22 @@ public class Decode extends AppCompatActivity { Bundle extras = getIntent().getExtras(); filePath = extras.getString("takenPic"); matPic = Imgcodecs.imread(filePath); + Mat matPicG = new Mat(); + Mat matPicGB = new Mat(); + Mat matPicGBT = new Mat(); - String contents = null; - Bitmap bMap = Bitmap.createBitmap(matPic.width(), matPic.height(), Bitmap.Config.ARGB_8888); - Utils.matToBitmap(matPic, bMap); + //Zdjęcie zamieniane jest na czarno-biały odpowiednik + Imgproc.cvtColor(matPic, matPicG, Imgproc.COLOR_RGB2GRAY); + + //Usuwanie "noise'u" przy jednoczesnym zachowywaniu ostrych krawędzi za pomocą bilateralnego filtru + Imgproc.bilateralFilter(matPicG, matPicGB, 5, 75, 75); + + //Zwiększanie kontrastu za pomocą thresholdu(wartości adaptywnego zaczerpnięte z https://stackoverflow.com/questions/31289895/threshold-image-using-opencv-java) + //Imgproc.adaptiveThreshold(matPicGB, matPicGBT, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, 40); + Imgproc.threshold(matPicGB, matPicGBT, 100, 255, THRESH_BINARY); + + Bitmap bMap = Bitmap.createBitmap(matPicGBT.width(), matPicGBT.height(), Bitmap.Config.ARGB_8888); + Utils.matToBitmap(matPicGBT, bMap); int[] intArray = new int[bMap.getWidth() * bMap.getHeight()]; bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); @@ -100,13 +120,16 @@ public class Decode extends AppCompatActivity { //Szukanie kodu na wczytanym zdjęciu MultiFormatReader reader = new MultiFormatReader(); + String contents = null; try { Result result = reader.decode(bitmap, hints); contents = result.getText(); } catch (NotFoundException e) { e.printStackTrace(); + Intent intent_DecodeFail = new Intent(this, DecodeFail.class); + startActivity(intent_DecodeFail); + Decode.this.finish(); } - Toast toast = Toast.makeText(this, contents, Toast.LENGTH_LONG); toast.show(); } diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java b/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java new file mode 100644 index 0000000..8c1c7fa --- /dev/null +++ b/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java @@ -0,0 +1,47 @@ +package com.example.lookifyv2; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +public class DecodeFail extends AppCompatActivity { + + private Button button_tryagain; + private Button button_backtomain; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_decode_fail); + + button_tryagain = findViewById(R.id.try_again_button); + button_backtomain = findViewById(R.id.backto_main_button); + + button_tryagain.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openScan(); + } + }); + button_backtomain.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Finish(); + } + }); + + } + + public void Finish(){ + finish(); + } + + public void openScan(){ + Intent intent_Scan = new Intent(this, TakePhoto.class); + startActivity(intent_Scan); + finish(); + } +} diff --git a/Lookify/app/src/main/res/layout/activity_decode.xml b/Lookify/app/src/main/res/layout/activity_decode.xml index a4899ff..c979e8f 100644 --- a/Lookify/app/src/main/res/layout/activity_decode.xml +++ b/Lookify/app/src/main/res/layout/activity_decode.xml @@ -6,4 +6,15 @@ android:layout_height="match_parent" tools:context=".Decode"> + + \ No newline at end of file diff --git a/Lookify/app/src/main/res/layout/activity_decode_fail.xml b/Lookify/app/src/main/res/layout/activity_decode_fail.xml new file mode 100644 index 0000000..f2465c9 --- /dev/null +++ b/Lookify/app/src/main/res/layout/activity_decode_fail.xml @@ -0,0 +1,46 @@ + + + + + +