Я сделал это в простом Java программеSystem.loadLibrary в андроид
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning FaceDetector");
String cascade= "img/test.xml";
String imgloc= "img/asd.png";
CascadeClassifier faceDetector = new CascadeClassifier(cascade);
Mat image = Highgui.imread(imgloc);
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
String filename = "ouput.jpg";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
Он обнаруживает лицо из изображения и выводит обнаруженное лицо. Теперь я хочу включить его в проект Android, но System.loadLibrary
делает мое приложение. авария. Как я могу это решить?
Вот crashlog
01-11 10:44:23.296: E/AndroidRuntime(1564): FATAL EXCEPTION: main
01-11 10:44:23.296: E/AndroidRuntime(1564): Process: com.tppa.detector, PID: 1564
01-11 10:44:23.296: E/AndroidRuntime(1564): java.lang.NoClassDefFoundError: org.opencv.core.Core
01-11 10:44:23.296: E/AndroidRuntime(1564): at com.tppa.detector.MainActivity.onCreate(MainActivity.java:25)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.Activity.performCreate(Activity.java:5231)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.ActivityThread.access$800(ActivityThread.java:135)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.os.Handler.dispatchMessage(Handler.java:102)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.os.Looper.loop(Looper.java:136)
01-11 10:44:23.296: E/AndroidRuntime(1564): at android.app.ActivityThread.main(ActivityThread.java:5001)
01-11 10:44:23.296: E/AndroidRuntime(1564): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 10:44:23.296: E/AndroidRuntime(1564): at java.lang.reflect.Method.invoke(Method.java:515)
01-11 10:44:23.296: E/AndroidRuntime(1564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
01-11 10:44:23.296: E/AndroidRuntime(1564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
01-11 10:44:23.296: E/AndroidRuntime(1564): at dalvik.system.NativeStart.main(Native Method)
01-11 10:44:23.304: W/ActivityManager(479): Force finishing activity com.tppa.detector/.MainActivity
01-11 10:44:23.452: D/dalvikvm(479): GC_FOR_ALLOC freed 543K, 23% free 6457K/8320K, paused 13ms, total 13ms
01-11 10:44:23.956: W/ActivityManager(479): Activity pause timeout for ActivityRecord{528f2d70 u0 com.tppa.detector/.MainActivity t8 f}
01-11 10:44:24.004: W/EGL_genymotion(655): eglSurfaceAttrib not implemented
01-11 10:44:33.080: E/WindowManager(479): Starting window AppWindowToken{529d5a4c token=Token{528e29fc ActivityRecord{528f2d70 u0 com.tppa.detector/.MainActivity t8}}} timed out
Он работал в простом Java, я добавил .jar в новую библиотеку в пути сборки, и как родную библиотеку я добавил .dll, но это, кажется, для андроидов это не будет работать.
отправить журнал сбоев –
Вы построили нативную часть с помощью NDK? https://developer.android.com/tools/sdk/ndk/index.html#Tools –
Я никогда не размещал crashlog, я сделал это правильно? Я также не понимаю, что такое родной язык. –