From b06d0ff954728c3da80f0943c0e8b1e621d14af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EA=B2=BD?= Date: Sat, 29 Apr 2023 03:06:40 +0900 Subject: [PATCH 1/6] ADD) save plate image --- .../com/carplate/camerax/MainActivity.java | 73 ++++++++++++++++--- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/carplate/camerax/MainActivity.java b/app/src/main/java/com/carplate/camerax/MainActivity.java index 2c44cd9..14df429 100644 --- a/app/src/main/java/com/carplate/camerax/MainActivity.java +++ b/app/src/main/java/com/carplate/camerax/MainActivity.java @@ -355,19 +355,26 @@ public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { end = System.currentTimeMillis(); double fps = Math.round(((1.0/(end-start))*1000*100.0))/100.0; String infer_result = fps + " fps"; - - runOnUiThread(new Runnable() { - @Override - public void run() { - try { - tvTime.setText(infer_result); - textView.setText(result2); - imageView.setImageBitmap(onFrame3); - } catch (Exception e) { - e.printStackTrace(); + String beforePlate = "0"; + + if(result2.equlas(beforePlate)){} + else { + runOnUiThread(new Runnable() { + @Override + public void run() { + try { + tvTime.setText(infer_result); + textView.setText(result2); + imageView.setImageBitmap(onFrame3); + beforePlate = result2; + saveImg(onFrame3, result2) + + } catch (Exception e) { + e.printStackTrace(); + } } - } - }); + }); + } } else{ @@ -375,4 +382,46 @@ public void run() { } return matInput; } + + private void saveImg(Bitmap bitmap, String textview) { + + try { + //저장할 파일 경로 + File storageDir = new File(getFilesDir() + "/capture"); + if (!storageDir.exists()) //폴더가 없으면 생성. + storageDir.mkdirs(); + + String filename = textView.getText().toString() + ".jpg"; + + // 기존에 있다면 삭제 + File file = new File(storageDir, filename); + boolean deleted = file.delete(); + Log.w(TAG, "Delete Dup Check : " + deleted); + FileOutputStream output = null; + + try { + output = new FileOutputStream(file); + //BitmapDrawable drawable = (BitmapDrawable) ivCapture.getDrawable(); + //Bitmap bitmap = drawable.getBitmap(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 70, output); //해상도에 맞추어 Compress + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + try { + assert output != null; + output.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + Log.e(TAG, "Captured Saved"); + Toast.makeText(this, "Capture Saved ", Toast.LENGTH_SHORT).show(); + } catch (Exception e) { + Log.w(TAG, "Capture Saving Error!", e); + Toast.makeText(this, "Save failed", Toast.LENGTH_SHORT).show(); + + } + } + } \ No newline at end of file From 60e64ca93705a04474d7d5ee220edb10bc8b598d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EA=B2=BD?= Date: Sat, 29 Apr 2023 03:42:19 +0900 Subject: [PATCH 2/6] MODIFY) save plate image path to External --- .../java/com/carplate/camerax/MainActivity.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/carplate/camerax/MainActivity.java b/app/src/main/java/com/carplate/camerax/MainActivity.java index 14df429..d9015df 100644 --- a/app/src/main/java/com/carplate/camerax/MainActivity.java +++ b/app/src/main/java/com/carplate/camerax/MainActivity.java @@ -76,6 +76,8 @@ public class MainActivity extends AppCompatActivity private Bitmap onFrame2; // alignment input private Bitmap onFrame3; // char input + String beforePlate = "0"; + // 모델 정의 DHDetectionModel detectionModel; AlignmentModel alignmentModel; @@ -355,9 +357,8 @@ public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { end = System.currentTimeMillis(); double fps = Math.round(((1.0/(end-start))*1000*100.0))/100.0; String infer_result = fps + " fps"; - String beforePlate = "0"; - if(result2.equlas(beforePlate)){} + if(result2.equals(beforePlate)){} else { runOnUiThread(new Runnable() { @Override @@ -387,7 +388,7 @@ private void saveImg(Bitmap bitmap, String textview) { try { //저장할 파일 경로 - File storageDir = new File(getFilesDir() + "/capture"); + File storageDir = new File(getExternalFilesDir() + "/capture"); if (!storageDir.exists()) //폴더가 없으면 생성. storageDir.mkdirs(); @@ -396,7 +397,7 @@ private void saveImg(Bitmap bitmap, String textview) { // 기존에 있다면 삭제 File file = new File(storageDir, filename); boolean deleted = file.delete(); - Log.w(TAG, "Delete Dup Check : " + deleted); + Log.d("TAG", "Delete Dup Check : " + deleted); FileOutputStream output = null; try { @@ -415,10 +416,10 @@ private void saveImg(Bitmap bitmap, String textview) { } } - Log.e(TAG, "Captured Saved"); + Log.d("TAG", "Captured Saved"); Toast.makeText(this, "Capture Saved ", Toast.LENGTH_SHORT).show(); } catch (Exception e) { - Log.w(TAG, "Capture Saving Error!", e); + Log.d("TAG", "Capture Saving Error!", e); Toast.makeText(this, "Save failed", Toast.LENGTH_SHORT).show(); } From 5b0361048f0df69f7a496a607674e66410c71809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EA=B2=BD?= Date: Sat, 29 Apr 2023 04:11:58 +0900 Subject: [PATCH 3/6] ADD) check plate number from Database --- .../java/com/carplate/camerax/ConnectDB.java | 51 +++++++++++++++++++ .../com/carplate/camerax/MainActivity.java | 8 +-- 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/carplate/camerax/ConnectDB.java diff --git a/app/src/main/java/com/carplate/camerax/ConnectDB.java b/app/src/main/java/com/carplate/camerax/ConnectDB.java new file mode 100644 index 0000000..fa4c71d --- /dev/null +++ b/app/src/main/java/com/carplate/camerax/ConnectDB.java @@ -0,0 +1,51 @@ +package com.db; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class ConnectDB { + private static ConnectDB instance = new ConnectDB(); + + public static ConnectDB getInstance() { + return instance; + } + public ConnectDB() { } + + // oracle 계정 + String jdbcUrl = "jdbc:oracle:thin:@IPv4주소:1521:testdb"; + String userId = "test"; + String userPw = "test"; + + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + String sql = ""; + String returns = "a"; + + public String connectionDB(String detectNum) { + try { + Class.forName("oracle.jdbc.driver.OracleDriver"); + conn = DriverManager.getConnection(jdbcUrl, userId, userPw); + + sql = "SELECT id FROM plateNumTable WHERE plateNum = ?"; + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, detectNum); + + rs = pstmt.executeQuery(); + if (rs.next()) { + returns = "DB에 존재하는 차량"; + } else { + returns = "DB에 존재하지 않는 차량"; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (pstmt != null)try {pstmt.close();} catch (SQLException ex) {} + if (conn != null)try {conn.close(); } catch (SQLException ex) { } + } + return returns; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/carplate/camerax/MainActivity.java b/app/src/main/java/com/carplate/camerax/MainActivity.java index d9015df..2252cab 100644 --- a/app/src/main/java/com/carplate/camerax/MainActivity.java +++ b/app/src/main/java/com/carplate/camerax/MainActivity.java @@ -1,6 +1,6 @@ package com.carplate.camerax; - +import com.db.ConnectDB; import androidx.appcompat.app.AppCompatActivity; @@ -35,7 +35,6 @@ import org.tensorflow.lite.nnapi.NnApiDelegate; - import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -368,7 +367,10 @@ public void run() { textView.setText(result2); imageView.setImageBitmap(onFrame3); beforePlate = result2; - saveImg(onFrame3, result2) + saveImg(onFrame3, result2); + ConnectDB connectDB = ConnectDB().getInstance(); + String checkDB = connectDB.connectionDB(result2); + Toast.makeText(this, checkDB, Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); From e6124e9fcebfb124c39344fdffeb4c2b34e1b15a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EA=B2=BD?= Date: Thu, 4 May 2023 18:48:35 +0900 Subject: [PATCH 4/6] Modify) local database --- .idea/gradle.xml | 1 + .../java/com/carplate/camerax/ConnectDB.java | 68 ++++++++++++++- .../cxx/create_cxx_tasks_30_timing.txt | 9 ++ .../cxx/ndk_locator_record_366m712u.json | 11 +++ .../cxx/ndk_locator_record_366m712u.log | 86 +++++++++++++++++++ .../cxx/ndk_locator_record_366m712u_key.json | 6 ++ 6 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 opencv/build/intermediates/cxx/create_cxx_tasks_30_timing.txt create mode 100644 opencv/build/intermediates/cxx/ndk_locator_record_366m712u.json create mode 100644 opencv/build/intermediates/cxx/ndk_locator_record_366m712u.log create mode 100644 opencv/build/intermediates/cxx/ndk_locator_record_366m712u_key.json diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 08bd996..f0b1104 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -14,6 +14,7 @@ + diff --git a/app/src/main/java/com/carplate/camerax/ConnectDB.java b/app/src/main/java/com/carplate/camerax/ConnectDB.java index fa4c71d..dc1b24c 100644 --- a/app/src/main/java/com/carplate/camerax/ConnectDB.java +++ b/app/src/main/java/com/carplate/camerax/ConnectDB.java @@ -4,7 +4,72 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +public class DBHelper extends SQLiteOpenHelper { + static final String DATABASE_NAME = "test.db"; + + // DBHelper 생성자 + public DBHelper(Context context, int version) { + super(context, DATABASE_NAME, null, version); + } + + // Person Table 생성 + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("CREATE TABLE ExistCar(carNum TEXT)"); + } + + // Person Table Upgrade + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("DROP TABLE IF EXISTS Person"); + onCreate(db); + } + + // Person Table 데이터 입력 + public void insert(String carNum) { + SQLiteDatabase db = getWritableDatabase(); + db.execSQL("INSERT INTO ExistCar VALUES('" + carNum + "')"); + db.close(); + } + + /* + // Person Table 데이터 수정 + public void Update(String name, int age, String Addr) { + SQLiteDatabase db = getWritableDatabase(); + db.execSQL("UPDATE Person SET age = " + age + ", ADDR = '" + Addr + "'" + " WHERE NAME = '" + name + "'"); + db.close(); + } + + + // Person Table 데이터 삭제 + public void Delete(String name) { + SQLiteDatabase db = getWritableDatabase(); + db.execSQL("DELETE Person WHERE NAME = '" + name + "'"); + db.close(); + } + */ + + // Person Table 조회 + public String getResult(String carNum) { + // 읽기가 가능하게 DB 열기 + SQLiteDatabase db = getReadableDatabase(); + + // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력 + Cursor cursor = db.rawQuery("SELECT * FROM ExistCar WHERE carNum = ?", carNum); + while (cursor.moveToNext()) { + return 1; + } + + return 0; + } +} + +/* public class ConnectDB { private static ConnectDB instance = new ConnectDB(); @@ -48,4 +113,5 @@ public String connectionDB(String detectNum) { } return returns; } -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/opencv/build/intermediates/cxx/create_cxx_tasks_30_timing.txt b/opencv/build/intermediates/cxx/create_cxx_tasks_30_timing.txt new file mode 100644 index 0000000..f349c8d --- /dev/null +++ b/opencv/build/intermediates/cxx/create_cxx_tasks_30_timing.txt @@ -0,0 +1,9 @@ +# C/C++ build system timings +create_cxx_tasks + create-initial-cxx-model + create-module-model 16ms + create-ARM64_V8A-model 10ms + [gap of 25ms] + create-initial-cxx-model completed in 54ms +create_cxx_tasks completed in 54ms + diff --git a/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.json b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.json new file mode 100644 index 0000000..07f4723 --- /dev/null +++ b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.json @@ -0,0 +1,11 @@ +{ + "ndk": "C:\\CookAndroid\\SDK\\ndk\\23.1.7779620", + "revision": { + "mMajor": 23, + "mMinor": 1, + "mMicro": 7779620, + "mPreview": 0, + "mPrecision": "MICRO", + "mPreviewSeparator": " " + } +} \ No newline at end of file diff --git a/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.log b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.log new file mode 100644 index 0000000..2d6c285 --- /dev/null +++ b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u.log @@ -0,0 +1,86 @@ +[ + { + "level_": 0, + "message_": "android.ndkVersion from module build.gradle is [not set]", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": 2084317329 + }, + { + "level_": 0, + "message_": "android.ndkPath from module build.gradle is not set", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": -1418461864 + }, + { + "level_": 0, + "message_": "ndk.dir in local.properties is not set", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": -714000671 + }, + { + "level_": 0, + "message_": "Not considering ANDROID_NDK_HOME because support was removed after deprecation period.", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": 1148813399 + }, + { + "level_": 0, + "message_": "sdkFolder is C:\\CookAndroid\\SDK", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": -1616183371 + }, + { + "level_": 0, + "message_": "Because no explicit NDK was requested, the default version [23.1.7779620] for this Android Gradle Plugin will be used", + "file_": "", + "tag_": "", + "diagnosticCode_": 0, + "memoizedIsInitialized": 1, + "unknownFields": { + "fields": {}, + "fieldsDescending": {} + }, + "memoizedSize": -1, + "memoizedHashCode": 2082435688 + } +] \ No newline at end of file diff --git a/opencv/build/intermediates/cxx/ndk_locator_record_366m712u_key.json b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u_key.json new file mode 100644 index 0000000..468afde --- /dev/null +++ b/opencv/build/intermediates/cxx/ndk_locator_record_366m712u_key.json @@ -0,0 +1,6 @@ +{ + "sdkFolder": "C:\\CookAndroid\\SDK", + "sideBySideNdkFolderNames": [ + "23.1.7779620" + ] +} \ No newline at end of file From f96364e1384abece4cd3c483b38ec120028deacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EA=B2=BD?= Date: Thu, 4 May 2023 19:55:42 +0900 Subject: [PATCH 5/6] Modify) local DataBase --- app/src/main/java/com/carplate/camerax/ConnectDB.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/carplate/camerax/ConnectDB.java b/app/src/main/java/com/carplate/camerax/ConnectDB.java index dc1b24c..df7a383 100644 --- a/app/src/main/java/com/carplate/camerax/ConnectDB.java +++ b/app/src/main/java/com/carplate/camerax/ConnectDB.java @@ -52,6 +52,7 @@ public void Delete(String name) { db.execSQL("DELETE Person WHERE NAME = '" + name + "'"); db.close(); } + */ // Person Table 조회 From 594959568fb92ec0e6813cc12f0b85d8506dc350 Mon Sep 17 00:00:00 2001 From: yeji1008 Date: Thu, 4 May 2023 20:33:20 +0900 Subject: [PATCH 6/6] db --- .../camerax/{ConnectDB.java => DBHelper.java} | 15 +++++---------- .../com/carplate/camerax/MainActivity.java | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 16 deletions(-) rename app/src/main/java/com/carplate/camerax/{ConnectDB.java => DBHelper.java} (92%) diff --git a/app/src/main/java/com/carplate/camerax/ConnectDB.java b/app/src/main/java/com/carplate/camerax/DBHelper.java similarity index 92% rename from app/src/main/java/com/carplate/camerax/ConnectDB.java rename to app/src/main/java/com/carplate/camerax/DBHelper.java index df7a383..58c0658 100644 --- a/app/src/main/java/com/carplate/camerax/ConnectDB.java +++ b/app/src/main/java/com/carplate/camerax/DBHelper.java @@ -1,9 +1,4 @@ -package com.db; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +package com.carplate.camerax; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -56,17 +51,17 @@ public void Delete(String name) { */ // Person Table 조회 - public String getResult(String carNum) { + public boolean getResult(String carNum) { // 읽기가 가능하게 DB 열기 SQLiteDatabase db = getReadableDatabase(); // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력 - Cursor cursor = db.rawQuery("SELECT * FROM ExistCar WHERE carNum = ?", carNum); + Cursor cursor = db.rawQuery("SELECT * FROM ExistCar WHERE carNum = ?", new String[] {carNum}); while (cursor.moveToNext()) { - return 1; + return true; } - return 0; + return false; } } diff --git a/app/src/main/java/com/carplate/camerax/MainActivity.java b/app/src/main/java/com/carplate/camerax/MainActivity.java index 2252cab..6f73cb1 100644 --- a/app/src/main/java/com/carplate/camerax/MainActivity.java +++ b/app/src/main/java/com/carplate/camerax/MainActivity.java @@ -1,7 +1,5 @@ package com.carplate.camerax; -import com.db.ConnectDB; - import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; @@ -16,6 +14,7 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; @@ -35,6 +34,9 @@ import org.tensorflow.lite.nnapi.NnApiDelegate; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -368,9 +370,14 @@ public void run() { imageView.setImageBitmap(onFrame3); beforePlate = result2; saveImg(onFrame3, result2); - ConnectDB connectDB = ConnectDB().getInstance(); - String checkDB = connectDB.connectionDB(result2); - Toast.makeText(this, checkDB, Toast.LENGTH_SHORT).show(); + DBHelper dbHelper = new DBHelper(MainActivity.this, 1); + //String checkDB = connectDB.connectionDB(result2); + + if(dbHelper.getResult(result2)) { + Toast.makeText(MainActivity.this, "exist", Toast.LENGTH_SHORT).show(); + }else{ + Toast.makeText(MainActivity.this, "no exist", Toast.LENGTH_SHORT).show(); + } } catch (Exception e) { e.printStackTrace(); @@ -390,7 +397,7 @@ private void saveImg(Bitmap bitmap, String textview) { try { //저장할 파일 경로 - File storageDir = new File(getExternalFilesDir() + "/capture"); + File storageDir = new File(getFilesDir() + "/capture"); if (!storageDir.exists()) //폴더가 없으면 생성. storageDir.mkdirs();