diff --git a/Lookify/.idea/.name b/Lookify/.idea/.name index 8e9d508..f967412 100644 --- a/Lookify/.idea/.name +++ b/Lookify/.idea/.name @@ -1 +1 @@ -Lookify_robocze \ No newline at end of file +Lookifyv2 \ No newline at end of file diff --git a/Lookify/.idea/vcs.xml b/Lookify/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/Lookify/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Lookify/app/build.gradle b/Lookify/app/build.gradle index 7868e3c..43e036d 100644 --- a/Lookify/app/build.gradle +++ b/Lookify/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { - applicationId "com.example.lookify_robocze" + applicationId "com.example.lookifyv2" minSdkVersion 15 targetSdkVersion 29 versionCode 1 @@ -21,11 +21,10 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' implementation project(path: ':openCVLibrary348') - } diff --git a/Lookify/app/jniLibs/arm64-v8a/libopencv_java3.so b/Lookify/app/jniLibs/arm64-v8a/libopencv_java3.so deleted file mode 100644 index ceea27d..0000000 Binary files a/Lookify/app/jniLibs/arm64-v8a/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/armeabi-v7a/libopencv_java3.so b/Lookify/app/jniLibs/armeabi-v7a/libopencv_java3.so deleted file mode 100644 index 64d347c..0000000 Binary files a/Lookify/app/jniLibs/armeabi-v7a/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/armeabi/libopencv_java3.so b/Lookify/app/jniLibs/armeabi/libopencv_java3.so deleted file mode 100644 index 5add338..0000000 Binary files a/Lookify/app/jniLibs/armeabi/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/mips/libopencv_java3.so b/Lookify/app/jniLibs/mips/libopencv_java3.so deleted file mode 100644 index 3d11c89..0000000 Binary files a/Lookify/app/jniLibs/mips/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/mips64/libopencv_java3.so b/Lookify/app/jniLibs/mips64/libopencv_java3.so deleted file mode 100644 index 39c3c1a..0000000 Binary files a/Lookify/app/jniLibs/mips64/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/x86/libopencv_java3.so b/Lookify/app/jniLibs/x86/libopencv_java3.so deleted file mode 100644 index 271226e..0000000 Binary files a/Lookify/app/jniLibs/x86/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/jniLibs/x86_64/libopencv_java3.so b/Lookify/app/jniLibs/x86_64/libopencv_java3.so deleted file mode 100644 index 02ee5cf..0000000 Binary files a/Lookify/app/jniLibs/x86_64/libopencv_java3.so and /dev/null differ diff --git a/Lookify/app/src/androidTest/java/com/example/lookify_robocze/ExampleInstrumentedTest.java b/Lookify/app/src/androidTest/java/com/example/lookify_robocze/ExampleInstrumentedTest.java deleted file mode 100644 index 70d667f..0000000 --- a/Lookify/app/src/androidTest/java/com/example/lookify_robocze/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.lookify_robocze; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.example.lookify_robocze", appContext.getPackageName()); - } -} diff --git a/Lookify/app/src/androidTest/java/com/example/test/ExampleInstrumentedTest.java b/Lookify/app/src/androidTest/java/com/example/lookifyv2/ExampleInstrumentedTest.java similarity index 85% rename from Lookify/app/src/androidTest/java/com/example/test/ExampleInstrumentedTest.java rename to Lookify/app/src/androidTest/java/com/example/lookifyv2/ExampleInstrumentedTest.java index 339aa4d..39202a3 100644 --- a/Lookify/app/src/androidTest/java/com/example/test/ExampleInstrumentedTest.java +++ b/Lookify/app/src/androidTest/java/com/example/lookifyv2/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.example.test; +package com.example.lookifyv2; import android.content.Context; @@ -22,6 +22,6 @@ public class ExampleInstrumentedTest { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.example.test", appContext.getPackageName()); + assertEquals("com.example.lookifyv2", appContext.getPackageName()); } } diff --git a/Lookify/app/src/main/AndroidManifest.xml b/Lookify/app/src/main/AndroidManifest.xml index 0699b63..93d05cf 100644 --- a/Lookify/app/src/main/AndroidManifest.xml +++ b/Lookify/app/src/main/AndroidManifest.xml @@ -1,28 +1,9 @@ + package="com.example.lookifyv2"> - - - - - - - - + + - + - + diff --git a/Lookify/app/src/main/java/com/example/lookify_robocze/OpenCVCamera.java b/Lookify/app/src/main/java/com/example/lookify_robocze/OpenCVCamera.java deleted file mode 100644 index 130f26a..0000000 --- a/Lookify/app/src/main/java/com/example/lookify_robocze/OpenCVCamera.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.example.lookify_robocze; - -import android.os.Bundle; -import android.util.Log; -import android.view.SurfaceView; -import android.view.WindowManager; -import androidx.appcompat.app.AppCompatActivity; -import org.opencv.android.OpenCVLoader; -import org.opencv.android.JavaCameraView; -import org.opencv.android.LoaderCallbackInterface; -import org.opencv.android.CameraBridgeViewBase; -import org.opencv.android.BaseLoaderCallback; - -// Napisane z pomocą artykułu spod adresu https://blog.codeonion.com/2016/04/09/show-camera-on-android-app-using-opencv-for-android/ - -public class OpenCVCamera extends AppCompatActivity { - - // Do logowania komunikatów typu success/failure - private static final String TAG = "OCVSample::Activity"; - - // Laduje kamere OpenCV - private CameraBridgeViewBase mOpenCvCameraView; - - // Menadżer OpenCV do komunikacji aplikacji z telefonem - private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: - { - Log.i(TAG, "OpenCV loaded successfully"); - mOpenCvCameraView.enableView(); - } break; - default: - { - super.onManagerConnected(status); - } break; - } - } - }; - - // Inicjalizacja narzędzia do przeglądania logów - public OpenCVCamera() { - Log.i(TAG, "Instantiated new " + this.getClass()); - } - - // Wyświatlanie kamery przy powstaniu activity - @Override - protected void onCreate(Bundle savedInstanceState) { - Log.i(TAG, "called onCreate"); - super.onCreate(savedInstanceState); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - setContentView(R.layout.activity_open_cvcamera); - - mOpenCvCameraView = (JavaCameraView) findViewById(R.id.show_camera_activity_java_surface_view); - - mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); - - } - - // Działanie przy pauzie - @Override - public void onPause() - { - super.onPause(); - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - } - - // Działanie po wznowieniu - @Override - public void onResume() - { - super.onResume(); - if (!OpenCVLoader.initDebug()) { - Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); - OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); - } else { - Log.d(TAG, "OpenCV library found inside package. Using it!"); - mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); - } - } - - // Działanie przy "zamknięciu" - public void onDestroy() { - super.onDestroy(); - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - } - -} diff --git a/Lookify/app/src/main/java/com/example/lookify_robocze/About.java b/Lookify/app/src/main/java/com/example/lookifyv2/About.java similarity index 88% rename from Lookify/app/src/main/java/com/example/lookify_robocze/About.java rename to Lookify/app/src/main/java/com/example/lookifyv2/About.java index 4aebb75..0084d3d 100644 --- a/Lookify/app/src/main/java/com/example/lookify_robocze/About.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/About.java @@ -1,4 +1,4 @@ -package com.example.lookify_robocze; +package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; diff --git a/Lookify/app/src/main/java/com/example/lookify_robocze/Help.java b/Lookify/app/src/main/java/com/example/lookifyv2/Help.java similarity index 88% rename from Lookify/app/src/main/java/com/example/lookify_robocze/Help.java rename to Lookify/app/src/main/java/com/example/lookifyv2/Help.java index 295fb16..3269eff 100644 --- a/Lookify/app/src/main/java/com/example/lookify_robocze/Help.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Help.java @@ -1,4 +1,4 @@ -package com.example.lookify_robocze; +package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; diff --git a/Lookify/app/src/main/java/com/example/lookify_robocze/MainActivity.java b/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java similarity index 52% rename from Lookify/app/src/main/java/com/example/lookify_robocze/MainActivity.java rename to Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java index 44a18b0..78555bb 100644 --- a/Lookify/app/src/main/java/com/example/lookify_robocze/MainActivity.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java @@ -1,11 +1,13 @@ -package com.example.lookify_robocze; - -import androidx.appcompat.app.AppCompatActivity; - +package com.example.lookifyv2; +import android.Manifest; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.Button; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { @@ -13,41 +15,50 @@ public class MainActivity extends AppCompatActivity { private Button button_help; private Button button_about; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - button_scan = findViewById(R.id.camera_start_button); + button_scan = findViewById(R.id.scan_start_button); button_help = findViewById(R.id.help_start_button); button_about = findViewById(R.id.about_start_button); button_scan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - openOpenCVCamera(); + openScan(); } }); - button_help.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openHelp(); } }); - button_about.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openAbout(); } }); + + //Dezaktywacja przycisku skanowania, jeśli nie ma dostępu do kamery; żądanie dostępu do kamery i zapisu + if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + button_scan.setEnabled(false); + ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); + } } - public void openOpenCVCamera(){ - Intent intent_OpenCVCamera = new Intent(this, OpenCVCamera.class); - startActivity(intent_OpenCVCamera); + //Aktywacja przycisku skanowania, jeśli uprawnienia zostały przyznane + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode == 0) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED + && grantResults[1] == PackageManager.PERMISSION_GRANTED) { + button_scan.setEnabled(true); + } + } } public void openHelp(){ @@ -59,5 +70,9 @@ public class MainActivity extends AppCompatActivity { Intent intent_About = new Intent(this, About.class); startActivity(intent_About); } -} + public void openScan(){ + Intent intent_Scan = new Intent(this, Scan.class); + startActivity(intent_Scan); + } +} diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Scan.java b/Lookify/app/src/main/java/com/example/lookifyv2/Scan.java new file mode 100644 index 0000000..ce1cc51 --- /dev/null +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Scan.java @@ -0,0 +1,58 @@ +package com.example.lookifyv2; +import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; + +//klasa napisana z pomocą tutorialu dostępnego na https://androidkennel.org/android-camera-access-tutorial/ +public class Scan extends AppCompatActivity { + + private Uri file; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_scan); + openCamera(); + } + + //Uruchomienie androidowego modułu kamery + public void openCamera(){ + Intent intent_Camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + file = Uri.fromFile(getOutputMediaFile()); + intent_Camera.putExtra(MediaStore.EXTRA_OUTPUT, file); + startActivityForResult(intent_Camera, 100); + } + + //Jeśli moduł kamery zostanie zamknięty zanim zrobione zostanie zdjęcie to activity skanowania się kończy + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == 100) { + if (resultCode == RESULT_CANCELED) { + finish(); + } + } + } + + //Tworzenie katalogu dla danych aplikacji jesli nie istnieje; umieszczanie w nim tymczasowego pliku zdjecia w formacie .jpg + private static File getOutputMediaFile(){ + File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_PICTURES), "Lookify"); + + if (!mediaStorageDir.exists()){ + if (!mediaStorageDir.mkdirs()){ + return null; + } + } + + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + return new File(mediaStorageDir.getPath() + File.separator + + "TEMP_"+ timeStamp + ".jpg"); //DO EDYCJI + } + +} diff --git a/Lookify/app/src/main/java/com/example/test/ColorBlobDetector.java b/Lookify/app/src/main/java/com/example/test/ColorBlobDetector.java deleted file mode 100644 index b265b41..0000000 --- a/Lookify/app/src/main/java/com/example/test/ColorBlobDetector.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.example.test; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.opencv.core.Core; -import org.opencv.core.CvType; -import org.opencv.core.Mat; -import org.opencv.core.MatOfPoint; -import org.opencv.core.Scalar; -import org.opencv.imgproc.Imgproc; - -public class ColorBlobDetector { - // Lower and Upper bounds for range checking in HSV color space - private Scalar mLowerBound = new Scalar(0); - private Scalar mUpperBound = new Scalar(0); - // Minimum contour area in percent for contours filtering - private static double mMinContourArea = 0.1; - // Color radius for range checking in HSV color space - private Scalar mColorRadius = new Scalar(25,50,50,0); - private Mat mSpectrum = new Mat(); - private List mContours = new ArrayList(); - - // Cache - Mat mPyrDownMat = new Mat(); - Mat mHsvMat = new Mat(); - Mat mMask = new Mat(); - Mat mDilatedMask = new Mat(); - Mat mHierarchy = new Mat(); - - public void setColorRadius(Scalar radius) { - mColorRadius = radius; - } - - public void setHsvColor(Scalar hsvColor) { - double minH = (hsvColor.val[0] >= mColorRadius.val[0]) ? hsvColor.val[0]-mColorRadius.val[0] : 0; - double maxH = (hsvColor.val[0]+mColorRadius.val[0] <= 255) ? hsvColor.val[0]+mColorRadius.val[0] : 255; - - mLowerBound.val[0] = minH; - mUpperBound.val[0] = maxH; - - mLowerBound.val[1] = hsvColor.val[1] - mColorRadius.val[1]; - mUpperBound.val[1] = hsvColor.val[1] + mColorRadius.val[1]; - - mLowerBound.val[2] = hsvColor.val[2] - mColorRadius.val[2]; - mUpperBound.val[2] = hsvColor.val[2] + mColorRadius.val[2]; - - mLowerBound.val[3] = 0; - mUpperBound.val[3] = 255; - - Mat spectrumHsv = new Mat(1, (int)(maxH-minH), CvType.CV_8UC3); - - for (int j = 0; j < maxH-minH; j++) { - byte[] tmp = {(byte)(minH+j), (byte)255, (byte)255}; - spectrumHsv.put(0, j, tmp); - } - - Imgproc.cvtColor(spectrumHsv, mSpectrum, Imgproc.COLOR_HSV2RGB_FULL, 4); - } - - public Mat getSpectrum() { - return mSpectrum; - } - - public void setMinContourArea(double area) { - mMinContourArea = area; - } - - public void process(Mat rgbaImage) { - Imgproc.pyrDown(rgbaImage, mPyrDownMat); - Imgproc.pyrDown(mPyrDownMat, mPyrDownMat); - - Imgproc.cvtColor(mPyrDownMat, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL); - - Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask); - Imgproc.dilate(mMask, mDilatedMask, new Mat()); - - List contours = new ArrayList(); - - Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); - - // Find max contour area - double maxArea = 0; - Iterator each = contours.iterator(); - while (each.hasNext()) { - MatOfPoint wrapper = each.next(); - double area = Imgproc.contourArea(wrapper); - if (area > maxArea) - maxArea = area; - } - - // Filter contours by area and resize to fit the original image size - mContours.clear(); - each = contours.iterator(); - while (each.hasNext()) { - MatOfPoint contour = each.next(); - if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) { - Core.multiply(contour, new Scalar(4,4), contour); - mContours.add(contour); - } - } - } - - public List getContours() { - return mContours; - } -} \ No newline at end of file diff --git a/Lookify/app/src/main/java/com/example/test/MainActivity.java b/Lookify/app/src/main/java/com/example/test/MainActivity.java deleted file mode 100644 index 3117237..0000000 --- a/Lookify/app/src/main/java/com/example/test/MainActivity.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.example.test; - -import java.util.List; - -import org.opencv.android.BaseLoaderCallback; -import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame; -import org.opencv.android.LoaderCallbackInterface; -import org.opencv.android.OpenCVLoader; -import org.opencv.core.Core; -import org.opencv.core.CvType; -import org.opencv.core.Mat; -import org.opencv.core.MatOfPoint; -import org.opencv.core.Rect; -import org.opencv.core.Scalar; -import org.opencv.core.Size; -import org.opencv.android.CameraBridgeViewBase; -import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2; -import org.opencv.imgproc.Imgproc; - -import android.app.Activity; -import android.os.Bundle; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.view.View.OnTouchListener; -import android.view.SurfaceView; - -import com.example.test.R; - -public class MainActivity extends Activity implements OnTouchListener, CvCameraViewListener2 { - private static final String TAG = "MainActivity"; - - private boolean mIsColorSelected = false; - private Mat mRgba; - private Scalar mBlobColorRgba; - private Scalar mBlobColorHsv; - private com.example.test.ColorBlobDetector mDetector; - private Mat mSpectrum; - private Size SPECTRUM_SIZE; - private Scalar CONTOUR_COLOR; - - private CameraBridgeViewBase mOpenCvCameraView; - - private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: - { - Log.i(TAG, "OpenCV loaded successfully"); - mOpenCvCameraView.enableView(); - mOpenCvCameraView.setOnTouchListener(MainActivity.this); - } break; - default: - { - super.onManagerConnected(status); - } break; - } - } - }; - - public MainActivity() { - Log.i(TAG, "Instantiated new " + this.getClass()); - } - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) { - Log.i(TAG, "called onCreate"); - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - setContentView(R.layout.color_blob_detection_surface_view); - - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.color_blob_detection_activity_surface_view); - mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); - mOpenCvCameraView.setCvCameraViewListener(this); - } - - @Override - public void onPause() - { - super.onPause(); - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - } - - @Override - public void onResume() - { - super.onResume(); - if (!OpenCVLoader.initDebug()) { - Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); - OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); - } else { - Log.d(TAG, "OpenCV library found inside package. Using it!"); - mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); - } - } - - public void onDestroy() { - super.onDestroy(); - if (mOpenCvCameraView != null) - mOpenCvCameraView.disableView(); - } - - public void onCameraViewStarted(int width, int height) { - mRgba = new Mat(height, width, CvType.CV_8UC4); - mDetector = new com.example.test.ColorBlobDetector(); - mSpectrum = new Mat(); - mBlobColorRgba = new Scalar(255); - mBlobColorHsv = new Scalar(255); - SPECTRUM_SIZE = new Size(200, 64); - CONTOUR_COLOR = new Scalar(255,0,0,255); - } - - public void onCameraViewStopped() { - mRgba.release(); - } - - public boolean onTouch(View v, MotionEvent event) { - int cols = mRgba.cols(); - int rows = mRgba.rows(); - - int xOffset = (mOpenCvCameraView.getWidth() - cols) / 2; - int yOffset = (mOpenCvCameraView.getHeight() - rows) / 2; - - int x = (int)event.getX() - xOffset; - int y = (int)event.getY() - yOffset; - - Log.i(TAG, "Touch image coordinates: (" + x + ", " + y + ")"); - - if ((x < 0) || (y < 0) || (x > cols) || (y > rows)) return false; - - Rect touchedRect = new Rect(); - - touchedRect.x = (x>4) ? x-4 : 0; - touchedRect.y = (y>4) ? y-4 : 0; - - touchedRect.width = (x+4 < cols) ? x + 4 - touchedRect.x : cols - touchedRect.x; - touchedRect.height = (y+4 < rows) ? y + 4 - touchedRect.y : rows - touchedRect.y; - - Mat touchedRegionRgba = mRgba.submat(touchedRect); - - Mat touchedRegionHsv = new Mat(); - Imgproc.cvtColor(touchedRegionRgba, touchedRegionHsv, Imgproc.COLOR_RGB2HSV_FULL); - - // Calculate average color of touched region - mBlobColorHsv = Core.sumElems(touchedRegionHsv); - int pointCount = touchedRect.width*touchedRect.height; - for (int i = 0; i < mBlobColorHsv.val.length; i++) - mBlobColorHsv.val[i] /= pointCount; - - mBlobColorRgba = converScalarHsv2Rgba(mBlobColorHsv); - - Log.i(TAG, "Touched rgba color: (" + mBlobColorRgba.val[0] + ", " + mBlobColorRgba.val[1] + - ", " + mBlobColorRgba.val[2] + ", " + mBlobColorRgba.val[3] + ")"); - - mDetector.setHsvColor(mBlobColorHsv); - - Imgproc.resize(mDetector.getSpectrum(), mSpectrum, SPECTRUM_SIZE, 0, 0, Imgproc.INTER_LINEAR_EXACT); - - mIsColorSelected = true; - - touchedRegionRgba.release(); - touchedRegionHsv.release(); - - return false; // don't need subsequent touch events - } - - public Mat onCameraFrame(CvCameraViewFrame inputFrame) { - mRgba = inputFrame.rgba(); - - if (mIsColorSelected) { - mDetector.process(mRgba); - List contours = mDetector.getContours(); - Log.e(TAG, "Contours count: " + contours.size()); - Imgproc.drawContours(mRgba, contours, -1, CONTOUR_COLOR); - - Mat colorLabel = mRgba.submat(4, 68, 4, 68); - colorLabel.setTo(mBlobColorRgba); - - Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols()); - mSpectrum.copyTo(spectrumLabel); - } - - return mRgba; - } - - private Scalar converScalarHsv2Rgba(Scalar hsvColor) { - Mat pointMatRgba = new Mat(); - Mat pointMatHsv = new Mat(1, 1, CvType.CV_8UC3, hsvColor); - Imgproc.cvtColor(pointMatHsv, pointMatRgba, Imgproc.COLOR_HSV2RGB_FULL, 4); - - return new Scalar(pointMatRgba.get(0, 0)); - } -} \ No newline at end of file diff --git a/Lookify/app/src/main/res/drawable/camera_icon.xml b/Lookify/app/src/main/res/drawable/camera_icon.xml deleted file mode 100644 index fce0156..0000000 --- a/Lookify/app/src/main/res/drawable/camera_icon.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/Lookify/app/src/main/res/drawable/ikona_aparat_czerwona.png b/Lookify/app/src/main/res/drawable/ikona_aparat_czerwona.png deleted file mode 100644 index 564063d..0000000 Binary files a/Lookify/app/src/main/res/drawable/ikona_aparat_czerwona.png and /dev/null differ diff --git a/Lookify/app/src/main/res/drawable/ikona_aparat_szara.png b/Lookify/app/src/main/res/drawable/ikona_aparat_szara.png deleted file mode 100644 index abc118b..0000000 Binary files a/Lookify/app/src/main/res/drawable/ikona_aparat_szara.png and /dev/null differ diff --git a/Lookify/app/src/main/res/drawable/ikona_aparat_szkarlatna.png b/Lookify/app/src/main/res/drawable/ikona_aparat_szkarlatna.png deleted file mode 100644 index 5d88e1e..0000000 Binary files a/Lookify/app/src/main/res/drawable/ikona_aparat_szkarlatna.png and /dev/null differ diff --git a/Lookify/app/src/main/res/layout/activity_about.xml b/Lookify/app/src/main/res/layout/activity_about.xml index 50379d7..1c0da78 100644 --- a/Lookify/app/src/main/res/layout/activity_about.xml +++ b/Lookify/app/src/main/res/layout/activity_about.xml @@ -16,4 +16,5 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + \ No newline at end of file diff --git a/Lookify/app/src/main/res/layout/activity_help.xml b/Lookify/app/src/main/res/layout/activity_help.xml index 76be43f..41fe943 100644 --- a/Lookify/app/src/main/res/layout/activity_help.xml +++ b/Lookify/app/src/main/res/layout/activity_help.xml @@ -16,4 +16,5 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + \ No newline at end of file diff --git a/Lookify/app/src/main/res/layout/activity_main.xml b/Lookify/app/src/main/res/layout/activity_main.xml index 8ddc091..0a5d479 100644 --- a/Lookify/app/src/main/res/layout/activity_main.xml +++ b/Lookify/app/src/main/res/layout/activity_main.xml @@ -6,9 +6,8 @@ android:layout_height="match_parent" tools:context=".MainActivity"> -