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/DBHelper.java b/app/src/main/java/com/carplate/camerax/DBHelper.java new file mode 100644 index 0000000..58c0658 --- /dev/null +++ b/app/src/main/java/com/carplate/camerax/DBHelper.java @@ -0,0 +1,113 @@ +package com.carplate.camerax; +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 boolean getResult(String carNum) { + // 읽기가 가능하게 DB 열기 + SQLiteDatabase db = getReadableDatabase(); + + // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력 + Cursor cursor = db.rawQuery("SELECT * FROM ExistCar WHERE carNum = ?", new String[] {carNum}); + while (cursor.moveToNext()) { + return true; + } + + return false; + } +} + +/* +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 2c44cd9..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 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,7 +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; @@ -76,6 +77,8 @@ public class MainActivity extends AppCompatActivity private Bitmap onFrame2; // alignment input private Bitmap onFrame3; // char input + String beforePlate = "0"; + // 모델 정의 DHDetectionModel detectionModel; AlignmentModel alignmentModel; @@ -356,18 +359,32 @@ public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { 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(); + if(result2.equals(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); + 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(); + } } - } - }); + }); + } } else{ @@ -375,4 +392,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.d("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.d("TAG", "Captured Saved"); + Toast.makeText(this, "Capture Saved ", Toast.LENGTH_SHORT).show(); + } catch (Exception e) { + Log.d("TAG", "Capture Saving Error!", e); + Toast.makeText(this, "Save failed", Toast.LENGTH_SHORT).show(); + + } + } + } \ 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