【问题标题】:What is my error using opencv4android and haarcascade使用 opencv4android 和 haarcascade 我的错误是什么
【发布时间】:2014-05-27 09:08:33
【问题描述】:

我正在尝试创建一个从前置摄像头拍照而不是使用 Viola-Jones 算法对其进行分析的应用程序。有什么办法吗?

我正在关注这个示例 Face Detection using Haar Cascades(我正在将此代码传递给 Java),但我的应用程序出错了。

package br.ufla.violajones;

import org.opencv.objdetect.CascadeClassifier;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

private CascadeClassifier faceCascade = new CascadeClassifier("haarcascade_frontalface_default.xml");
private CascadeClassifier eyeCascade = new CascadeClassifier("haarcascade_eye.xml");
private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        context = getApplicationContext();      

                ImageView imgView = (ImageView) findViewById(R.id.image);
        Bitmap img =        BitmapFactory.decodeResource(context.getResources(),R.drawable.lena);

        imgView.setImageBitmap(img);    
    }
}

这是我的错误。我的问题是什么?

05-26 06:16:20.085: W/dalvikvm(12355): No implementation found for native Lorg/opencv/objdetect/CascadeClassifier;.CascadeClassifier_1:(Ljava/lang/String;)J
05-26 06:16:20.090: D/AndroidRuntime(12355): Shutting down VM
05-26 06:16:20.090: W/dalvikvm(12355): threadid=1: thread exiting with uncaught exception (group=0x418ddc80)
05-26 06:16:20.095: E/AndroidRuntime(12355): FATAL EXCEPTION: main
05-26 06:16:20.095: E/AndroidRuntime(12355): Process: br.ufla.violajones, PID: 12355
05-26 06:16:20.095: E/AndroidRuntime(12355): java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1:(Ljava/lang/String;)J
05-26 06:16:20.095: E/AndroidRuntime(12355):    at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Native Method)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at org.opencv.objdetect.CascadeClassifier.<init>(CascadeClassifier.java:58)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at br.ufla.violajones.MainActivity.<init>(MainActivity.java:15)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at java.lang.Class.newInstanceImpl(Native Method)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at java.lang.Class.newInstance(Class.java:1208)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2134)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2277)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.ActivityThread.access$800(ActivityThread.java:145)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.os.Looper.loop(Looper.java:136)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at android.app.ActivityThread.main(ActivityThread.java:5088)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at java.lang.reflect.Method.invokeNative(Native Method)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at java.lang.reflect.Method.invoke(Method.java:515)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-26 06:16:20.095: E/AndroidRuntime(12355):    at dalvik.system.NativeStart.main(Native Method)
05-26 06:16:21.935: I/Process(12355): Sending signal. PID: 12355 SIG: 9
05-26 06:17:44.910: D/libEGL(12674): loaded /system/lib/egl/libEGL_mali.so
05-26 06:17:44.915: D/libEGL(12674): loaded /system/lib/egl/libGLESv1_CM_mali.so
05-26 06:17:44.915: D/libEGL(12674): loaded /system/lib/egl/libGLESv2_mali.so
05-26 06:17:44.930: E/(12674): Device driver API match
05-26 06:17:44.930: E/(12674): Device driver API version: 23
05-26 06:17:44.930: E/(12674): User space API version: 23 
05-26 06:17:44.930: E/(12674): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct  9 21:05:57 KST 2013 
05-26 06:17:44.970: D/OpenGLRenderer(12674): Enabling debug mode 0

【问题讨论】:

标签: android opencv face-recognition


【解决方案1】:

在 BaseLoader 完成加载本机库之前,您不能使用 opencv 代码

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        if (status == LoaderCallbackInterface.SUCCESS ) {

            // now we can call opencv code !

        } else {
            super.onManagerConnected(status);
        }
    }
};

@Override
public void onResume() {;
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5,this, mLoaderCallback);
    // you may be tempted, to do something here, but it's *async*, and may take some time,
    // so any opencv call here will lead to unresolved native errors.
}

要记住的另一件事是,那些 opencv(c++ native) 函数无法从 zip 或 apk 中读取。

您必须将级联文件复制到其他地方,例如 sdcard,然后从那里加载。

【讨论】:

    【解决方案2】:

    我认为这个错误java.lang.UnsatisfiedLinkError: Native method not found 的发生是因为找不到本机库,可能是因为它们没有正确链接。您可能想查看herehere 的详细文档,了解如何将OpenCVAndroid 应用程序一起使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多