From 0655709e170a2513e9cfa03ba84f70adbd7c622e Mon Sep 17 00:00:00 2001 From: HydrogenSulfate <490868991@qq.com> Date: Tue, 20 Sep 2022 11:44:05 +0800 Subject: [PATCH 1/4] release shitu android demo --- deploy/shitu_android_demo/app/app.iml | 183 +++++ deploy/shitu_android_demo/app/build.gradle | 93 +++ .../shitu_android_demo/app/proguard-rules.pro | 21 + .../pp_shitu/ExampleInstrumentedTest.java | 26 + .../app/src/main/AndroidManifest.xml | 34 + .../app/src/main/assets/images/demo.jpg | Bin 0 -> 354843 bytes .../app/src/main/assets/index/README.md | 1 + .../app/src/main/assets/models/README.md | 1 + .../app/src/main/cpp/CMakeLists.txt | 105 +++ .../app/src/main/cpp/FeatureExtractor.cc | 98 +++ .../app/src/main/cpp/FeatureExtractor.h | 62 ++ .../app/src/main/cpp/Native.cc | 212 ++++++ .../app/src/main/cpp/Native.h | 147 ++++ .../app/src/main/cpp/ObjectDetector.cc | 324 ++++++++ .../app/src/main/cpp/ObjectDetector.h | 254 +++++++ .../app/src/main/cpp/Pipeline.cc | 304 ++++++++ .../app/src/main/cpp/Pipeline.h | 90 +++ .../app/src/main/cpp/README.md | 3 + .../app/src/main/cpp/Utils.cc | 183 +++++ .../app/src/main/cpp/Utils.h | 143 ++++ .../app/src/main/cpp/VectorSearch.cc | 166 +++++ .../app/src/main/cpp/VectorSearch.h | 90 +++ .../common/AppCompatPreferenceActivity.java | 127 ++++ .../baidu/paddle/lite/demo/common/Utils.java | 259 +++++++ .../lite/demo/pp_shitu/MainActivity.java | 701 ++++++++++++++++++ .../paddle/lite/demo/pp_shitu/Native.java | 186 +++++ .../lite/demo/pp_shitu/SettingsActivity.java | 150 ++++ .../app/src/main/jniLibs/arm64-v8a/README.md | 1 + .../drawable-v24/ic_launcher_foreground.xml | 34 + .../drawable-xxhdpi-v4/btn_switch_default.png | Bin 0 -> 1523 bytes .../drawable-xxhdpi-v4/btn_switch_pressed.png | Bin 0 -> 10074 bytes .../src/main/res/drawable/app_icon_crop.png | Bin 0 -> 28778 bytes .../src/main/res/drawable/btn_settings.xml | 6 + .../res/drawable/btn_settings_default.xml | 13 + .../res/drawable/btn_settings_pressed.xml | 13 + .../app/src/main/res/drawable/btn_shutter.xml | 5 + .../main/res/drawable/btn_shutter_default.xml | 17 + .../main/res/drawable/btn_shutter_pressed.xml | 17 + .../app/src/main/res/drawable/btn_switch.xml | 5 + .../res/drawable/ic_launcher_background.xml | 170 +++++ .../app/src/main/res/drawable/reset.png | Bin 0 -> 4849 bytes .../app/src/main/res/drawable/shezhi.png | Bin 0 -> 4856 bytes .../app/src/main/res/drawable/shuoming.png | Bin 0 -> 3771 bytes .../app/src/main/res/drawable/white.png | Bin 0 -> 7751 bytes .../res/layout-land/activity_main_old.xml | 99 +++ .../app/src/main/res/layout/activity_main.xml | 257 +++++++ .../src/main/res/menu/menu_action_options.xml | 20 + .../mipmap-anydpi-v26/ic_launcher_back.xml | 5 + .../ic_launcher_round_back.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1982 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 2904 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1013 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1581 bytes .../res/mipmap-xhdpi/baocunxiugai_100.png | Bin 0 -> 3028 bytes .../res/mipmap-xhdpi/bendishangchuan_100.png | Bin 0 -> 3140 bytes .../main/res/mipmap-xhdpi/bendishibie_100.png | Bin 0 -> 1855 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2759 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4405 bytes .../res/mipmap-xhdpi/leibiechaxun_100.png | Bin 0 -> 3051 bytes .../mipmap-xhdpi/paizhaoshangchuan_100.png | Bin 0 -> 3678 bytes .../res/mipmap-xhdpi/paizhaoshibie_100.png | Bin 0 -> 4060 bytes .../main/res/mipmap-xxhdpi/app_icon_crop.png | Bin 0 -> 28778 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5088 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8107 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8492 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 12504 bytes .../app/src/main/res/values/arrays.xml | 48 ++ .../app/src/main/res/values/colors.xml | 10 + .../app/src/main/res/values/dimens.xml | 17 + .../app/src/main/res/values/strings.xml | 23 + .../app/src/main/res/values/styles.xml | 25 + .../app/src/main/res/xml/settings.xml | 31 + .../lite/demo/pp_shitu/ExampleUnitTest.java | 17 + deploy/shitu_android_demo/build.gradle | 27 + deploy/shitu_android_demo/docs/README.md | 97 +++ .../shitu_android_demo/docs/images/step1.png | Bin 0 -> 18202 bytes .../docs/images/step2.1.png | Bin 0 -> 30602 bytes .../docs/images/step2.2.png | Bin 0 -> 143595 bytes .../shitu_android_demo/docs/images/step3.png | Bin 0 -> 4199 bytes deploy/shitu_android_demo/gradle.properties | 15 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + deploy/shitu_android_demo/gradlew | 172 +++++ deploy/shitu_android_demo/gradlew.bat | 84 +++ deploy/shitu_android_demo/local.properties | 8 + deploy/shitu_android_demo/settings.gradle | 1 + 86 files changed, 5211 insertions(+) create mode 100644 deploy/shitu_android_demo/app/app.iml create mode 100644 deploy/shitu_android_demo/app/build.gradle create mode 100644 deploy/shitu_android_demo/app/proguard-rules.pro create mode 100644 deploy/shitu_android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/pp_shitu/ExampleInstrumentedTest.java create mode 100644 deploy/shitu_android_demo/app/src/main/AndroidManifest.xml create mode 100644 deploy/shitu_android_demo/app/src/main/assets/images/demo.jpg create mode 100644 deploy/shitu_android_demo/app/src/main/assets/index/README.md create mode 100644 deploy/shitu_android_demo/app/src/main/assets/models/README.md create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/CMakeLists.txt create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.h create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Native.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Native.h create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.h create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Pipeline.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Pipeline.h create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/README.md create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Utils.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/Utils.h create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.cc create mode 100644 deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.h create mode 100644 deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/AppCompatPreferenceActivity.java create mode 100644 deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/Utils.java create mode 100644 deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/MainActivity.java create mode 100644 deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/Native.java create mode 100644 deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/SettingsActivity.java create mode 100644 deploy/shitu_android_demo/app/src/main/jniLibs/arm64-v8a/README.md create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable-xxhdpi-v4/btn_switch_default.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable-xxhdpi-v4/btn_switch_pressed.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/app_icon_crop.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_default.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_pressed.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_default.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_pressed.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/btn_switch.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/reset.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/shezhi.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/shuoming.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/drawable/white.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/layout-land/activity_main_old.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/layout/activity_main.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/menu/menu_action_options.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-anydpi-v26/ic_launcher_back.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round_back.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/baocunxiugai_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/bendishangchuan_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/bendishibie_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/leibiechaxun_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/paizhaoshangchuan_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xhdpi/paizhaoshibie_100.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xxhdpi/app_icon_crop.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 deploy/shitu_android_demo/app/src/main/res/values/arrays.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/values/colors.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/values/dimens.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/values/strings.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/values/styles.xml create mode 100644 deploy/shitu_android_demo/app/src/main/res/xml/settings.xml create mode 100644 deploy/shitu_android_demo/app/src/test/java/com/baidu/paddle/lite/demo/pp_shitu/ExampleUnitTest.java create mode 100644 deploy/shitu_android_demo/build.gradle create mode 100644 deploy/shitu_android_demo/docs/README.md create mode 100644 deploy/shitu_android_demo/docs/images/step1.png create mode 100644 deploy/shitu_android_demo/docs/images/step2.1.png create mode 100644 deploy/shitu_android_demo/docs/images/step2.2.png create mode 100644 deploy/shitu_android_demo/docs/images/step3.png create mode 100644 deploy/shitu_android_demo/gradle.properties create mode 100644 deploy/shitu_android_demo/gradle/wrapper/gradle-wrapper.jar create mode 100644 deploy/shitu_android_demo/gradle/wrapper/gradle-wrapper.properties create mode 100644 deploy/shitu_android_demo/gradlew create mode 100644 deploy/shitu_android_demo/gradlew.bat create mode 100644 deploy/shitu_android_demo/local.properties create mode 100644 deploy/shitu_android_demo/settings.gradle diff --git a/deploy/shitu_android_demo/app/app.iml b/deploy/shitu_android_demo/app/app.iml new file mode 100644 index 000000000..988639175 --- /dev/null +++ b/deploy/shitu_android_demo/app/app.iml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deploy/shitu_android_demo/app/build.gradle b/deploy/shitu_android_demo/app/build.gradle new file mode 100644 index 000000000..163832e93 --- /dev/null +++ b/deploy/shitu_android_demo/app/build.gradle @@ -0,0 +1,93 @@ +import java.security.MessageDigest + +apply plugin: 'com.android.application' + +android { + compileSdkVersion 30 + defaultConfig { + applicationId "com.baidu.paddle.lite.demo.pp_shitu" + minSdkVersion 15 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + externalNativeBuild { + cmake { + arguments '-DANDROID_PLATFORM=android-23', '-DANDROID_STL=c++_shared', "-DANDROID_TOOLCHAIN=" + abiFilters 'arm64-v8a' + cppFlags "-std=c++11" + } + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + externalNativeBuild { + cmake { + path "src/main/cpp/CMakeLists.txt" + version "3.18.1" + } + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:design:28.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} +tasks.withType(JavaCompile) { + options.encoding = "UTF-8" +} +def archives = [ + [ + 'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/paddle_lite_libs_v2_10_gpu.tar.gz', + 'dest': 'PaddleLite' + ], + [ + 'src' : 'https://paddlelite-demo.bj.bcebos.com/libs/android/opencv-4.2.0-android-sdk.tar.gz', + 'dest': 'OpenCV' + ], + [ + 'src' : 'https://paddlelite-demo.bj.bcebos.com/demo/PP_shitu/models/ppshitu_lite_models_v1.0.tar.gz', + 'dest' : 'src/main/assets/models' + ] +] + +task downloadAndExtractArchives(type: DefaultTask) { + doFirst { + println "Downloading and extracting archives including libs and models" + } + doLast { + // Prepare cache folder for archives + String cachePath = "cache" + if (!file("${cachePath}").exists()) { + mkdir "${cachePath}" + } + archives.eachWithIndex { archive, index -> + MessageDigest messageDigest = MessageDigest.getInstance('MD5') + messageDigest.update(archive.src.bytes) + String cacheName = new BigInteger(1, messageDigest.digest()).toString(32) + // Download the target archive if not exists + boolean copyFiles = !file("${archive.dest}").exists() + if (!file("${cachePath}/${cacheName}.tar.gz").exists()) { + ant.get(src: archive.src, dest: file("${cachePath}/${cacheName}.tar.gz")) + copyFiles = true; // force to copy files from the latest archive files + } + // Extract the target archive if its dest path does not exists + if (copyFiles) { + copy { + from tarTree("${cachePath}/${cacheName}.tar.gz") + into "${archive.dest}" + } + } + } + } +} +preBuild.dependsOn downloadAndExtractArchives diff --git a/deploy/shitu_android_demo/app/proguard-rules.pro b/deploy/shitu_android_demo/app/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/deploy/shitu_android_demo/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/deploy/shitu_android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/pp_shitu/ExampleInstrumentedTest.java b/deploy/shitu_android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/pp_shitu/ExampleInstrumentedTest.java new file mode 100644 index 000000000..2d628caff --- /dev/null +++ b/deploy/shitu_android_demo/app/src/androidTest/java/com/baidu/paddle/lite/demo/pp_shitu/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.baidu.paddle.lite.demo.pp_shitu; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.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.getTargetContext(); + + assertEquals("com.baidu.paddle.lite.demo", appContext.getPackageName()); + } +} diff --git a/deploy/shitu_android_demo/app/src/main/AndroidManifest.xml b/deploy/shitu_android_demo/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..d35c5729d --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deploy/shitu_android_demo/app/src/main/assets/images/demo.jpg b/deploy/shitu_android_demo/app/src/main/assets/images/demo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ef10aae5f7f5ce515cb51f857b66c6195f6664b GIT binary patch literal 354843 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�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 literal 0 HcmV?d00001 diff --git a/deploy/shitu_android_demo/app/src/main/assets/index/README.md b/deploy/shitu_android_demo/app/src/main/assets/index/README.md new file mode 100644 index 000000000..7e530c42c --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/assets/index/README.md @@ -0,0 +1 @@ +put `*.index` and `*.txt` here. such as `original.index` and `original.txt` diff --git a/deploy/shitu_android_demo/app/src/main/assets/models/README.md b/deploy/shitu_android_demo/app/src/main/assets/models/README.md new file mode 100644 index 000000000..8ce83e935 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/assets/models/README.md @@ -0,0 +1 @@ +put `*.nb` inference model file there. such as `general_PPLCNetV2_base_quant_v1.0_lite.nb` and `mainbody_PPLCNet_x2_5_640_v1.2_lite.nb` diff --git a/deploy/shitu_android_demo/app/src/main/cpp/CMakeLists.txt b/deploy/shitu_android_demo/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..1dad50c94 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,105 @@ +# For more information about using CMake with Android Studio, read the +# documentation: https://d.android.com/studio/projects/add-native-code.html + +# Sets the minimum version of CMake required to build the native library. +#project(ShituDemo) + +cmake_minimum_required(VERSION 3.4.1) + +# Creates and names a library, sets it as either STATIC or SHARED, and provides +# the relative paths to its source code. You can define multiple libraries, and +# CMake builds them for you. Gradle automatically packages shared libraries with +# your APK. + +set(PaddleLite_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../PaddleLite") +include_directories(${PaddleLite_DIR}/cxx/include) + +set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../OpenCV/sdk/native/jni") +find_package(OpenCV REQUIRED) +message(STATUS "OpenCV libraries: ${OpenCV_LIBS}") +include_directories(${OpenCV_INCLUDE_DIRS}) + +#set(PaddleLite_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../PaddleLite") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../PaddleLite/src/main/cpp/include/faiss) +set(target faiss) + +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -ffast-math -Ofast -Os -DNDEBUG -fexceptions -fomit-frame-pointer -fno-asynchronous-unwind-tables -fno-unwind-tables" +) +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fdata-sections -ffunction-sections" +) +set(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,-z,nocopyreloc") + +add_library( + # Sets the name of the library. + Native + # Sets the library as a shared library. + SHARED + # Provides a relative path to your source file(s). + Native.cc Pipeline.cc Utils.cc ObjectDetector.cc FeatureExtractor.cc VectorSearch.cc) + +find_library( + # Sets the name of the path variable. + log-lib + # Specifies the name of the NDK library that you want CMake to locate. + log) + +add_library( + # Sets the name of the library. + paddle_light_api_shared + # Sets the library as a shared library. + SHARED + # Provides a relative path to your source file(s). + IMPORTED) + +add_library( + # Sets the name of the library. + faiss + STATIC + IMPORTED) + +set_target_properties( + # Specifies the target library. + paddle_light_api_shared + # Specifies the parameter you want to define. + PROPERTIES + IMPORTED_LOCATION + ${PaddleLite_DIR}/cxx/libs/${ANDROID_ABI}/libpaddle_light_api_shared.so + # Provides the path to the library you want to import. +) + +# if there libfaiss.a not exist, will download it automatically +IF(NOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/main/jniLibs/arm64-v8a/libfaiss.a) + message(STATUS "Downloading ${OCI_LIB_ZIP_NAME} to ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/main/jniLibs/arm64-v8a/") + FILE(DOWNLOAD https://paddle-imagenet-models-name.bj.bcebos.com/demos/lib/libfaiss.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/main/jniLibs/arm64-v8a/libfaiss.a + TIMEOUT ${DOWNLOAD_OCI_LIB_TIMEOUT} + STATUS ERR + SHOW_PROGRESS) +ENDIF() + +set_target_properties( + faiss + PROPERTIES + IMPORTED_LOCATION + ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/main/jniLibs/arm64-v8a/libfaiss.a +) + +# Specifies libraries CMake should link to your target library. You can link +# multiple libraries, such as libraries you define in this build script, +# prebuilt third-party libraries, or system libraries. + +target_link_libraries( + # Specifies the target library. + Native + paddle_light_api_shared + jnigraphics + ${OpenCV_LIBS} + GLESv2 + EGL + ${log-lib} + faiss +) diff --git a/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.cc b/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.cc new file mode 100644 index 000000000..090e0d675 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.cc @@ -0,0 +1,98 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FeatureExtractor.h" // NOLINT +#include // NOLINT + +void FeatureExtract::RunRecModel(const cv::Mat &img, double &cost_time, + std::vector &feature) { + // Read img + cv::Mat img_fp; + ResizeImage(img, img_fp); + NormalizeImage(&img_fp, this->mean_, this->std_, this->scale_); + std::vector input(1 * 3 * img_fp.rows * img_fp.cols, 0.0f); + Permute(&img_fp, input.data()); + auto pre_cost0 = GetCurrentUS(); + + // Prepare input data from image + std::unique_ptr input_tensor( + std::move(this->predictor_->GetInput(0))); + input_tensor->Resize({1, 3, this->size, this->size}); + auto *data0 = input_tensor->mutable_data(); + + for (int i = 0; i < input.size(); ++i) { + data0[i] = input[i]; + } + auto start = std::chrono::system_clock::now(); + // Run predictor + this->predictor_->Run(); + + // Get output and post process + std::unique_ptr output_tensor( + std::move(this->predictor_->GetOutput(0))); + auto end = std::chrono::system_clock::now(); + auto duration = + std::chrono::duration_cast(end - start); + cost_time = double(duration.count()) * + std::chrono::microseconds::period::num / + std::chrono::microseconds::period::den; + + // do postprocess + int output_size = 1; + for (auto dim : output_tensor->shape()) { + output_size *= dim; + } + feature.resize(output_size); + output_tensor->CopyToCpu(feature.data()); + + // postprocess include sqrt or binarize. + FeatureNorm(feature); +} + +void FeatureExtract::FeatureNorm(std::vector &feature) { + float feature_sqrt = std::sqrt(std::inner_product( + feature.begin(), feature.end(), feature.begin(), 0.0f)); + for (int i = 0; i < feature.size(); ++i) { + feature[i] /= feature_sqrt; + } +} + +void FeatureExtract::Permute(const cv::Mat *im, float *data) { + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, data + i * rh * rw), i); + } +} + +void FeatureExtract::ResizeImage(const cv::Mat &img, cv::Mat &resize_img) { + cv::resize(img, resize_img, cv::Size(this->size, this->size)); +} + +void FeatureExtract::NormalizeImage(cv::Mat *im, const std::vector &mean, + const std::vector &std, + float scale) { + (*im).convertTo(*im, CV_32FC3, scale); + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean[0]) / std[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean[1]) / std[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean[2]) / std[2]; + } + } +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.h b/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.h new file mode 100644 index 000000000..254407583 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/FeatureExtractor.h @@ -0,0 +1,62 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "Utils.h" // NOLINT +#include "numeric" +#include "paddle_api.h" // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +using namespace paddle::lite_api; // NOLINT +using namespace std; // NOLINT + +class FeatureExtract { +public: // NOLINT + explicit FeatureExtract(std::string model_path, std::vector input_shape, + int cpu_nums, std::string cpu_power) { + MobileConfig config; + config.set_threads(cpu_nums); + config.set_power_mode(ParsePowerMode(cpu_power)); + config.set_model_from_file(model_path); + this->predictor_ = CreatePaddlePredictor(config); + } + + void RunRecModel(const cv::Mat &img, double &cost_time, + std::vector &feature); // NOLINT + void FeatureNorm(std::vector &feature); + + void ResizeImage(const cv::Mat &img, cv::Mat &resize_img); + + void Permute(const cv::Mat *im, float *data); + + void NormalizeImage(cv::Mat *im, const std::vector &mean, + const std::vector &std, float scale); + +private: // NOLINT + std::shared_ptr predictor_; + std::vector mean_ = {0.485f, 0.456f, 0.406f}; + std::vector std_ = {0.229f, 0.224f, 0.225f}; + double scale_ = 0.00392157; // 1/255.0 + int size = 224; +}; diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Native.cc b/deploy/shitu_android_demo/app/src/main/cpp/Native.cc new file mode 100644 index 000000000..eea19b02a --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Native.cc @@ -0,0 +1,212 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "Native.h" +#include "Pipeline.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: Java_com_baidu_paddle_lite_demo_pp_1shitu_Native + * Method: nativeInit + * Signature: + * (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;II[F[FF)J + */ +JNIEXPORT jlong JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativeInit( + JNIEnv *env, jclass thiz, jstring jDetModelDir, jstring jRecModelDir, + jstring jLabelPath, jstring jIndexPath, jlongArray jDetInputShape, + jlongArray jRecInputShape, jint cpuThreadNum, jint WarmUp, jint Repeats, + jint topk, jboolean jaddGallery, jstring cpu_power) { + std::string det_model_path = jstring_to_cpp_string(env, jDetModelDir); + std::string rec_model_path = jstring_to_cpp_string(env, jRecModelDir); + std::string label_path = jstring_to_cpp_string(env, jLabelPath); + std::string index_path = jstring_to_cpp_string(env, jIndexPath); + bool add_gallery = jaddGallery; + const std::string cpu_mode = jstring_to_cpp_string(env, cpu_power); + std::vector det_input_shape = + jlongarray_to_int64_vector(env, jDetInputShape); + std::vector rec_input_shape = + jlongarray_to_int64_vector(env, jRecInputShape); + std::vector det_input_shape_int; + std::vector rec_input_shape_int; + for (auto &tmp : det_input_shape) + det_input_shape_int.emplace_back(static_cast(tmp)); + for (auto &tmp : rec_input_shape) + rec_input_shape_int.emplace_back(static_cast(tmp)); + return reinterpret_cast( + new PipeLine(det_model_path, rec_model_path, label_path, index_path, + det_input_shape_int, rec_input_shape_int, cpuThreadNum, + WarmUp, Repeats, topk, add_gallery, cpu_mode)); +} + +/* + * Class: Java_com_baidu_paddle_lite_demo_pp_1shitu_Native + * Method: nativeRelease + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativeRelease(JNIEnv *env, + jclass thiz, + jlong ctx) { + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + delete pipeline; + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativesetAddGallery( + JNIEnv *env, jclass thiz, jlong ctx, jboolean flag) { + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + pipeline->set_add_gallery(flag); + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativeclearGallery(JNIEnv *env, + jclass thiz, + jlong ctx) { + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + pipeline->ClearFeature(); + return JNI_TRUE; +} + +/* + * Class: Java_com_baidu_paddle_lite_demo_pp_1shitu_Native + * Method: nativeProcess + * Signature: (JIIIILjava/lang/String;)Z + */ +JNIEXPORT jstring JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativeProcess( + JNIEnv *env, jclass thiz, jlong ctx, jobject jARGB8888ImageBitmap, + jstring jlabel_name) { + if (ctx == 0) { + return JNI_FALSE; + } + + // Convert the android bitmap(ARGB8888) to the OpenCV RGBA image. Actually, + // the data layout of AGRB8888 is R, G, B, A, it's the same as CV RGBA image, + // so it is unnecessary to do the conversion of color format, check + // https://developer.android.com/reference/android/graphics/Bitmap.Config#ARGB_8888 + // to get the more details about Bitmap.Config.ARGB8888 + auto t = GetCurrentTime(); + void *bitmapPixels; + AndroidBitmapInfo bitmapInfo; + if (AndroidBitmap_getInfo(env, jARGB8888ImageBitmap, &bitmapInfo) < 0) { + LOGE("Invoke AndroidBitmap_getInfo() failed!"); + return JNI_FALSE; + } + if (bitmapInfo.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { + LOGE("Only Bitmap.Config.ARGB8888 color format is supported!"); + return JNI_FALSE; + } + if (AndroidBitmap_lockPixels(env, jARGB8888ImageBitmap, &bitmapPixels) < 0) { + LOGE("Invoke AndroidBitmap_lockPixels() failed!"); + return JNI_FALSE; + } + cv::Mat bmpImage(bitmapInfo.height, bitmapInfo.width, CV_8UC4, bitmapPixels); + cv::Mat rgbaImage; + std::string label_name = jstring_to_cpp_string(env, jlabel_name); + bmpImage.copyTo(rgbaImage); + if (AndroidBitmap_unlockPixels(env, jARGB8888ImageBitmap) < 0) { + LOGE("Invoke AndroidBitmap_unlockPixels() failed!"); + return JNI_FALSE; + } + LOGD("Read from bitmap costs %f ms", GetElapsedTime(t)); + + auto *pipeline = reinterpret_cast(ctx); + + std::vector input_mat; + std::vector out_object; + cv::Mat rgb_input; + cv::cvtColor(rgbaImage, rgb_input, cv::COLOR_RGBA2RGB); + input_mat.emplace_back(rgb_input); + std::string res_str = pipeline->run(input_mat, out_object, 1, label_name); + bool modified = res_str.empty(); + if (!modified) { + cv::Mat res_img; + cv::cvtColor(input_mat[0], res_img, cv::COLOR_RGB2RGBA); + // Convert the OpenCV RGBA image to the android bitmap(ARGB8888) + if (res_img.type() != CV_8UC4) { + LOGE("Only CV_8UC4 color format is supported!"); + return JNI_FALSE; + } + t = GetCurrentTime(); + if (AndroidBitmap_lockPixels(env, jARGB8888ImageBitmap, &bitmapPixels) < + 0) { + LOGE("Invoke AndroidBitmap_lockPixels() failed!"); + return JNI_FALSE; + } + cv::Mat bmpImage(bitmapInfo.height, bitmapInfo.width, CV_8UC4, + bitmapPixels); + res_img.copyTo(bmpImage); + if (AndroidBitmap_unlockPixels(env, jARGB8888ImageBitmap) < 0) { + LOGE("Invoke AndroidBitmap_unlockPixels() failed!"); + return JNI_FALSE; + } + LOGD("Write to bitmap costs %f ms", GetElapsedTime(t)); + } + return cpp_string_to_jstring(env, res_str); +} + +#ifdef __cplusplus +} +#endif + +extern "C" JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativesaveIndex( + JNIEnv *env, jclass clazz, jlong ctx, jstring jsave_file_name) { + // TODO: implement nativesaveIndex() + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + std::string save_file_name = jstring_to_cpp_string(env, jsave_file_name); + pipeline->SaveIndex(save_file_name); + return JNI_TRUE; +} +extern "C" JNIEXPORT jboolean JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativeloadIndex( + JNIEnv *env, jclass clazz, jlong ctx, jstring jload_file_name) { + // TODO: implement nativeloadIndex() + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + std::string load_file_name = jstring_to_cpp_string(env, jload_file_name); + bool load_flag = pipeline->LoadIndex(load_file_name); + return JNI_TRUE && load_flag; +} +extern "C" JNIEXPORT jstring JNICALL +Java_com_baidu_paddle_lite_demo_pp_1shitu_Native_nativegetClassname( + JNIEnv *env, jclass clazz, jlong ctx) { + // TODO: implement nativegetClassname() + if (ctx == 0) { + return JNI_FALSE; + } + auto *pipeline = reinterpret_cast(ctx); + std::string class_name_content = pipeline->GetLabelList(); + return cpp_string_to_jstring(env, class_name_content); +} \ No newline at end of file diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Native.h b/deploy/shitu_android_demo/app/src/main/cpp/Native.h new file mode 100644 index 000000000..14693766a --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Native.h @@ -0,0 +1,147 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include + +inline std::string jstring_to_cpp_string(JNIEnv *env, jstring jstr) { + // In java, a unicode char will be encoded using 2 bytes (utf16). + // so jstring will contain characters utf16. std::string in c++ is + // essentially a string of bytes, not characters, so if we want to + // pass jstring from JNI to c++, we have convert utf16 to bytes. + if (!jstr) { + return ""; + } + const jclass stringClass = env->GetObjectClass(jstr); + const jmethodID getBytes = + env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B"); + const jbyteArray stringJbytes = (jbyteArray)env->CallObjectMethod( + jstr, getBytes, env->NewStringUTF("UTF-8")); + + size_t length = (size_t)env->GetArrayLength(stringJbytes); + jbyte *pBytes = env->GetByteArrayElements(stringJbytes, NULL); + + std::string ret = std::string(reinterpret_cast(pBytes), length); + env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT); + + env->DeleteLocalRef(stringJbytes); + env->DeleteLocalRef(stringClass); + return ret; +} + +inline jstring cpp_string_to_jstring(JNIEnv *env, std::string str) { + auto *data = str.c_str(); + jclass strClass = env->FindClass("java/lang/String"); + jmethodID strClassInitMethodID = + env->GetMethodID(strClass, "", "([BLjava/lang/String;)V"); + + jbyteArray bytes = env->NewByteArray(strlen(data)); + env->SetByteArrayRegion(bytes, 0, strlen(data), + reinterpret_cast(data)); + + jstring encoding = env->NewStringUTF("UTF-8"); + jstring res = (jstring)( + env->NewObject(strClass, strClassInitMethodID, bytes, encoding)); + + env->DeleteLocalRef(strClass); + env->DeleteLocalRef(encoding); + env->DeleteLocalRef(bytes); + + return res; +} + +inline jobject cpp_string_to_jobect(JNIEnv *env, std::string str) { + auto *data = str.c_str(); + jclass strClass = env->FindClass("java/lang/String"); + jmethodID strClassInitMethodID = + env->GetMethodID(strClass, "", "([BLjava/lang/String;)V"); + + jbyteArray bytes = env->NewByteArray(strlen(data)); + env->SetByteArrayRegion(bytes, 0, strlen(data), + reinterpret_cast(data)); + + jstring encoding = env->NewStringUTF("UTF-8"); + jobject res = env->NewObject(strClass, strClassInitMethodID, bytes, encoding); + + env->DeleteLocalRef(strClass); + env->DeleteLocalRef(encoding); + env->DeleteLocalRef(bytes); + + return res; +} + +inline jfloatArray cpp_array_to_jfloatarray(JNIEnv *env, const float *buf, + int64_t len) { + jfloatArray result = env->NewFloatArray(len); + env->SetFloatArrayRegion(result, 0, len, buf); + return result; +} + +inline jintArray cpp_array_to_jintarray(JNIEnv *env, const int *buf, + int64_t len) { + jintArray result = env->NewIntArray(len); + env->SetIntArrayRegion(result, 0, len, buf); + return result; +} + +inline jbyteArray cpp_array_to_jbytearray(JNIEnv *env, const int8_t *buf, + int64_t len) { + jbyteArray result = env->NewByteArray(len); + env->SetByteArrayRegion(result, 0, len, buf); + return result; +} + +inline jobjectArray +cpp_array_to_jobjectarray(JNIEnv *env, const std::string *buf, int64_t len) { + jclass jclz = env->FindClass("java/lang/String"); + jobjectArray result = env->NewObjectArray(len, jclz, NULL); + for (int i = 0; i < len; i++) { + jobject job = cpp_string_to_jobect(env, buf[i]); + env->SetObjectArrayElement(result, i, job); + } + return result; +} + +inline jlongArray int64_vector_to_jlongarray(JNIEnv *env, + const std::vector &vec) { + jlongArray result = env->NewLongArray(vec.size()); + jlong *buf = new jlong[vec.size()]; + for (size_t i = 0; i < vec.size(); ++i) { + buf[i] = (jlong)vec[i]; + } + env->SetLongArrayRegion(result, 0, vec.size(), buf); + delete[] buf; + return result; +} + +inline std::vector jlongarray_to_int64_vector(JNIEnv *env, + jlongArray data) { + int data_size = env->GetArrayLength(data); + jlong *data_ptr = env->GetLongArrayElements(data, nullptr); + std::vector data_vec(data_ptr, data_ptr + data_size); + env->ReleaseLongArrayElements(data, data_ptr, 0); + return data_vec; +} + +inline std::vector jfloatarray_to_float_vector(JNIEnv *env, + jfloatArray data) { + int data_size = env->GetArrayLength(data); + jfloat *data_ptr = env->GetFloatArrayElements(data, nullptr); + std::vector data_vec(data_ptr, data_ptr + data_size); + env->ReleaseFloatArrayElements(data, data_ptr, 0); + return data_vec; +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.cc b/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.cc new file mode 100644 index 000000000..bf7619c15 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.cc @@ -0,0 +1,324 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "ObjectDetector.h" // NOLINT +#include // NOLINT +#include // NOLINT +#include +#include // NOLINT + +// PicoDet decode +ObjectResult DisPred2Bbox(const float *dfl_det, int label, float score, int x, + int y, int stride, std::vector im_shape, + int reg_max) { + float ct_x = (x + 0.5) * stride; + float ct_y = (y + 0.5) * stride; + std::vector dis_pred; + dis_pred.resize(4); + for (int i = 0; i < 4; i++) { + float dis = 0; + float *dis_after_sm = new float[reg_max + 1]; + activation_function_softmax(dfl_det + i * (reg_max + 1), dis_after_sm, + reg_max + 1); + for (int j = 0; j < reg_max + 1; j++) { + dis += j * dis_after_sm[j]; + } + dis *= stride; + dis_pred[i] = dis; + delete[] dis_after_sm; + } + int xmin = static_cast(std::max(ct_x - dis_pred[0], .0f)); + int ymin = static_cast(std::max(ct_y - dis_pred[1], .0f)); + int xmax = static_cast(std::min(ct_x + dis_pred[2], im_shape[0])); + int ymax = static_cast(std::min(ct_y + dis_pred[3], im_shape[1])); + ObjectResult result_item; + result_item.rect = {xmin, ymin, xmax, ymax}; + result_item.class_id = label; + result_item.confidence = score; + return result_item; +} + +void PicoDetPostProcess(std::vector *results, + std::vector outs, + std::vector fpn_stride, + std::vector im_shape, + std::vector scale_factor, float score_threshold, + float nms_threshold, int num_class, int reg_max) { + std::vector> bbox_results; + bbox_results.resize(num_class); + int in_h = im_shape[0], in_w = im_shape[1]; + for (int i = 0; i < fpn_stride.size(); ++i) { + int feature_h = ceil(in_h * 1.f / fpn_stride[i]); + int feature_w = ceil(in_w * 1.f / fpn_stride[i]); + for (int idx = 0; idx < feature_h * feature_w; idx++) { + const float *scores = outs[i] + (idx * num_class); + int row = idx / feature_w; + int col = idx % feature_w; + float score = 0; + int cur_label = 0; + for (int label = 0; label < num_class; label++) { + if (scores[label] > score) { + score = scores[label]; + cur_label = label; + } + } + if (score > score_threshold) { + const float *bbox_pred = + outs[i + fpn_stride.size()] + (idx * 4 * (reg_max + 1)); + bbox_results[cur_label].push_back( + DisPred2Bbox(bbox_pred, cur_label, score, col, row, fpn_stride[i], + im_shape, reg_max)); + } + } + } + for (int i = 0; i < bbox_results.size(); i++) { + nms(&bbox_results[i], nms_threshold); + for (auto box : bbox_results[i]) { + box.rect[0] = box.rect[0] / scale_factor[1]; + box.rect[2] = box.rect[2] / scale_factor[1]; + box.rect[1] = box.rect[1] / scale_factor[0]; + box.rect[3] = box.rect[3] / scale_factor[0]; + results->push_back(box); + } + } +} + +// ***************************** member Function *************************** +// Load Model and create model predictor +void ObjectDetector::LoadModel(const std::string &model_file, int num_theads, + std::string cpu_power) { + MobileConfig config; + config.set_threads(num_theads); + config.set_model_from_file(model_file); + config.set_power_mode(ParsePowerMode(cpu_power)); + if (access(model_file.c_str(), 0) != 0) { + LOGD("File not exist!"); + } + predictor_ = CreatePaddlePredictor(config); +} + +void ObjectDetector::Preprocess(const cv::Mat &ori_im) { + // Clone the image : keep the original mat for postprocess + cv::Mat im = ori_im.clone(); + for (auto &op_process : ops_) { + op_process(&im, &inputs_, pre_param_); + } +} + +void ObjectDetector::Postprocess(const std::vector mats, + std::vector *result, + std::vector bbox_num, + bool is_rbox = false) { + result->clear(); + int start_idx = 0; + for (int im_id = 0; im_id < mats.size(); im_id++) { + cv::Mat raw_mat = mats[im_id]; + int rh = 1; + int rw = 1; + if (arch_ == "Face") { + rh = raw_mat.rows; + rw = raw_mat.cols; + } + for (int j = start_idx; j < start_idx + bbox_num[im_id]; j++) { + if (is_rbox) { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 10])); + // Confidence score + float score = output_data_[1 + j * 10]; + int x1 = (output_data_[2 + j * 10] * rw); + int y1 = (output_data_[3 + j * 10] * rh); + int x2 = (output_data_[4 + j * 10] * rw); + int y2 = (output_data_[5 + j * 10] * rh); + int x3 = (output_data_[6 + j * 10] * rw); + int y3 = (output_data_[7 + j * 10] * rh); + int x4 = (output_data_[8 + j * 10] * rw); + int y4 = (output_data_[9 + j * 10] * rh); + ObjectResult result_item; + result_item.rect = {x1, y1, x2, y2, x3, y3, x4, y4}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } else { + // Class id + int class_id = static_cast(round(output_data_[0 + j * 6])); + // Confidence score + float score = output_data_[1 + j * 6]; + int xmin = (output_data_[2 + j * 6] * rw); + int ymin = (output_data_[3 + j * 6] * rh); + int xmax = (output_data_[4 + j * 6] * rw); + int ymax = (output_data_[5 + j * 6] * rh); + int wd = xmax - xmin; + int hd = ymax - ymin; + + ObjectResult result_item; + result_item.rect = {xmin, ymin, xmax, ymax}; + result_item.class_id = class_id; + result_item.confidence = score; + result->push_back(result_item); + } + } + start_idx += bbox_num[im_id]; + } +} + +void ObjectDetector::Predict(const std::vector &imgs, const int warmup, + const int repeats, + std::vector *result, + std::vector *bbox_num, + std::vector *times) { + auto preprocess_start = std::chrono::steady_clock::now(); + int batch_size = imgs.size(); + + // in_data_batch + std::vector in_data_all; + std::vector im_shape_all(batch_size * 2); + std::vector scale_factor_all(batch_size * 2); + // Preprocess image + for (int bs_idx = 0; bs_idx < batch_size; bs_idx++) { + cv::Mat im = imgs.at(bs_idx); + Preprocess(im); + im_shape_all[bs_idx * 2] = inputs_.im_shape_[0]; + im_shape_all[bs_idx * 2 + 1] = inputs_.im_shape_[1]; + + scale_factor_all[bs_idx * 2] = inputs_.scale_factor_[0]; + scale_factor_all[bs_idx * 2 + 1] = inputs_.scale_factor_[1]; + + // TODO: reduce cost time + in_data_all.insert(in_data_all.end(), inputs_.im_data_.begin(), + inputs_.im_data_.end()); + } + auto preprocess_end = std::chrono::steady_clock::now(); + std::vector output_data_list_; + // Prepare input tensor + + auto input_names = predictor_->GetInputNames(); + for (const auto &tensor_name : input_names) { + auto in_tensor = predictor_->GetInputByName(tensor_name); + if (tensor_name == "image") { + int rh = inputs_.in_net_shape_[0]; + int rw = inputs_.in_net_shape_[1]; + in_tensor->Resize({batch_size, 3, rh, rw}); + auto *inptr = in_tensor->mutable_data(); + std::copy_n(in_data_all.data(), in_data_all.size(), inptr); + } else if (tensor_name == "im_shape") { + in_tensor->Resize({batch_size, 2}); + auto *inptr = in_tensor->mutable_data(); + std::copy_n(im_shape_all.data(), im_shape_all.size(), inptr); + } else if (tensor_name == "scale_factor") { + in_tensor->Resize({batch_size, 2}); + auto *inptr = in_tensor->mutable_data(); + std::copy_n(scale_factor_all.data(), scale_factor_all.size(), inptr); + } + } + + // Run predictor + // warmup + for (int i = 0; i < warmup; i++) { + predictor_->Run(); + // Get output tensor + auto output_names = predictor_->GetOutputNames(); + if (arch_ == "PicoDet") { + for (int j = 0; j < output_names.size(); j++) { + auto output_tensor = predictor_->GetTensor(output_names[j]); + const float *outptr = output_tensor->data(); + std::vector output_shape = output_tensor->shape(); + output_data_list_.push_back(outptr); + } + } else { + auto out_tensor = predictor_->GetTensor(output_names[0]); + auto out_bbox_num = predictor_->GetTensor(output_names[1]); + } + } + + bool is_rbox = false; + auto inference_start = std::chrono::steady_clock::now(); + for (int i = 0; i < repeats; i++) { + predictor_->Run(); + } + auto inference_end = std::chrono::steady_clock::now(); + auto postprocess_start = std::chrono::steady_clock::now(); + + // Get output tensor + output_data_list_.clear(); + int num_class = 1; + int reg_max = 7; + auto output_names = predictor_->GetOutputNames(); + // TODO: Unified model output. + if (arch_ == "PicoDet") { + for (int i = 0; i < output_names.size(); i++) { + auto output_tensor = predictor_->GetTensor(output_names[i]); + const float *outptr = output_tensor->data(); + std::vector output_shape = output_tensor->shape(); + if (i == 0) { + num_class = output_shape[2]; + } + if (i == fpn_stride_.size()) { + reg_max = output_shape[2] / 4 - 1; + } + output_data_list_.push_back(outptr); + } + } else { + auto output_tensor = predictor_->GetTensor(output_names[0]); + auto output_shape = output_tensor->shape(); + auto out_bbox_num = predictor_->GetTensor(output_names[1]); + auto out_bbox_num_shape = out_bbox_num->shape(); + // Calculate output length + int output_size = 1; + for (int j = 0; j < output_shape.size(); ++j) { + output_size *= output_shape[j]; + } + is_rbox = output_shape[output_shape.size() - 1] % 10 == 0; + + if (output_size < 6) { + std::cerr << "[WARNING] No object detected." << std::endl; + } + output_data_.resize(output_size); + std::copy_n(output_tensor->mutable_data(), output_size, + output_data_.data()); + + int out_bbox_num_size = 1; + for (int j = 0; j < out_bbox_num_shape.size(); ++j) { + out_bbox_num_size *= out_bbox_num_shape[j]; + } + out_bbox_num_data_.resize(out_bbox_num_size); + std::copy_n(out_bbox_num->mutable_data(), out_bbox_num_size, + out_bbox_num_data_.data()); + } + // Postprocessing result + + result->clear(); + if (arch_ == "PicoDet") { + PicoDetPostProcess(result, output_data_list_, fpn_stride_, + inputs_.im_shape_, inputs_.scale_factor_, + score_threshold_, nms_threshold_, num_class, reg_max); + bbox_num->push_back(result->size()); + } else { + Postprocess(imgs, result, out_bbox_num_data_, is_rbox); + bbox_num->clear(); + for (int k = 0; k < out_bbox_num_data_.size(); k++) { + int tmp = out_bbox_num_data_[k]; + bbox_num->push_back(tmp); + } + } + auto postprocess_end = std::chrono::steady_clock::now(); + + std::chrono::duration preprocess_diff = + preprocess_end - preprocess_start; + times->push_back(double(preprocess_diff.count() * 1000)); + std::chrono::duration inference_diff = inference_end - inference_start; + times->push_back(double(inference_diff.count() / repeats * 1000)); + std::chrono::duration postprocess_diff = + postprocess_end - postprocess_start; + times->push_back(double(postprocess_diff.count() * 1000)); +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.h b/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.h new file mode 100644 index 000000000..6add13c07 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/ObjectDetector.h @@ -0,0 +1,254 @@ +// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "Utils.h" // NOLINT +#include "paddle_api.h" // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +using namespace paddle::lite_api; // NOLINT + +struct ObjectPreprocessParam { + // Normalisze + std::vector mean; + std::vector std; + bool is_scale; + // resize + int interp; + bool keep_ratio; + std::vector target_size; + // Pad + int stride; + // TopDownEvalAffine + std::vector trainsize; +}; + +using PreprocessFunc = std::function; + +// PreProcess Function +inline void InitInfo(cv::Mat *im, ImageBlob *data, ObjectPreprocessParam item) { + data->im_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; + data->scale_factor_ = {1., 1.}; + data->in_net_shape_ = {static_cast(im->rows), + static_cast(im->cols)}; +} + +inline void NormalizeImage(cv::Mat *im, ImageBlob *data, + ObjectPreprocessParam item) { + std::vector mean; + std::vector scale; + bool is_scale; + for (auto tmp : item.mean) { + mean.emplace_back(tmp); + } + for (auto tmp : item.std) { + scale.emplace_back(tmp); + } + is_scale = item.is_scale; + double e = 1.0; + if (is_scale) { + e *= 1. / 255.0; + } + (*im).convertTo(*im, CV_32FC3, e); + for (int h = 0; h < im->rows; h++) { + for (int w = 0; w < im->cols; w++) { + im->at(h, w)[0] = + (im->at(h, w)[0] - mean[0]) / scale[0]; + im->at(h, w)[1] = + (im->at(h, w)[1] - mean[1]) / scale[1]; + im->at(h, w)[2] = + (im->at(h, w)[2] - mean[2]) / scale[2]; + } + } +} + +inline void Permute(cv::Mat *im, ImageBlob *data, ObjectPreprocessParam item) { + (*im).convertTo(*im, CV_32FC3); + int rh = im->rows; + int rw = im->cols; + int rc = im->channels(); + (data->im_data_).resize(rc * rh * rw); + float *base = (data->im_data_).data(); + for (int i = 0; i < rc; ++i) { + cv::extractChannel(*im, cv::Mat(rh, rw, CV_32FC1, base + i * rh * rw), i); + } +} + +inline void Resize(cv::Mat *im, ImageBlob *data, ObjectPreprocessParam item) { + std::vector target_size; + int interp = item.interp; + bool keep_ratio = item.keep_ratio; + for (auto tmp : item.target_size) { + target_size.emplace_back(tmp); + } + std::pair resize_scale; + int origin_w = im->cols; + int origin_h = im->rows; + if (keep_ratio) { + int im_size_max = std::max(origin_w, origin_h); + int im_size_min = std::min(origin_w, origin_h); + int target_size_max = + *std::max_element(target_size.begin(), target_size.end()); + int target_size_min = + *std::min_element(target_size.begin(), target_size.end()); + float scale_min = + static_cast(target_size_min) / static_cast(im_size_min); + float scale_max = + static_cast(target_size_max) / static_cast(im_size_max); + float scale_ratio = std::min(scale_min, scale_max); + resize_scale = {scale_ratio, scale_ratio}; + } else { + resize_scale.first = + static_cast(target_size[1]) / static_cast(origin_w); + resize_scale.second = + static_cast(target_size[0]) / static_cast(origin_h); + } + data->im_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + data->in_net_shape_ = {static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second)}; + cv::resize(*im, *im, cv::Size(), resize_scale.first, resize_scale.second, + interp); + data->im_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; + data->scale_factor_ = { + resize_scale.second, resize_scale.first, + }; +} + +inline void PadStride(cv::Mat *im, ImageBlob *data, + ObjectPreprocessParam item) { + int stride = item.stride; + if (stride <= 0) { + return; + } + int rc = im->channels(); + int rh = im->rows; + int rw = im->cols; + int nh = (rh / stride) * stride + (rh % stride != 0) * stride; + int nw = (rw / stride) * stride + (rw % stride != 0) * stride; + cv::copyMakeBorder(*im, *im, 0, nh - rh, 0, nw - rw, cv::BORDER_CONSTANT, + cv::Scalar(0)); + data->in_net_shape_ = { + static_cast(im->rows), static_cast(im->cols), + }; +} + +inline void TopDownEvalAffine(cv::Mat *im, ImageBlob *data, + ObjectPreprocessParam item) { + int interp = 1; + std::vector trainsize; + for (auto tmp : item.trainsize) { + trainsize.emplace_back(tmp); + } + cv::resize(*im, *im, cv::Size(trainsize[0], trainsize[1]), 0, 0, interp); + // todo: Simd::ResizeBilinear(); + data->in_net_shape_ = { + static_cast(trainsize[1]), static_cast(trainsize[0]), + }; +} + +class ObjectDetector { +public: // NOLINT + explicit ObjectDetector(const std::string &model_dir, + std::vector det_input_shape, + const int &cpu_threads, std::string cpu_power, + const int &batch_size = 1) { + // global + fpn_stride_ = std::vector({8, 16, 32, 64}); + // Init preprocess param + // Normalisze + pre_param_.mean = std::vector({0.485, 0.456, 0.406}); + pre_param_.std = std::vector({0.229, 0.224, 0.225}); + pre_param_.is_scale = true; + // resize + pre_param_.interp = 2; + pre_param_.keep_ratio = false; + pre_param_.target_size = + std::vector({det_input_shape[2], det_input_shape[3]}); + // Pad + pre_param_.stride = 0; + // TopDownEvalAffine + pre_param_.trainsize = + std::vector({det_input_shape[2], det_input_shape[3]}); + // op + preprocess_op_func_ = std::vector( + {"DetResize", "DetNormalizeImage", "DetPermute"}); + // init postprocess param + arch_ = "PicoDet"; + nms_threshold_ = 0.5f; + score_threshold_ = 0.3f; + op_map_["InitInfo"] = (PreprocessFunc)InitInfo; + op_map_["DetNormalizeImage"] = (PreprocessFunc)NormalizeImage; + op_map_["DetPermute"] = (PreprocessFunc)Permute; + op_map_["DetResize"] = (PreprocessFunc)Resize; + op_map_["DetPadStride"] = (PreprocessFunc)PadStride; + op_map_["DetTopDownEvalAffine"] = (PreprocessFunc)TopDownEvalAffine; + for (auto op_name : preprocess_op_func_) { + ops_.emplace_back(op_map_[op_name]); + } + LoadModel(model_dir, cpu_threads, cpu_power); + } + + // Load Paddle inference model + void LoadModel(const std::string &model_file, int num_theads, + std::string cpu_power); + + // Run predictor + void Predict(const std::vector &imgs, const int warmup = 0, + const int repeats = 1, + std::vector *result = nullptr, + std::vector *bbox_num = nullptr, + std::vector *times = nullptr); + +private: // NOLINT + // Preprocess image and copy data to input buffer + void Preprocess(const cv::Mat &image_mat); + + // Postprocess result + void Postprocess(const std::vector mats, + std::vector *result, std::vector bbox_num, + bool is_rbox); + + std::shared_ptr predictor_; + + ObjectPreprocessParam pre_param_; + std::vector ops_; + std::vector preprocess_op_func_; + + ImageBlob inputs_; + std::vector output_data_; + std::vector out_bbox_num_data_; + float nms_threshold_; + std::unordered_map op_map_; + std::string arch_; + float score_threshold_; + + std::vector fpn_stride_; +}; diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.cc b/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.cc new file mode 100644 index 000000000..b8f4db2c2 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.cc @@ -0,0 +1,304 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "Pipeline.h" +#include "FeatureExtractor.h" +#include "ObjectDetector.h" +#include "VectorSearch.h" +#include +#include +#include +#include +#include + +void PrintResult(std::vector &det_result, + const std::shared_ptr &vector_search, + SearchResult &search_result) { + for (int i = 0; i < std::min((int)det_result.size(), 1); ++i) { + int t = i; + LOGD("\tresult%d: bbox[%d, %d, %d, %d], score: %f, label: %s\n", i, + det_result[t].rect[0], det_result[t].rect[1], det_result[t].rect[2], + det_result[t].rect[3], det_result[t].confidence, + vector_search->GetLabel(search_result.I[search_result.return_k * t]) + .c_str()); + } +} + +void VisualResult(cv::Mat &img, std::vector &results) { // NOLINT + for (int i = 0; i < 1; i++) { + int w = results[i].rect[2] - results[i].rect[0]; + int h = results[i].rect[3] - results[i].rect[1]; + cv::Rect roi = cv::Rect(results[i].rect[0], results[i].rect[1], w, h); + cv::rectangle(img, roi, cv::Scalar(41, 50, 255), 3); + } +} + +PipeLine::PipeLine(std::string det_model_path, std::string rec_model_path, + std::string label_path, std::string index_path, + std::vector det_input_shape, + std::vector rec_input_shape, int cpu_num_threads, + int warm_up, int repeats, int topk, bool add_gallery, + std::string cpu_power) { + det_model_path_ = det_model_path; + rec_model_path_ = rec_model_path; + label_path_ = label_path; + index_path_ = index_path; + det_input_shape_ = det_input_shape; + rec_input_shape_ = rec_input_shape; + cpu_num_threads_ = cpu_num_threads; + add_gallery_flag = add_gallery; + + max_det_num_ = topk; + cpu_pow_ = cpu_power; + det_model_path_ = det_model_path_ + "/mainbody_PPLCNet_x2_5_640_v1.2_lite.nb"; + rec_model_path_ = + rec_model_path_ + "/general_PPLCNet_x2_5_lite_v1.2_infer.nb"; + + // create object detector + det_ = std::make_shared(det_model_path_, det_input_shape_, + cpu_num_threads_, cpu_pow_); + + // create rec model + rec_ = std::make_shared(rec_model_path_, rec_input_shape_, + cpu_num_threads_, cpu_pow_); + // create vector search + searcher_ = std::make_shared(label_path_, index_path_, 5, 0.5); +} + +std::string PipeLine::run(std::vector &batch_imgs, // NOLINT + std::vector &det_result, // NOLINT + int batch_size, const std::string &label_name) { + std::fill(times_.begin(), times_.end(), 0); + + // if (!this->add_gallery_flag) + // { + DetPredictImage(batch_imgs, &det_result, batch_size, det_, + max_det_num_); // det_result获取[l,d,r,u] + // } + // add the whole image for recognition to improve recall + + ObjectResult result_whole_img = { + {0, 0, batch_imgs[0].cols, batch_imgs[0].rows}, 0, 1.0}; + det_result.push_back(result_whole_img); // 加入整图的坐标,提升召回率 + // get rec result + for (int j = 0; j < det_result.size(); ++j) { + double rec_time = 0.0; // .rect:vector = {l, d, r, u} + vector feature; + int w = det_result[j].rect[2] - det_result[j].rect[0]; + int h = det_result[j].rect[3] - det_result[j].rect[1]; + cv::Rect rect(det_result[j].rect[0], det_result[j].rect[1], w, h); + cv::Mat crop_img = batch_imgs[0](rect); + rec_->RunRecModel(crop_img, rec_time, feature); + if (this->add_gallery_flag) { + this->searcher_->AddFeature(feature.data(), label_name); + } else { + features.insert(features.end(), feature.begin(), + feature.end()); //每次插入一个512的向量 + } + } + if (this->add_gallery_flag) { + VisualResult(batch_imgs[0], det_result); + det_result.clear(); + features.clear(); + indices.clear(); + std::string res = std::to_string(times_[1] + times_[4]) + "\n"; + return res; + } + // do vectore search + SearchResult search_result = searcher_->Search( + features.data(), + det_result + .size()); // 一次搜索多个向量(展平在features里),共det_result.size()个 + // for (int j = 0; j < det_result.size(); ++j) + for (int j = 0; j < 1; ++j) // 对于每个检测框,只把 + { + det_result[j].confidence = + search_result.return_k * j < search_result.D.size() + ? search_result.D[search_result.return_k * j] + : 0.0f; + for (int k = 0; k < this->max_index_num_; ++k) { + std::size_t tidx = + min((std::size_t)(search_result.return_k * j + k), + search_result.D.size() - 1); + + std::string _class_name = searcher_->GetLabel(search_result.I[tidx]); + int _index = (int)(search_result.I[tidx]); + float _dist = search_result.D[tidx]; + if (_dist > 1e5 || _dist < -1e5) { + _dist = 0.0; + } + + det_result[j].rec_result.push_back({_class_name, _index, _dist}); + } + } + // sort(det_result.begin(), det_result.end(), [](const ObjectResult &a, + // const ObjectResult &b){ + // if (a.rec_result.empty() and b.rec_result.empty()) + // { + // return 0; + // } + // else if (a.rec_result.empty() and !b.rec_result.empty()) + // { + // return 0; + // } + // else if (!a.rec_result.empty() and b.rec_result.empty()) + // { + // return 1; + // } + // else + // { + // return (int)(a.rec_result[0].score > b.rec_result[0].score); + // } + // }); + NMSBoxes(det_result, searcher_->GetThreshold(), this->rec_nms_thresold_, + indices); + VisualResult(batch_imgs[0], det_result); + LOGD("================== result summary ========================="); + PrintResult(det_result, searcher_, search_result); + + // results + std::string res; + res += std::to_string(times_[1] + times_[4]) + "\n"; + for (int i = 0; i < 1; i++) { + res.append(det_result[i].rec_result[0].class_name + ", " + + std::to_string((int)(det_result[i].rec_result[0].score * 1000) * + 1.0 / 1000) + + "\n"); + } + det_result.clear(); + features.clear(); + indices.clear(); + return res; +} + +void PipeLine::DetPredictImage(const std::vector batch_imgs, + std::vector *im_result, + const int batch_size_det, + std::shared_ptr det, + const int max_det_num) { + int steps = ceil(float(batch_imgs.size()) / batch_size_det); + for (int idx = 0; idx < steps; idx++) { + int left_image_cnt = (int)batch_imgs.size() - idx * batch_size_det; + if (left_image_cnt > batch_size_det) { + left_image_cnt = batch_size_det; + } + // Store all detected result + std::vector result; + std::vector bbox_num; + std::vector det_times; + + // bool is_rbox = false; + det->Predict(batch_imgs, 0, 1, &result, &bbox_num, &det_times); + int item_start_idx = 0; + for (int i = 0; i < left_image_cnt; i++) { + cv::Mat im = batch_imgs[i]; + int detect_num = 0; + for (int j = 0; j < min(bbox_num[i], max_det_num); j++) { + ObjectResult item = result[item_start_idx + j]; + if (item.class_id == -1) { + continue; + } + detect_num += 1; + im_result->push_back(item); + } + item_start_idx = item_start_idx + bbox_num[i]; + } + times_[0] += det_times[0]; + times_[1] += det_times[1]; + times_[2] += det_times[2]; + } +} + +template +static inline bool SortScorePairDescend(const std::pair &pair1, + const std::pair &pair2) { + return pair1.first > pair2.first; +} + +inline void +GetMaxScoreIndex(const std::vector &det_result, + const float threshold, + std::vector> &score_index_vec) { + // Generate index score pairs. + for (size_t i = 0; i < det_result.size(); ++i) { + if (det_result[i].confidence > threshold) { + score_index_vec.push_back(std::make_pair(det_result[i].confidence, i)); + } + } + + // Sort the score pair according to the scores in descending order + std::stable_sort(score_index_vec.begin(), score_index_vec.end(), + SortScorePairDescend); +} + +float RectOverlap(const ObjectResult &a, const ObjectResult &b) { + float Aa = (a.rect[2] - a.rect[0] + 1) * (a.rect[3] - a.rect[1] + 1); + float Ab = (b.rect[2] - b.rect[0] + 1) * (b.rect[3] - b.rect[1] + 1); + + int iou_w = max(min(a.rect[2], b.rect[2]) - max(a.rect[0], b.rect[0]) + 1, 0); + int iou_h = max(min(a.rect[3], b.rect[3]) - max(a.rect[1], b.rect[1]) + 1, 0); + float Aab = iou_w * iou_h; + return Aab / (Aa + Ab - Aab); +} + +void PipeLine::NMSBoxes(const std::vector &det_result, + const float score_threshold, const float nms_threshold, + std::vector &indices) { + // Get top_k scores (with corresponding indices). + std::vector> score_index_vec; + GetMaxScoreIndex(det_result, score_threshold, score_index_vec); + + // Do nms + indices.clear(); + for (size_t i = 0; i < score_index_vec.size(); ++i) { + const int idx = score_index_vec[i].second; + bool keep = true; + for (int k = 0; k < (int)indices.size() && keep; ++k) { + const int kept_idx = indices[k]; + float overlap = RectOverlap(det_result[idx], det_result[kept_idx]); + keep = overlap <= nms_threshold; + } + if (keep) + indices.push_back(idx); + } +} + +void PipeLine::set_add_gallery(const bool &flag) { + this->add_gallery_flag = flag; +} + +void PipeLine::ClearFeature() { this->searcher_->ClearFeature(); } + +void PipeLine::SaveIndex(const string &save_file_name) { + this->searcher_->SaveIndex(save_file_name); +} + +bool PipeLine::LoadIndex(const string &save_file_name) { + return this->searcher_->LoadFromSaveFileName(save_file_name); +} + +string PipeLine::GetLabelList() { + std::vector class_name_list = this->searcher_->GetLabelList(); + string ret; + ret += "共"; + ret += std::to_string(class_name_list.size()); + ret += "类"; + ret += "\n"; + ret += "====================\n"; + for (const auto &str : class_name_list) { + ret += str; + ret += "\n"; + } + return ret; +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.h b/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.h new file mode 100644 index 000000000..9940a6b1c --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Pipeline.h @@ -0,0 +1,90 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "FeatureExtractor.h" // NOLINT +#include "ObjectDetector.h" // NOLINT +#include "Utils.h" +#include "VectorSearch.h" +#include "paddle_api.h" // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +class PipeLine { +public: // NOLINT + explicit PipeLine(std::string det_model_path, std::string rec_model_path, + std::string label_path, std::string index_path, + std::vector det_input_shape, + std::vector rec_input_shape, int cpu_num_threads, + int warm_up, int repeats, int topk, bool add_gallery, + std::string cpu_power); + + std::string run(std::vector &batch_imgs, // NOLINT + std::vector &det_result, // NOLINT + int batch_size, const std::string &label_name = ""); + + void set_add_gallery(const bool &flag); + + void ClearFeature(); + + void SaveIndex(const string &save_file_name); + + bool LoadIndex(const string &load_file_name); + + string GetLabelList(); + +private: // NOLINT + std::string det_model_path_; + std::string rec_model_path_; + std::string label_path_; + std::string index_path_; + std::vector det_input_shape_; + std::vector rec_input_shape_; + int cpu_num_threads_; + bool add_gallery_flag; + std::string cpu_pow_; + // 实例化检测类 + std::shared_ptr det_; + + // 实例化特征提取(rec)类 + std::shared_ptr rec_; + + // 实例化特征检索类 + std::shared_ptr searcher_; + + int max_det_num_ = 3; + int max_index_num_ = 5; + float rec_nms_thresold_ = 0.05f; + std::vector features; + std::vector indices; + std::vector times_{0, 0, 0, 0, 0, 0, 0}; + + void DetPredictImage(const std::vector batch_imgs, + std::vector *im_result, + const int batch_size_det, + std::shared_ptr det, + const int max_det_num = 3); + + void NMSBoxes(const std::vector &det_result, + const float score_threshold, const float nms_threshold, + std::vector &indices); +}; diff --git a/deploy/shitu_android_demo/app/src/main/cpp/README.md b/deploy/shitu_android_demo/app/src/main/cpp/README.md new file mode 100644 index 000000000..9fa46c767 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/README.md @@ -0,0 +1,3 @@ +download [faiss1.5.3.tar.gz](https://paddle-inference-dist.bj.bcebos.com/faiss1.5.3.tar.gz) and unzip it, put `include` directory here, file structure like below: + +main/cpp/include/faiss/*.h diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Utils.cc b/deploy/shitu_android_demo/app/src/main/cpp/Utils.cc new file mode 100644 index 000000000..e4a6f5712 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Utils.cc @@ -0,0 +1,183 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "Utils.h" // NOLINT +#include // NOLINT +#include // NOLINT + +int64_t ShapeProduction(const std::vector &shape) { + int64_t res = 1; + for (auto i : shape) + res *= i; + return res; +} + +void NHWC3ToNC3HW(const float *src, float *dst, const float *mean, + const float *std, int width, int height) { + int size = height * width; + float32x4_t vmean0 = vdupq_n_f32(mean ? mean[0] : 0.0f); + float32x4_t vmean1 = vdupq_n_f32(mean ? mean[1] : 0.0f); + float32x4_t vmean2 = vdupq_n_f32(mean ? mean[2] : 0.0f); + float32x4_t vscale0 = vdupq_n_f32(std ? (1.0f / std[0]) : 1.0f); + float32x4_t vscale1 = vdupq_n_f32(std ? (1.0f / std[1]) : 1.0f); + float32x4_t vscale2 = vdupq_n_f32(std ? (1.0f / std[2]) : 1.0f); + float *dst_c0 = dst; + float *dst_c1 = dst + size; + float *dst_c2 = dst + size * 2; + int i = 0; + for (; i < size - 3; i += 4) { + float32x4x3_t vin3 = vld3q_f32(src); + float32x4_t vsub0 = vsubq_f32(vin3.val[0], vmean0); + float32x4_t vsub1 = vsubq_f32(vin3.val[1], vmean1); + float32x4_t vsub2 = vsubq_f32(vin3.val[2], vmean2); + float32x4_t vs0 = vmulq_f32(vsub0, vscale0); + float32x4_t vs1 = vmulq_f32(vsub1, vscale1); + float32x4_t vs2 = vmulq_f32(vsub2, vscale2); + vst1q_f32(dst_c0, vs0); + vst1q_f32(dst_c1, vs1); + vst1q_f32(dst_c2, vs2); + src += 12; + dst_c0 += 4; + dst_c1 += 4; + dst_c2 += 4; + } + for (; i < size; i++) { + *(dst_c0++) = (*(src++) - mean[0]) / std[0]; + *(dst_c1++) = (*(src++) - mean[1]) / std[1]; + *(dst_c2++) = (*(src++) - mean[2]) / std[2]; + } +} + +void NHWC1ToNC1HW(const float *src, float *dst, const float *mean, + const float *std, int width, int height) { + int size = height * width; + float32x4_t vmean = vdupq_n_f32(mean ? mean[0] : 0.0f); + float32x4_t vscale = vdupq_n_f32(std ? (1.0f / std[0]) : 1.0f); + int i = 0; + for (; i < size - 3; i += 4) { + float32x4_t vin = vld1q_f32(src); + float32x4_t vsub = vsubq_f32(vin, vmean); + float32x4_t vs = vmulq_f32(vsub, vscale); + vst1q_f32(dst, vs); + src += 4; + dst += 4; + } + for (; i < size; i++) { + *(dst++) = (*(src++) - mean[0]) / std[0]; + } +} + +void nms(std::vector *input_boxes, float nms_threshold, + bool rec_nms) { + if (!rec_nms) { + std::sort(input_boxes->begin(), input_boxes->end(), + [](ObjectResult a, ObjectResult b) { + return a.confidence > b.confidence; + }); + } else { + std::sort(input_boxes->begin(), input_boxes->end(), + [](ObjectResult a, ObjectResult b) { + return a.rec_result[0].score > b.rec_result[0].score; + }); + } + std::vector vArea(input_boxes->size()); + for (int i = 0; i < input_boxes->size(); ++i) { + vArea[i] = (input_boxes->at(i).rect[2] - input_boxes->at(i).rect[0] + 1) * + (input_boxes->at(i).rect[3] - input_boxes->at(i).rect[1] + 1); + } + for (int i = 0; i < input_boxes->size(); ++i) { + for (int j = i + 1; j < input_boxes->size();) { + float xx1 = + std::max(input_boxes->at(i).rect[0], input_boxes->at(j).rect[0]); + float yy1 = + std::max(input_boxes->at(i).rect[1], input_boxes->at(j).rect[1]); + float xx2 = + std::min(input_boxes->at(i).rect[2], input_boxes->at(j).rect[2]); + float yy2 = + std::min(input_boxes->at(i).rect[3], input_boxes->at(j).rect[3]); + float w = std::max(0.f, xx2 - xx1 + 1); + float h = std::max(0.f, yy2 - yy1 + 1); + float inter = w * h; + float ovr = inter / (vArea[i] + vArea[j] - inter); + if (ovr >= nms_threshold) { + input_boxes->erase(input_boxes->begin() + j); + vArea.erase(vArea.begin() + j); + } else { + j++; + } + } + } +} + +// fill tensor with mean and scale +// and trans layout: nhwc -> nchw, neon speed up +void neon_mean_scale(const float *din, float *dout, int size, float *mean, + float *scale) { + float32x4_t vmean0 = vdupq_n_f32(mean[0]); + float32x4_t vmean1 = vdupq_n_f32(mean[1]); + float32x4_t vmean2 = vdupq_n_f32(mean[2]); + float32x4_t vscale0 = vdupq_n_f32(1.f / scale[0]); + float32x4_t vscale1 = vdupq_n_f32(1.f / scale[1]); + float32x4_t vscale2 = vdupq_n_f32(1.f / scale[2]); + + float *dout_c0 = dout; + float *dout_c1 = dout + size; + float *dout_c2 = dout + size * 2; + + int i = 0; + for (; i < size - 3; i += 4) { + float32x4x3_t vin3 = vld3q_f32(din); + float32x4_t vsub0 = vsubq_f32(vin3.val[0], vmean0); + float32x4_t vsub1 = vsubq_f32(vin3.val[1], vmean1); + float32x4_t vsub2 = vsubq_f32(vin3.val[2], vmean2); + float32x4_t vs0 = vmulq_f32(vsub0, vscale0); + float32x4_t vs1 = vmulq_f32(vsub1, vscale1); + float32x4_t vs2 = vmulq_f32(vsub2, vscale2); + vst1q_f32(dout_c0, vs0); + vst1q_f32(dout_c1, vs1); + vst1q_f32(dout_c2, vs2); + + din += 12; + dout_c0 += 4; + dout_c1 += 4; + dout_c2 += 4; + } + for (; i < size; i++) { + *(dout_c0++) = (*(din++) - mean[0]) / scale[0]; + *(dout_c0++) = (*(din++) - mean[1]) / scale[1]; + *(dout_c0++) = (*(din++) - mean[2]) / scale[2]; + } +} + +float fast_exp(float x) { + union { + uint32_t i; + float f; + } v{}; + v.i = (1 << 23) * (1.4426950409 * x + 126.93490512f); + return v.f; +} + +void activation_function_softmax(const float *src, float *dst, int length) { + const float alpha = *std::max_element(src, src + length); + float denominator{0.f}; + + for (int i = 0; i < length; ++i) { + dst[i] = fast_exp(src[i] - alpha); + denominator += dst[i]; + } + for (int i = 0; i < length; ++i) { + dst[i] /= denominator; + } +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/Utils.h b/deploy/shitu_android_demo/app/src/main/cpp/Utils.h new file mode 100644 index 000000000..ef9a0bcb3 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/Utils.h @@ -0,0 +1,143 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include "paddle_api.h" // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT +#include // NOLINT + +#define TAG "JNI" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) +#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__) +#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__) +#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__) +#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL, TAG, __VA_ARGS__) + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +int64_t ShapeProduction(const std::vector &shape); + +template +bool ReadFile(const std::string &path, std::vector *data) { + std::ifstream file(path, std::ifstream::binary); + if (file) { + file.seekg(0, file.end); + int size = file.tellg(); + LOGD("file size=%lld\n", size); + data->resize(size / sizeof(T)); + file.seekg(0, file.beg); + file.read(reinterpret_cast(data->data()), size); + file.close(); + return true; + } else { + LOGE("Can't read file from %s\n", path.c_str()); + } + return false; +} + +template +bool WriteFile(const std::string &path, const std::vector &data) { + std::ofstream file{path, std::ios::binary}; + if (!file.is_open()) { + LOGE("Can't write file to %s\n", path.c_str()); + return false; + } + file.write(reinterpret_cast(data.data()), + data.size() * sizeof(T)); + file.close(); + return true; +} + +inline int64_t GetCurrentTime() { + struct timeval time; + gettimeofday(&time, NULL); + return 1000000LL * (int64_t)time.tv_sec + (int64_t)time.tv_usec; +} + +inline double GetElapsedTime(int64_t time) { + return (GetCurrentTime() - time) / 1000.0f; +} + +inline paddle::lite_api::PowerMode ParsePowerMode(std::string mode) { + if (mode == "LITE_POWER_HIGH") { + return paddle::lite_api::LITE_POWER_HIGH; + } else if (mode == "LITE_POWER_LOW") { + return paddle::lite_api::LITE_POWER_LOW; + } else if (mode == "LITE_POWER_FULL") { + return paddle::lite_api::LITE_POWER_FULL; + } else if (mode == "LITE_POWER_RAND_HIGH") { + return paddle::lite_api::LITE_POWER_RAND_HIGH; + } else if (mode == "LITE_POWER_RAND_LOW") { + return paddle::lite_api::LITE_POWER_RAND_LOW; + } + return paddle::lite_api::LITE_POWER_NO_BIND; +} + +void NHWC3ToNC3HW(const float *src, float *dst, const float *mean, + const float *std, int width, int height); + +void NHWC1ToNC1HW(const float *src, float *dst, const float *mean, + const float *std, int width, int height); + +// Recognise Result +struct RectResult { + std::string class_name; + int class_id; + float score; +}; + +// Object Detection Result +struct ObjectResult { + // Rectangle coordinates of detected object: left, right, top, down + std::vector rect; + // Class id of detected object + int class_id; + // Confidence of detected object + float confidence; + // RecModel result + std::vector rec_result; +}; + +// Object for storing all preprocessed data +class ImageBlob { +public: // NOLINT + // image width and height + std::vector im_shape_; + // Buffer for image data after preprocessing + std::vector im_data_; + // in net data shape(after pad) + std::vector in_net_shape_; + // Evaluation image width and height + // std::vector eval_im_size_f_; + // Scale factor for image size to origin image size + std::vector scale_factor_; +}; + +void nms(std::vector *input_boxes, float nms_threshold, + bool rec_nms = false); + +void neon_mean_scale(const float *din, float *dout, int size, float *mean, + float *scale); + +void activation_function_softmax(const float *src, float *dst, int length); + +inline double GetCurrentUS() { + struct timeval time; + gettimeofday(&time, NULL); + return 1e+6 * time.tv_sec + time.tv_usec; +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.cc b/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.cc new file mode 100644 index 000000000..ae8aba192 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.cc @@ -0,0 +1,166 @@ +// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "VectorSearch.h" +#include "Utils.h" +#include +#include +#include +#include +#include +#include + +void VectorSearch::LoadIndexFile() { + //"/storage/emulated/0/Android/data/com.baidu.paddle.lite.demo.pp_shitu/files/index/vector.index" + std::string file_path = this->index_path; + const char *fname = file_path.c_str(); + this->index = faiss::read_index(fname, 0); +} + +// load id_map.txt +void VectorSearch::LoadIdMap() { + std::string file_path = this->label_path; + std::ifstream in(file_path); + std::string line; + std::vector m_vec; + if (in) { + while (getline(in, line)) { + std::regex ws_re("\\s+"); + std::vector v( + std::sregex_token_iterator(line.begin(), line.end(), ws_re, -1), + std::sregex_token_iterator()); + if (v.size() != 2) { + std::cout << "The number of element for each line in : " << file_path + << "must be 2, exit the program..." << std::endl; + exit(1); + } else + this->id_map.insert(std::pair( + std::stol(v[0], nullptr, 10), v[1])); + } + } +} + +// doing search +const SearchResult &VectorSearch::Search(float *feature, int query_number) { + this->D.resize(this->return_k * query_number); + this->I.resize(this->return_k * query_number); + this->index->search(query_number, feature, return_k, D.data(), I.data()); + this->sr.return_k = this->return_k; + this->sr.D = this->D; + this->sr.I = this->I; + return this->sr; +} + +std::string VectorSearch::GetLabel(faiss::Index::idx_t ind) { + if (this->id_map.count(ind)) { + return this->id_map[ind]; + } else { + return "None"; + } +} + +int VectorSearch::AddFeature(float *feature, const std::string &label) { + this->index->add(1, feature); + int id = (int)(this->id_map.size()); + if (!label.empty()) { + this->id_map.insert(std::pair(id, label)); + } else { + this->id_map.insert( + std::pair(id, std::to_string(id))); + } + return (int)(this->index->ntotal); +} + +void VectorSearch::SaveIndex(const std::string &save_file_name) { + // save_file_name 为无后缀的文件名字,如 vector、vector_new 等 + std::string file_path_index, file_path_labelmap; + if (save_file_name.empty()) { + file_path_index = this->index_path; + file_path_labelmap = this->label_path; + } else { + int begin_pos = (int)this->index_path.find_last_of('/') + 1; + int end_pos = (int)this->index_path.find_last_of('.'); + int replace_len = end_pos - begin_pos; + file_path_index = + this->index_path.replace(begin_pos, replace_len, save_file_name); + + begin_pos = (int)this->label_path.find_last_of('/') + 1; + end_pos = (int)this->label_path.find_last_of('.'); + replace_len = end_pos - begin_pos; + file_path_labelmap = + this->label_path.replace(begin_pos, replace_len, save_file_name); + } + // save index + faiss::write_index(this->index, file_path_index.c_str()); + LOGD("index file saved at [%s]", file_path_index.c_str()); + + // save label_map + std::ofstream out(file_path_labelmap); + std::map::iterator iter; + for (iter = this->id_map.begin(); iter != this->id_map.end(); iter++) { + std::string content = std::to_string(iter->first) + " " + iter->second; + out.write(content.c_str(), (int)content.size()); + out << std::endl; + } + out.close(); +} + +void VectorSearch::ClearFeature() { + this->index->reset(); + this->id_map.clear(); + LOGD("=========================features cleard"); +} + +const float &VectorSearch::GetThreshold() const { return this->score_thres; } + +bool file_exist(const std::string &file_name) { + return access(file_name.c_str(), F_OK) != -1; +} + +bool VectorSearch::LoadFromSaveFileName(const std::string &load_file_name) { + std::string origin_label_path = GetLabelPath(); + int begin_pos = (int)origin_label_path.find_last_of('/') + 1; + int end_pos = (int)origin_label_path.find_last_of('.'); + int replace_len = end_pos - begin_pos; + std::string new_label_path = + origin_label_path.replace(begin_pos, replace_len, load_file_name); + + std::string origin_index_path = GetIndexPath(); + begin_pos = (int)origin_index_path.find_last_of('/') + 1; + end_pos = (int)origin_index_path.find_last_of('.'); + replace_len = end_pos - begin_pos; + std::string new_index_path = + origin_index_path.replace(begin_pos, replace_len, load_file_name); + + if (!file_exist(new_label_path) || !file_exist(new_index_path)) { + return false; + } + this->label_path = new_label_path; + this->id_map.clear(); + LoadIdMap(); + + this->index_path = new_index_path; + LoadIndexFile(); + return true; +} + +std::vector VectorSearch::GetLabelList() const { + std::vector tmp; + for (const auto &it : this->id_map) { + tmp.emplace_back(it.second); + } + std::sort(tmp.begin(), tmp.end()); + tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end()); + return tmp; +} diff --git a/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.h b/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.h new file mode 100644 index 000000000..ee86c7f35 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/cpp/VectorSearch.h @@ -0,0 +1,90 @@ +// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +#ifdef WIN32 +#define OS_PATH_SEP "\\" +#else +#define OS_PATH_SEP "/" +#endif + +#include "include/faiss/Index.h" +#include "include/faiss/index_io.h" +#include +#include +#include + +struct SearchResult { + std::vector I; + std::vector D; + int return_k; +}; + +class VectorSearch { +public: + explicit VectorSearch(const std::string &label_path, + const std::string &index_path, const int &return_k = 5, + const float &score_thres = 0.5) { + // // IndexProcess + this->label_path = label_path; + this->index_path = index_path; + this->return_k = return_k; + this->score_thres = score_thres; + + LoadIdMap(); + LoadIndexFile(); + this->I.resize(this->return_k * this->max_query_number); + this->D.resize(this->return_k * this->max_query_number); + printf("faiss index load success!\n"); + }; + + void LoadIdMap(); + + bool LoadFromSaveFileName(const std::string &load_file_name); + + void LoadIndexFile(); + + int AddFeature(float *feature, const std::string &label = ""); + + const SearchResult &Search(float *feature, int query_number); + + const int GetIndexLength() { return this->index->ntotal; } + + void SaveIndex(const std::string &save_path = ""); + + std::string GetIndexPath() { return this->index_path; } + + std::string GetLabelPath() { return this->label_path; } + + std::string GetLabel(faiss::Index::idx_t ind); + + void ClearFeature(); + + const float &GetThreshold() const; + + std::vector GetLabelList() const; + +private: + std::string index_path; + std::string label_path; + int return_k = 5; + float score_thres = 0.5; + + std::map id_map; + faiss::Index *index; + int max_query_number = 6; + std::vector D; + std::vector I; + SearchResult sr; +}; diff --git a/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/AppCompatPreferenceActivity.java b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/AppCompatPreferenceActivity.java new file mode 100644 index 000000000..51d716b45 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/AppCompatPreferenceActivity.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidu.paddle.lite.demo.common; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.Toolbar; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * A {@link PreferenceActivity} which implements and proxies the necessary calls + * to be used with AppCompat. + *

+ * This technique can be used with an {@link android.app.Activity} class, not just + * {@link PreferenceActivity}. + */ +public abstract class AppCompatPreferenceActivity extends PreferenceActivity { + private AppCompatDelegate mDelegate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + getDelegate().installViewFactory(); + getDelegate().onCreate(savedInstanceState); + super.onCreate(savedInstanceState); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + getDelegate().onPostCreate(savedInstanceState); + } + + public ActionBar getSupportActionBar() { + return getDelegate().getSupportActionBar(); + } + + public void setSupportActionBar(@Nullable Toolbar toolbar) { + getDelegate().setSupportActionBar(toolbar); + } + + @Override + public MenuInflater getMenuInflater() { + return getDelegate().getMenuInflater(); + } + + @Override + public void setContentView(@LayoutRes int layoutResID) { + getDelegate().setContentView(layoutResID); + } + + @Override + public void setContentView(View view) { + getDelegate().setContentView(view); + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().setContentView(view, params); + } + + @Override + public void addContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().addContentView(view, params); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getDelegate().onPostResume(); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + super.onTitleChanged(title, color); + getDelegate().setTitle(title); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getDelegate().onConfigurationChanged(newConfig); + } + + @Override + protected void onStop() { + super.onStop(); + getDelegate().onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + getDelegate().onDestroy(); + } + + public void invalidateOptionsMenu() { + getDelegate().invalidateOptionsMenu(); + } + + private AppCompatDelegate getDelegate() { + if (mDelegate == null) { + mDelegate = AppCompatDelegate.create(this, null); + } + return mDelegate; + } +} diff --git a/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/Utils.java b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/Utils.java new file mode 100644 index 000000000..21964f95f --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/common/Utils.java @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidu.paddle.lite.demo.common; + +import android.content.Context; +import android.content.res.AssetManager; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.hardware.Camera; +import android.opengl.GLES20; +import android.os.Environment; +import android.util.Log; +import android.view.Surface; +import android.view.WindowManager; + +import java.io.*; +import java.util.List; + +public class Utils { + private static final String TAG = Utils.class.getSimpleName(); + + public static void RecursiveCreateDirectories(String fileDir) { + String[] fileDirs = fileDir.split("\\/"); + String topPath = ""; + for (int i = 0; i < fileDirs.length; i++) { + topPath += "/" + fileDirs[i]; + File file = new File(topPath); + if (file.exists()) { + continue; + } else { + file.mkdir(); + } + } + } + + public static void copyFileFromAssets(Context appCtx, String srcPath, String dstPath) { + if (srcPath.isEmpty() || dstPath.isEmpty()) { + return; + } + String dstDir = dstPath.substring(0, dstPath.lastIndexOf('/')); + if (dstDir.length() > 0) { + RecursiveCreateDirectories(dstDir); + } + InputStream is = null; + OutputStream os = null; + if (new File(dstPath).exists()) + { + return ; + } + try { + is = new BufferedInputStream(appCtx.getAssets().open(srcPath)); + os = new BufferedOutputStream(new FileOutputStream(new File(dstPath))); + byte[] buffer = new byte[1024]; + int length = 0; + while ((length = is.read(buffer)) != -1) { + os.write(buffer, 0, length); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + os.close(); + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public static void copyDirectoryFromAssets(Context appCtx, String srcDir, String dstDir) { + if (srcDir.isEmpty() || dstDir.isEmpty()) { + return; + } + try { + if (!new File(dstDir).exists()) { + new File(dstDir).mkdirs(); + } + for (String fileName : appCtx.getAssets().list(srcDir)) { + String srcSubPath = srcDir + File.separator + fileName; + String dstSubPath = dstDir + File.separator + fileName; + if (new File(srcSubPath).isDirectory()) { + copyDirectoryFromAssets(appCtx, srcSubPath, dstSubPath); + } else { + copyFileFromAssets(appCtx, srcSubPath, dstSubPath); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static float[] parseFloatsFromString(String string, String delimiter) { + String[] pieces = string.trim().toLowerCase().split(delimiter); + float[] floats = new float[pieces.length]; + for (int i = 0; i < pieces.length; i++) { + floats[i] = Float.parseFloat(pieces[i].trim()); + } + return floats; + } + + public static long[] parseLongsFromString(String string, String delimiter) { + String[] pieces = string.trim().toLowerCase().split(delimiter); + long[] longs = new long[pieces.length]; + for (int i = 0; i < pieces.length; i++) { + longs[i] = Long.parseLong(pieces[i].trim()); + } + return longs; + } + + public static String getSDCardDirectory() { + return Environment.getExternalStorageDirectory().getAbsolutePath(); + } + + public static String getDCIMDirectory() { + return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath(); + } + + public static Camera.Size getOptimalPreviewSize(List sizes, int w, int h) { + final double ASPECT_TOLERANCE = 0.1; + double targetRatio = (double) w / h; + if (sizes == null) return null; + + Camera.Size optimalSize = null; + double minDiff = Double.MAX_VALUE; + + int targetHeight = h; + + // Try to find an size match aspect ratio and size + for (Camera.Size size : sizes) { + double ratio = (double) size.width / size.height; + if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; + if (Math.abs(size.height - targetHeight) < minDiff) { + optimalSize = size; + minDiff = Math.abs(size.height - targetHeight); + } + } + + // Cannot find the one match the aspect ratio, ignore the requirement + if (optimalSize == null) { + minDiff = Double.MAX_VALUE; + for (Camera.Size size : sizes) { + if (Math.abs(size.height - targetHeight) < minDiff) { + optimalSize = size; + minDiff = Math.abs(size.height - targetHeight); + } + } + } + return optimalSize; + } + + public static int getScreenWidth() { + return Resources.getSystem().getDisplayMetrics().widthPixels; + } + + public static int getScreenHeight() { + return Resources.getSystem().getDisplayMetrics().heightPixels; + } + + public static int getCameraDisplayOrientation(Context context, int cameraId) { + android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); + android.hardware.Camera.getCameraInfo(cameraId, info); + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + int rotation = wm.getDefaultDisplay().getRotation(); + int degrees = 0; + switch (rotation) { + case Surface.ROTATION_0: + degrees = 0; + break; + case Surface.ROTATION_90: + degrees = 90; + break; + case Surface.ROTATION_180: + degrees = 180; + break; + case Surface.ROTATION_270: + degrees = 270; + break; + } + int result; + if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + result = (info.orientation + degrees) % 360; + result = (360 - result) % 360; // compensate the mirror + } else { + // back-facing + result = (info.orientation - degrees + 360) % 360; + } + return result; + } + + public static int createShaderProgram(String vss, String fss) { + int vshader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER); + GLES20.glShaderSource(vshader, vss); + GLES20.glCompileShader(vshader); + int[] status = new int[1]; + GLES20.glGetShaderiv(vshader, GLES20.GL_COMPILE_STATUS, status, 0); + if (status[0] == 0) { + Log.e(TAG, GLES20.glGetShaderInfoLog(vshader)); + GLES20.glDeleteShader(vshader); + vshader = 0; + return 0; + } + + int fshader = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER); + GLES20.glShaderSource(fshader, fss); + GLES20.glCompileShader(fshader); + GLES20.glGetShaderiv(fshader, GLES20.GL_COMPILE_STATUS, status, 0); + if (status[0] == 0) { + Log.e(TAG, GLES20.glGetShaderInfoLog(fshader)); + GLES20.glDeleteShader(vshader); + GLES20.glDeleteShader(fshader); + fshader = 0; + return 0; + } + + int program = GLES20.glCreateProgram(); + GLES20.glAttachShader(program, vshader); + GLES20.glAttachShader(program, fshader); + GLES20.glLinkProgram(program); + GLES20.glDeleteShader(vshader); + GLES20.glDeleteShader(fshader); + GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, status, 0); + if (status[0] == 0) { + Log.e(TAG, GLES20.glGetProgramInfoLog(program)); + program = 0; + return 0; + } + GLES20.glValidateProgram(program); + GLES20.glGetProgramiv(program, GLES20.GL_VALIDATE_STATUS, status, 0); + if (status[0] == 0) { + Log.e(TAG, GLES20.glGetProgramInfoLog(program)); + GLES20.glDeleteProgram(program); + program = 0; + return 0; + } + + return program; + } + + public static boolean isSupportedNPU() { + String hardware = android.os.Build.HARDWARE; + return hardware.equalsIgnoreCase("kirin810") || hardware.equalsIgnoreCase("kirin990"); + } +} diff --git a/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/MainActivity.java b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/MainActivity.java new file mode 100644 index 000000000..4def33e82 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/MainActivity.java @@ -0,0 +1,701 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidu.paddle.lite.demo.pp_shitu; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Typeface; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; +import android.preference.PreferenceManager; +import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.style.StyleSpan; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.baidu.paddle.lite.demo.common.Utils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +public class MainActivity extends AppCompatActivity { + private static final String TAG = MainActivity.class.getSimpleName(); + public static final int OPEN_QUERY_PHOTO_REQUEST_CODE = 0; + public static final int TAKE_QUERY_PHOTO_REQUEST_CODE = 1; + public static final int OPEN_GALLERY_PHOTO_REQUEST_CODE = 4; + public static final int TAKE_GALLERY_PHOTO_REQUEST_CODE = 5; + public static final int CLEAR_FEATURE_REQUEST_CODE = 6; + public static final int REQUEST_LOAD_MODEL = 0; + public static final int REQUEST_RUN_MODEL = 1; + public static final int RESPONSE_LOAD_MODEL_SUCCESSED = 0; + public static final int RESPONSE_LOAD_MODEL_FAILED = 1; + public static final int RESPONSE_RUN_MODEL_SUCCESSED = 2; + public static final int RESPONSE_RUN_MODEL_FAILED = 3; + + protected ProgressDialog pbLoadModel = null; + protected ProgressDialog pbRunModel = null; + protected Handler receiver = null; // Receive messages from worker thread + protected Handler sender = null; // Send command to worker thread + protected HandlerThread worker = null; // Worker thread to load&run model + + // UI components of image classification + protected ImageView ivInputImage; + protected TextView tvTop1Result; + protected TextView tvInferenceTime; + protected TextView tvSimilarity; + protected TextView tvIndexName; + protected TextView tv_description; + + //protected Switch mSwitch; + + // Model settings of image classification + protected String modelPath = ""; + protected String labelPath = ""; + protected String indexPath = ""; + + protected String imagePath = ""; + protected String DetModelPath = ""; + protected String RecModelPath = ""; + protected int cpuThreadNum = 1; + protected EditText label_name; + protected Button label_botton; + protected Button cancel_botton; + protected boolean add_gallery = false; + protected int topk = 3; + protected String cpuMode = ""; + protected long[] detinputShape = new long[]{}; + protected long[] recinputShape = new long[]{}; + protected boolean useGpu = false; + protected Native predictor = new Native(); + + ImageView mImage_add_query; + ImageView mImage_take_query; + ImageView mImage_add_gallery; + ImageView mImage_take_gallery; + ImageView mImage_save; + ImageView mShow_index; + View help; + View reset; + + @SuppressLint("HandlerLeak") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + // Clear all setting items to avoid app crashing due to the incorrect settings + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.clear(); + editor.apply(); + + // Prepare the worker thread for mode loading and inference + receiver = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case RESPONSE_LOAD_MODEL_SUCCESSED: + pbLoadModel.dismiss(); + onLoadModelSuccessed(); + break; + case RESPONSE_LOAD_MODEL_FAILED: + pbLoadModel.dismiss(); + Toast.makeText(MainActivity.this, "Load model failed!", Toast.LENGTH_SHORT).show(); + onLoadModelFailed(); + break; + case RESPONSE_RUN_MODEL_SUCCESSED: + pbRunModel.dismiss(); + onRunModelSuccessed(); + break; + case RESPONSE_RUN_MODEL_FAILED: + pbRunModel.dismiss(); + Toast.makeText(MainActivity.this, "Run model failed!", Toast.LENGTH_SHORT).show(); + onRunModelFailed(); + break; + default: + break; + } + } + }; + worker = new HandlerThread("Predictor Worker"); + worker.start(); + sender = new Handler(worker.getLooper()) { + public void handleMessage(Message msg) { + switch (msg.what) { + case REQUEST_LOAD_MODEL: + // Load model and reload test image + if (onLoadModel()) { + receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_SUCCESSED); + } else { + receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_FAILED); + } + break; + case REQUEST_RUN_MODEL: + // Run model if model is loaded + if (onRunModel()) { + receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_SUCCESSED); + } else { + receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_FAILED); + } + break; + default: + break; + } + } + }; + + // Setup the UI components + ivInputImage = findViewById(R.id.iv_input_image); + tvTop1Result = findViewById(R.id.tv_top1_result); + tvInferenceTime = findViewById(R.id.tv_inference_time); + tvSimilarity = findViewById(R.id.similairy); + tvIndexName = findViewById(R.id.index_name); + tv_description = findViewById(R.id.description); + + // 启动时隐藏输入label的输入框和确定按钮 + label_name = findViewById(R.id.label_name); + label_name.setVisibility(View.INVISIBLE); + label_botton = findViewById(R.id.label_botton); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton = findViewById(R.id.cancel_botton); + cancel_botton.setVisibility(View.INVISIBLE); + + mImage_add_query = (ImageView) findViewById(R.id.add_query); + mImage_take_query = (ImageView) findViewById(R.id.take_query); + mImage_add_gallery = (ImageView) findViewById(R.id.add_gallery); + mImage_take_gallery = (ImageView) findViewById(R.id.take_gallery); + mImage_save = (ImageView) findViewById(R.id.save); + mShow_index = (ImageView) findViewById(R.id.show_index); + + File fileindex = new File(getExternalFilesDir(null) + "/" + "index/latest.index"); + if (fileindex.exists()) { + this.indexPath = "index/latest.index"; + } else { + this.indexPath = "index/original.index"; + } + File filelabel = new File(getExternalFilesDir(null) + "/" + "index/latest.txt"); + if (filelabel.exists()) { + this.labelPath = "index/latest.txt"; + } else { + this.labelPath = "index/original.txt"; + } + mImage_add_query.setOnClickListener(v -> { + if (requestAllPermissions()) { + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + openQueryPhoto(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + mImage_take_query.setOnClickListener(v -> { + if (requestAllPermissions()) { + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + takeQueryPhoto(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + mImage_add_gallery.setOnClickListener(v -> { + if (requestAllPermissions()) { + label_name.setText(""); + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + openGalleryPhoto(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + mImage_take_gallery.setOnClickListener(v -> { + if (requestAllPermissions()) { + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + takeGalleryPhoto(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + mImage_save.setOnClickListener(v -> { + if (requestAllPermissions()) { + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + saveIndex(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + + mShow_index.setOnClickListener(view -> { +// String fullpath = getExternalFilesDir(null) + "/" + labelPath; + if (requestAllPermissions()) { + String labelfile_content = predictor.getClassname(); + AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this) + //标题 + .setTitle(labelPath) + //内容 + .setMessage(labelfile_content) + //图标 + .setIcon(R.mipmap.ic_launcher) + .setPositiveButton("确认", null) + .create(); + alertDialog.show(); + } else { + Toast.makeText(MainActivity.this, "请开启相机和读写文件权限", Toast.LENGTH_SHORT).show(); + } + }); + } + + + @Override + protected void onResume() { + super.onResume(); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + boolean settingsChanged; + String model_path = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY), + getString(R.string.MODEL_PATH_DEFAULT)); + String label_path = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY), + getString(R.string.LABEL_PATH_DEFAULT)); + String index_path = sharedPreferences.getString(getString(R.string.INDEX_PATH_KEY), + getString(R.string.INDEX_PATH_DEFAULT)); + File fileindex = new File(getExternalFilesDir(null) + "/" + "index/latest.index"); + if (fileindex.exists()) { + this.indexPath = "index/latest.index"; + } else { + this.indexPath = "index/original.index"; + } + File filelabel = new File(getExternalFilesDir(null) + "/" + "index/latest.txt"); + if (filelabel.exists()) { + this.labelPath = "index/latest.txt"; + } else { + this.labelPath = "index/original.txt"; + } + + String image_path = "images/demo.jpg"; + settingsChanged = !model_path.equalsIgnoreCase(modelPath); + settingsChanged |= !image_path.equalsIgnoreCase(imagePath); + int cpu_thread_num = Integer.parseInt("4"); + settingsChanged |= cpu_thread_num != cpuThreadNum; + long[] det_input_shape = + Utils.parseLongsFromString("1,3,640,640", ","); + long[] rec_input_shape = + Utils.parseLongsFromString("1,3,224,224", ","); + String cpu_power_mode = "LITE_POWER_HIGH"; + settingsChanged |= !cpu_power_mode.equalsIgnoreCase(cpuMode); + int top_k = Integer.parseInt("3"); + settingsChanged |= top_k != topk; + settingsChanged |= det_input_shape.length != detinputShape.length; + settingsChanged |= rec_input_shape.length != recinputShape.length; + if (!settingsChanged) { + for (int i = 0; i < det_input_shape.length; i++) { + settingsChanged |= det_input_shape[i] != detinputShape[i]; + } + for (int i = 0; i < rec_input_shape.length; i++) { + settingsChanged |= rec_input_shape[i] != recinputShape[i]; + } + } + if (settingsChanged || useGpu) { + modelPath = model_path; + imagePath = image_path; + cpuThreadNum = cpu_thread_num; + detinputShape = det_input_shape; + recinputShape = rec_input_shape; + DetModelPath = modelPath; + RecModelPath = modelPath; + topk = top_k; + cpuMode = cpu_power_mode; + loadModel(); + } + } + + public void loadModel() { + pbLoadModel = ProgressDialog.show(this, "", "Loading model...", false, false); + sender.sendEmptyMessage(REQUEST_LOAD_MODEL); + } + + public void runModel() { + pbRunModel = ProgressDialog.show(this, "", "Running model...", false, false); + sender.sendEmptyMessage(REQUEST_RUN_MODEL); + } + + + public boolean onLoadModel() { + Context context = getBaseContext(); + ApplicationInfo info = context.getApplicationInfo(); + int debug_mode = info.flags & ApplicationInfo.FLAG_DEBUGGABLE; + // push model to sdcard + String realDetModelDir = getExternalFilesDir(null) + "/" + DetModelPath; + if (debug_mode != 0) { + Utils.copyDirectoryFromAssets(this, DetModelPath, realDetModelDir); + } + String realRecModelDir = getExternalFilesDir(null) + "/" + RecModelPath; + if (debug_mode != 0) { + Utils.copyDirectoryFromAssets(this, RecModelPath, realRecModelDir); + } + // push label to sdcard + String realLabelPath = getExternalFilesDir(null) + "/" + labelPath; + if (debug_mode != 0) { + Utils.copyFileFromAssets(this, labelPath, realLabelPath); + } + String realIndexDir = getExternalFilesDir(null) + "/" + indexPath; + if (debug_mode != 0) { + Utils.copyFileFromAssets(this, indexPath, realIndexDir); + } + return predictor.init(realDetModelDir, realRecModelDir, realLabelPath, realIndexDir, + detinputShape, recinputShape, cpuThreadNum, 0, 1, topk, add_gallery, cpuMode); + } + + public boolean onRunModel() { + return predictor.isLoaded() && predictor.process(); + } + + public void onLoadModelSuccessed() { + // Load test image from path and run model + try { + if (imagePath.isEmpty()) { + return; + } + Bitmap image; + // Read test image file from custom path if the first character of mode path is '/', otherwise read test + // image file from assets + if (imagePath.charAt(0) != '/') { + InputStream imageStream = getAssets().open(imagePath); + image = BitmapFactory.decodeStream(imageStream); + } else { + if (!new File(imagePath).exists()) { + return; + } + image = BitmapFactory.decodeFile(imagePath); + } + if (image != null && predictor.isLoaded()) { + predictor.setInputImage(image); + runModel(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void onLoadModelFailed() { + } + + @SuppressLint("SetTextI18n") + public void onRunModelSuccessed() { + // Obtain results and update UI + tvInferenceTime.setText("预测时间:" + predictor.inferenceTime() + " ms"); + Bitmap inputImage = predictor.inputImage(); + if (inputImage != null) { + ivInputImage.setImageBitmap(inputImage); + } + String res = predictor.top1Result(); + if (res.contains(",")) { + String[] res_split = res.split(","); + tvTop1Result.setText("类别:" + res_split[0].trim()); + res_split[1] = res_split[1].trim().substring(0, 5); + tvSimilarity.setText("相似度:" + res_split[1]); + tvIndexName.setText("检索库名称:" + indexPath.split("/")[1].split("\\.")[0]); + } + } + + public void onRunModelFailed() { + } + + public void onImageChanged(Bitmap image) { + // Rerun model if users pick test image from gallery or camera + if (image != null && predictor.isLoaded()) { + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + predictor.setAddGallery(0); + predictor.setInputImage(image); + runModel(); + tv_description.setText("【待识别图片】"); + } + } + + @SuppressLint("SetTextI18n") + public void onAddGallery(Bitmap image) { + if (image != null && predictor.isLoaded()) { + ivInputImage.setImageBitmap(image); + tv_description.setText("【待加库图片】"); + predictor.setAddGallery(1); + predictor.setInputImage(image); + runModel(); + label_name.setVisibility(View.VISIBLE); + label_name.setHint("image label name"); + label_name.setText(""); + label_botton.setVisibility(View.VISIBLE); + cancel_botton.setVisibility(View.VISIBLE); + tvTop1Result.setText("类别:"); + tvSimilarity.setText("相似度:"); + tvInferenceTime.setText("预测时间:" + predictor.inferenceTime() + " ms"); + cancel_botton.setOnClickListener(view -> { + predictor.setAddGallery(0); + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + tvTop1Result.setText("类别:"); + tvSimilarity.setText("相似度:"); + tvInferenceTime.setText("预测时间:"); + }); + label_botton.setOnClickListener(view -> { + predictor.setAddGallery(2); + predictor.setLabelName(label_name.getText().toString()); + runModel(); + label_name.setVisibility(View.INVISIBLE); + label_botton.setVisibility(View.INVISIBLE); + cancel_botton.setVisibility(View.INVISIBLE); + label_name.setText(""); + tvTop1Result.setText("类别:"); + tvSimilarity.setText("相似度:"); + tvInferenceTime.setText("预测时间:" + predictor.inferenceTime() + " ms"); + Toast.makeText(MainActivity.this, "已添加至检索库", Toast.LENGTH_SHORT).show(); + }); + } + } + + + public void onSettingsClicked() { + startActivity(new Intent(MainActivity.this, SettingsActivity.class)); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_action_options, menu); + help = findViewById(R.id.help); + reset = findViewById(R.id.reset); + return true; + } + + + public boolean onPrepareOptionsMenu(Menu menu) { + boolean isLoaded = predictor.isLoaded(); + return super.onPrepareOptionsMenu(menu); + } + + @SuppressLint("NonConstantResourceId") + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + break; + case R.id.reset: + File filelabel = new File(getExternalFilesDir(null) + "/" + labelPath); + if (filelabel.exists()) { + filelabel.delete(); + } + File fileindex = new File(getExternalFilesDir(null) + "/" + indexPath); + if (fileindex.exists()) { + fileindex.delete(); + } + labelPath = getString(R.string.LABEL_PATH_DEFAULT); + indexPath = getString(R.string.INDEX_PATH_DEFAULT); + predictor.loadIndex("original"); + tvIndexName.setText("检索库名称:" + indexPath.split("/")[1].split("\\.")[0]); + Toast.makeText(this, "检索库已初始化为original", Toast.LENGTH_SHORT).show(); + break; + case R.id.help: + if (requestAllPermissions()) { + // Make sure we have SDCard r&w permissions to load model from SDCard + String help_content = "【功能说明】\n本APP基于PaddleClas图像分类开发套件中的通用图像识别系统PP-ShiTu开发,支持对拍照/本地上传的图片进行识别。\n【默认检索库说明】\n · 默认内置检索库名为:original,主要包含常见饮料类别共计196种,可通过 [类别查询] 查看已有类别信息。\n" + + " · 可根据实际需求,通过拍照/上传本地图像补充检索库,以提高识别准确率或增加可识别类别。\n注意:修改检索库后需进行保存,否则重启APP后将重置为初始库original。\n"; + SpannableString span = new SpannableString(help_content); + int idx = help_content.indexOf("【功能说明】"); + span.setSpan(new StyleSpan(Typeface.BOLD), idx, idx + "【功能说明】".length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + idx = help_content.indexOf("【默认检索库说明】"); + span.setSpan(new StyleSpan(Typeface.BOLD), idx, idx + "【默认检索库说明】".length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + idx = help_content.indexOf("注意:"); + span.setSpan(new StyleSpan(Typeface.BOLD), idx, idx + "注意:".length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this) + //标题 + .setTitle("使用说明") + //内容 + .setMessage(span) + //图标 + .setIcon(R.mipmap.ic_launcher) + .setPositiveButton("确认", null) + .create(); + alertDialog.show(); + } + break; + case R.id.settings: + if (requestAllPermissions()) { + // Make sure we have SDCard r&w permissions to load model from SDCard + onSettingsClicked(); + } + break; + } + return super.onOptionsItemSelected(item); + } + + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show(); + } + } + + private boolean requestAllPermissions() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 0); + return false; + } + return true; + } + + private void openQueryPhoto() { + Intent intent = new Intent(Intent.ACTION_PICK, null); // 选择数据 + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); + startActivityForResult(intent, OPEN_QUERY_PHOTO_REQUEST_CODE); + } + + @SuppressLint("QueryPermissionsNeeded") + private void takeQueryPhoto() { + Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(takePhotoIntent, TAKE_QUERY_PHOTO_REQUEST_CODE); + } + + private void openGalleryPhoto() { + // 增加现有图片到库中---主逻辑代码 + Intent intent = new Intent(Intent.ACTION_PICK, null); // 选择数据 + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); + startActivityForResult(intent, OPEN_GALLERY_PHOTO_REQUEST_CODE); + } + + @SuppressLint("QueryPermissionsNeeded") + private void takeGalleryPhoto() { + // 直接拍一张图片到库中---主逻辑代码 + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(intent, TAKE_GALLERY_PHOTO_REQUEST_CODE); + } + + private void clearIndex() { + // 清空index主逻辑代码 + predictor.clearFeature(); + } + + @SuppressLint("SetTextI18n") + private void saveIndex() { + label_name.setText("latest"); + indexPath = "index/latest.index"; + labelPath = "index/latest.txt"; + predictor.saveIndex(label_name.getText().toString()); + tvIndexName.setText("检索库名称:" + indexPath.split("/")[1].split("\\.")[0]); + Toast.makeText(MainActivity.this, "检索库保存并更新为latest", Toast.LENGTH_SHORT).show(); + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK && data != null) { + switch (requestCode) { + case OPEN_QUERY_PHOTO_REQUEST_CODE: + try { + ContentResolver resolver = getContentResolver(); + Uri uri = data.getData(); + Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + cursor.moveToFirst(); + onImageChanged(image); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + break; + case OPEN_GALLERY_PHOTO_REQUEST_CODE: + try { + + ContentResolver resolver = getContentResolver(); + Uri uri = data.getData(); + Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + cursor.moveToFirst(); + onAddGallery(image); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + break; + case TAKE_GALLERY_PHOTO_REQUEST_CODE: + Bundle gextras = data.getExtras(); + Bitmap gimage = (Bitmap) gextras.get("data"); + onAddGallery(gimage); + break; + case TAKE_QUERY_PHOTO_REQUEST_CODE: + Bundle extras = data.getExtras(); + Bitmap image = (Bitmap) extras.get("data"); + onImageChanged(image); + break; + case CLEAR_FEATURE_REQUEST_CODE: + clearIndex(); + break; + default: + break; + } + } + } + + @Override + protected void onDestroy() { + if (predictor != null) { + predictor.release(); + } + worker.quit(); + super.onDestroy(); + } +} diff --git a/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/Native.java b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/Native.java new file mode 100644 index 000000000..736c1d5a3 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/Native.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidu.paddle.lite.demo.pp_shitu; + +import android.graphics.Bitmap; +import android.util.Log; + +import java.util.Arrays; + +public class Native { + static { + System.loadLibrary("Native"); + } + + protected Bitmap inputImage = null; + protected long[] detinputShape = new long[]{1, 3, 640, 640}; + protected long[] recinputShape = new long[]{1, 3, 224, 224}; + protected float inferenceTime = 0; + protected String top1Result = ""; + protected int topk = 1; + protected boolean addGallery = false; + protected String label_name = ""; + protected boolean clearFeature = false; + private long ctx = 0; + + public boolean init(String DetModelDir, + String RecModelDir, + String labelPath, + String IndexDir, + long[] DetInputShape, + long[] RecInputShape, + int cpuThreadNum, + int WarmUp, + int Repeat, + int topk, + boolean add_gallery, + String cpuMode) { + if (DetInputShape.length != 4) { + Log.i("Paddle-lite", "Size of input shape should be: 4"); + return false; + } + if (DetInputShape[0] != 1) { + Log.i("Paddle-lite", "Only one batch is supported in the image classification demo, you can use any batch size in " + + "your Apps!"); + return false; + } + if (DetInputShape[1] != 1 && DetInputShape[1] != 3) { + Log.i("Paddle-lite", "Only one/three channels are supported in the image classification demo, you can use any " + + "channel size in your Apps!"); + return false; + } + this.detinputShape = DetInputShape; + this.recinputShape = RecInputShape; + this.topk = topk; + this.addGallery = add_gallery; + ctx = nativeInit( + DetModelDir, + RecModelDir, + labelPath, + IndexDir, + DetInputShape, + RecInputShape, + cpuThreadNum, + WarmUp, + Repeat, + topk, + add_gallery, + cpuMode); + return ctx != 0; + } + + public boolean release() { + if (ctx == 0) { + return false; + } + return nativeRelease(ctx); + } + + public void setAddGallery(int flag) { + nativesetAddGallery(ctx, flag); + } + + public void saveIndex(String save_file_name) { + nativesaveIndex(ctx, save_file_name); + } + + public boolean loadIndex(String load_file_name) { + return nativeloadIndex(ctx, load_file_name); + } + + public void clearFeature() { + boolean ret = nativeclearGallery(ctx); + } + + public void setLabelName(String label_name) { + this.label_name = label_name; + } + + public String getClassname() { + return nativegetClassname(ctx); + } + + public boolean process() { + if (ctx == 0) { + return false; + } + // ARGB8888 bitmap is only supported in native, other color formats can be added by yourself. + String[] res = nativeProcess(ctx, this.inputImage, label_name).split("\n"); + if (res.length >= 1) { + if (!Arrays.toString(res).contains("success")) { + inferenceTime = Float.parseFloat(res[0]); + if (res.length >= 2) { + top1Result = res[1]; + } else { + top1Result = ""; + } + } + } + return (res.length > 0); + } + + public boolean isLoaded() { + return ctx != 0; + } + + public void setInputImage(Bitmap image) { + if (image == null) { + return; + } + this.inputImage = image.copy(Bitmap.Config.ARGB_8888, true); + } + + public float inferenceTime() { + inferenceTime = (float) (Math.round(inferenceTime * 100)) / 100; + return inferenceTime; + } + + public Bitmap inputImage() { + return inputImage; + } + + public String top1Result() { + return top1Result; + } + + public static native long nativeInit(String DetModelDir, + String RecModelDir, + String labelPath, + String IndexDir, + long[] DetInputShape, + long[] RecInputShape, + int cpuThreadNum, + int WarmUp, + int Repeat, + int topk, + boolean addGallery, + String cpuMode); + + public static native boolean nativeRelease(long ctx); + + public static native boolean nativesetAddGallery(long ctx, int flag); + + public static native boolean nativeclearGallery(long ctx); + + public static native String nativeProcess(long ctx, Bitmap ARGB888ImageBitmap, String label_name); + + public static native boolean nativesaveIndex(long ctx, String save_file_name); + + public static native boolean nativeloadIndex(long ctx, String load_file_name); + + public static native String nativegetClassname(long ctx); +} diff --git a/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/SettingsActivity.java b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/SettingsActivity.java new file mode 100644 index 000000000..d53e1f3da --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/java/com/baidu/paddle/lite/demo/pp_shitu/SettingsActivity.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.baidu.paddle.lite.demo.pp_shitu; + +import android.app.AlertDialog; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.ListPreference; +import android.support.v7.app.ActionBar; +import android.view.View; +import android.widget.Button; +import android.widget.ListView; +import android.widget.Toast; + +import com.baidu.paddle.lite.demo.common.AppCompatPreferenceActivity; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class SettingsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { + ListPreference lpChoosePreInstalledModel = null; + ListPreference lpLabelPath = null; + ListPreference lpIndexPath = null; + + + List preInstalledModelPaths = null; + List preInstalledLabelPaths = null; + List preInstalledIndexDirs = null; + List preInstalledImagePaths = null; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.settings); + ActionBar supportActionBar = getSupportActionBar(); + if (supportActionBar != null) { + supportActionBar.setDisplayHomeAsUpEnabled(true); + } + + + // Initialized pre-installed models + preInstalledModelPaths = new ArrayList<>(); + preInstalledLabelPaths = new ArrayList<>(); + preInstalledIndexDirs = new ArrayList<>(); + preInstalledImagePaths = new ArrayList<>(); + + // Add mobilenet_v1_for_cpu + preInstalledModelPaths.add(getString(R.string.MODEL_PATH_DEFAULT)); + preInstalledLabelPaths.add(getString(R.string.LABEL_PATH_DEFAULT)); + preInstalledIndexDirs.add(getString(R.string.INDEX_PATH_DEFAULT)); + preInstalledImagePaths.add(getString(R.string.IMAGE_PATH_DEFAULT)); + + // Setup UI components + lpChoosePreInstalledModel = + (ListPreference) findPreference(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY)); + String[] preInstalledModelNames = new String[preInstalledModelPaths.size()]; + for (int i = 0; i < preInstalledModelPaths.size(); i++) { + preInstalledModelNames[i] = + preInstalledModelPaths.get(i).substring(preInstalledModelPaths.get(i).lastIndexOf("/") + 1); + } + lpChoosePreInstalledModel.setEntries(preInstalledModelNames); + lpChoosePreInstalledModel.setEntryValues(preInstalledModelPaths.toArray(new String[preInstalledModelPaths.size()])); + + lpLabelPath = (ListPreference) findPreference(getString(R.string.LABEL_PATH_KEY)); + String label_dir = getExternalFilesDir(null) + "/index/"; + File dir = new File(label_dir); + String[] files = dir.list(); + ArrayList files_ = new ArrayList<>(); + for (int i = 0; i < Objects.requireNonNull(files).length; i++) { + if (!files[i].endsWith(".txt")) { + continue; + } + files_.add("index/" + files[i]); + files[i] = label_dir + files[i]; + } + lpLabelPath.setEntries(files_.toArray(new String[files_.size()])); + lpLabelPath.setEntryValues(files_.toArray(new String[files_.size()])); + + lpIndexPath = (ListPreference) findPreference(getString(R.string.INDEX_PATH_KEY)); + String index_dir = getExternalFilesDir(null) + "/index/"; + dir = new File(index_dir); + files = dir.list(); + files_ = new ArrayList<>(); + for (int i = 0; i < Objects.requireNonNull(files).length; i++) { + if (!files[i].endsWith(".index")) { + continue; + } + files_.add("index/" + files[i]); + files[i] = index_dir + files[i]; + } + lpIndexPath.setEntries(files_.toArray(new String[files_.size()])); + lpIndexPath.setEntryValues(files_.toArray(new String[files_.size()])); + } + + private void reloadPreferenceAndUpdateUI() { + SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); + String modelPath = "models"; + int modelIdx = lpChoosePreInstalledModel.findIndexOfValue(modelPath); + if (modelIdx >= 0 && modelIdx < preInstalledModelPaths.size()) { + lpChoosePreInstalledModel.setSummary(modelPath); + } + + String labelPath = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY), + getString(R.string.LABEL_PATH_DEFAULT)); + String indexPath = sharedPreferences.getString(getString(R.string.INDEX_PATH_KEY), + getString(R.string.INDEX_PATH_DEFAULT)); + + lpLabelPath.setSummary(labelPath); + lpIndexPath.setSummary(indexPath); + } + + @Override + protected void onResume() { + super.onResume(); + getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + reloadPreferenceAndUpdateUI(); + } + + @Override + protected void onPause() { + super.onPause(); + getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + reloadPreferenceAndUpdateUI(); + } +} diff --git a/deploy/shitu_android_demo/app/src/main/jniLibs/arm64-v8a/README.md b/deploy/shitu_android_demo/app/src/main/jniLibs/arm64-v8a/README.md new file mode 100644 index 000000000..6d06ad89d --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/jniLibs/arm64-v8a/README.md @@ -0,0 +1 @@ +put `libfaiss.a` in this folder diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/deploy/shitu_android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..1f6bb2906 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable-xxhdpi-v4/btn_switch_default.png b/deploy/shitu_android_demo/app/src/main/res/drawable-xxhdpi-v4/btn_switch_default.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e66c7f605dd5a02d13f04284a046810b292add GIT binary patch literal 1523 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%0Ah1mI8;wmS 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 Id1(2%tniYEDS;to>TRB_lEyuC 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 literal 0 HcmV?d00001 diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings.xml new file mode 100644 index 000000000..917897b99 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_default.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_default.xml new file mode 100644 index 000000000..e19589a97 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_default.xml @@ -0,0 +1,13 @@ + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_pressed.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_pressed.xml new file mode 100644 index 000000000..c4af2a042 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_settings_pressed.xml @@ -0,0 +1,13 @@ + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter.xml new file mode 100644 index 000000000..4f9826d3a --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_default.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_default.xml new file mode 100644 index 000000000..234ca014a --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_default.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_pressed.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_pressed.xml new file mode 100644 index 000000000..accc7aced --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_shutter_pressed.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/btn_switch.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_switch.xml new file mode 100644 index 000000000..691e8c2e9 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/btn_switch.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/ic_launcher_background.xml b/deploy/shitu_android_demo/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..0d025f9bf --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/reset.png b/deploy/shitu_android_demo/app/src/main/res/drawable/reset.png new file mode 100644 index 0000000000000000000000000000000000000000..361111dffb5ef2bbd03d1035479b9b3cbbd49f54 GIT binary patch literal 4849 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 JV4H9J{{VwDIN1OI literal 0 HcmV?d00001 diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/shezhi.png b/deploy/shitu_android_demo/app/src/main/res/drawable/shezhi.png new file mode 100644 index 0000000000000000000000000000000000000000..574fbe9fa6158f035ded792544c060008ab1ed08 GIT binary patch literal 4856 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 literal 0 HcmV?d00001 diff --git a/deploy/shitu_android_demo/app/src/main/res/drawable/white.png b/deploy/shitu_android_demo/app/src/main/res/drawable/white.png new file mode 100644 index 0000000000000000000000000000000000000000..23f514facfe7e0baced45977a472e7640f7694b6 GIT binary patch literal 7751 zcmeAS@N?(olHy`uVBq!ia0y~y;D}&gVD95!0*Y+hy|@!dF%}28J29*~C-V}>VM%xN zbp%TFbN@+X1@buyJR*x382Ao@Fyrz36)6l1vUfaP978JN-ri*7Wnkbryx_O_-rpGq z*vx_I85kNg1VM%~Fr;(}fN2Hq7BI~asl)Geg7)HxZ28PjkWVB8NHV;M{2Mi3Ojf2s~0Wd3!HV#G`2cQnq zXvb=_aR5vPqaE(i#sM%Hj5ZEN8wbE-Fxog6Z5#lT!D!=PbmRb(3`QFVqm2V#G8kpqbH literal 0 HcmV?d00001 diff --git a/deploy/shitu_android_demo/app/src/main/res/layout-land/activity_main_old.xml b/deploy/shitu_android_demo/app/src/main/res/layout-land/activity_main_old.xml new file mode 100644 index 000000000..871e4f0c0 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/layout-land/activity_main_old.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deploy/shitu_android_demo/app/src/main/res/layout/activity_main.xml b/deploy/shitu_android_demo/app/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..1e632b253 --- /dev/null +++ b/deploy/shitu_android_demo/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +