Я хотел добавить поддержку тензорного потока в мой проект Android (моя собственная версия обнаружения объектов из демоверсии) и не хотел иметь дело с bazel
или cmake
для создания собственных библиотек, которые использует тензорный поток.Поэтому, как и было рекомендовано во многих выпусках, опубликованных в проекте tenorflow GitHub, я скачал самую последнюю успешную ночную сборку от Jenkins, которая содержит файл apk для тестирования демонстрации обнаружения объекта и файла .jar вместе с файлами .so из разных архитектур.
Поэтому я добавил предустановленные библиотеки libtensorflow_demo.so
и libtensorflow_inference.so
(arm64-v8a, armeabi-v7a, x86, x86_64) и файл libandroid_tensorflow_inference_java.jar
в каталог libs.
Я добавил эти строки в свой gradle:
lintOptions {
abortOnError false
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
в моем proguard-rules-pro Я добавил это:
-keepclasseswithmembers class * {
native <methods>;
}
для загрузки .поэтому библиотека, которую я использую:
System.loadLibrary("tensorflow_demo");
Я распаковал .apk , чтобы проверить, есть ли он там и был ли он.
из моего logcat Iзаметил это:
I/TensorFlowInferenceInterface: Checking to see if TensorFlow native methods are already loaded
I/TensorFlowInferenceInterface: TensorFlow native methods not found, attempting to load via tensorflow_inference
I/TensorFlowInferenceInterface: Successfully loaded TensorFlow native methods (RunStats error may be ignored)
I/TensorFlowInferenceInterface: Model load took 123ms, TensorFlow version: 1.8.0-rc1
I/TensorFlowInferenceInterface: Successfully loaded model from 'file:///android_asset/frozen_inference_graph_stripped.pb'
Но когда приложение запускается, оно вылетает и выдает эту ошибку:
java.lang.UnsatisfiedLinkError: No implementation found for void com.example.aboussaada.myapplication.tracking.ObjectTracker.initNative(int, int, boolean) (tried Java_com_example_aboussaada_myapplication_tracking_ObjectTracker_initNative and Java_com_example_aboussaada_myapplication_tracking_ObjectTracker_initNative__IIZ)
at com.example.aboussaada.myapplication.tracking.ObjectTracker.initNative(Native Method)
at com.example.aboussaada.myapplication.tracking.ObjectTracker.init(ObjectTracker.java:261)
at com.example.aboussaada.myapplication.tracking.ObjectTracker.getInstance(ObjectTracker.java:224)
at com.example.aboussaada.myapplication.tracking.MultiBoxTracker.onFrame(MultiBoxTracker.java:219)
at com.example.aboussaada.myapplication.DetectorActivity.processImage(DetectorActivity.java:215)
at com.example.aboussaada.myapplication.camera.CameraActivity.onPreviewFrame(CameraActivity.java:155)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1153)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Так что я здесь не так делаю ??любая помощь очень ценится.