From c1c72ec1b76554eb7d38acefc429f67d72b84e4d Mon Sep 17 00:00:00 2001 From: nihuini Date: Mon, 18 Mar 2019 17:00:36 +0800 Subject: [PATCH] add gpu button for squeezencnn sample, require api android-24 and ndk-r18b --- examples/squeezencnn/jni/Android.mk | 4 +-- examples/squeezencnn/jni/Application.mk | 8 ++--- examples/squeezencnn/jni/squeezencnn_jni.cpp | 31 +++++++++++++++++-- examples/squeezencnn/project.properties | 2 +- examples/squeezencnn/res/layout/main.xml | 7 ++++- .../com/tencent/squeezencnn/MainActivity.java | 22 ++++++++++++- .../com/tencent/squeezencnn/SqueezeNcnn.java | 2 +- 7 files changed, 62 insertions(+), 14 deletions(-) diff --git a/examples/squeezencnn/jni/Android.mk b/examples/squeezencnn/jni/Android.mk index e37221629..1f6a45e0a 100644 --- a/examples/squeezencnn/jni/Android.mk +++ b/examples/squeezencnn/jni/Android.mk @@ -1,7 +1,7 @@ LOCAL_PATH := $(call my-dir) # change this folder path to yours -NCNN_INSTALL_PATH := /home/nihui/osd/ncnn/ncnn-android-lib +NCNN_INSTALL_PATH := /home/nihui/osd/ncnn-release/ncnn-android-vulkan-lib include $(CLEAR_VARS) LOCAL_MODULE := ncnn @@ -25,6 +25,6 @@ LOCAL_CFLAGS += -fopenmp LOCAL_CPPFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp -LOCAL_LDLIBS := -lz -llog -ljnigraphics +LOCAL_LDLIBS := -lz -llog -ljnigraphics -lvulkan include $(BUILD_SHARED_LIBRARY) diff --git a/examples/squeezencnn/jni/Application.mk b/examples/squeezencnn/jni/Application.mk index 219be7258..d61c6ebe5 100644 --- a/examples/squeezencnn/jni/Application.mk +++ b/examples/squeezencnn/jni/Application.mk @@ -1,7 +1,3 @@ - -# APP_STL := stlport_static -APP_STL := gnustl_static -# APP_ABI := armeabi armeabi-v7a +APP_STL := c++_static APP_ABI := armeabi-v7a arm64-v8a -APP_PLATFORM := android-9 -# NDK_TOOLCHAIN_VERSION := 4.9 +APP_PLATFORM := android-24 diff --git a/examples/squeezencnn/jni/squeezencnn_jni.cpp b/examples/squeezencnn/jni/squeezencnn_jni.cpp index f7e390b68..26a289765 100644 --- a/examples/squeezencnn/jni/squeezencnn_jni.cpp +++ b/examples/squeezencnn/jni/squeezencnn_jni.cpp @@ -73,9 +73,29 @@ static std::vector split_string(const std::string& str, const std:: extern "C" { +JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) +{ + __android_log_print(ANDROID_LOG_DEBUG, "SqueezeNcnn", "JNI_OnLoad"); + + ncnn::create_gpu_instance(); + + return JNI_VERSION_1_4; +} + +JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) +{ + __android_log_print(ANDROID_LOG_DEBUG, "SqueezeNcnn", "JNI_OnUnload"); + + ncnn::destroy_gpu_instance(); +} + // public native boolean Init(byte[] param, byte[] bin, byte[] words); JNIEXPORT jboolean JNICALL Java_com_tencent_squeezencnn_SqueezeNcnn_Init(JNIEnv* env, jobject thiz, jbyteArray param, jbyteArray bin, jbyteArray words) { + // use vulkan compute + if (ncnn::get_gpu_count() != 0) + squeezenet.use_vulkan_compute = 1; + // init param { int len = env->GetArrayLength(param); @@ -114,9 +134,14 @@ JNIEXPORT jboolean JNICALL Java_com_tencent_squeezencnn_SqueezeNcnn_Init(JNIEnv* return JNI_TRUE; } -// public native String Detect(Bitmap bitmap); -JNIEXPORT jstring JNICALL Java_com_tencent_squeezencnn_SqueezeNcnn_Detect(JNIEnv* env, jobject thiz, jobject bitmap) +// public native String Detect(Bitmap bitmap, boolean use_gpu); +JNIEXPORT jstring JNICALL Java_com_tencent_squeezencnn_SqueezeNcnn_Detect(JNIEnv* env, jobject thiz, jobject bitmap, jboolean use_gpu) { + if (use_gpu == JNI_TRUE && ncnn::get_gpu_count() == 0) + { + return env->NewStringUTF("no vulkan capable gpu"); + } + bench_start(); // ncnn from bitmap @@ -147,6 +172,8 @@ JNIEXPORT jstring JNICALL Java_com_tencent_squeezencnn_SqueezeNcnn_Detect(JNIEnv ncnn::Extractor ex = squeezenet.create_extractor(); + ex.set_vulkan_compute(use_gpu); + ex.input(squeezenet_v1_1_param_id::BLOB_data, in); ncnn::Mat out; diff --git a/examples/squeezencnn/project.properties b/examples/squeezencnn/project.properties index c6998b3d1..7ce68660c 100644 --- a/examples/squeezencnn/project.properties +++ b/examples/squeezencnn/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-9 +target=android-24 diff --git a/examples/squeezencnn/res/layout/main.xml b/examples/squeezencnn/res/layout/main.xml index 37cf35675..4dad10b4e 100644 --- a/examples/squeezencnn/res/layout/main.xml +++ b/examples/squeezencnn/res/layout/main.xml @@ -18,7 +18,12 @@ android:id="@+id/buttonDetect" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="识别" /> + android:text="识别-cpu" /> +