3

顔認識に関するプロジェクトに SURF 機能を実装しようとしています。私はアンドロイドのopencvが初めてです。そのため、論理エラーを見つけるのは少し難しいです。また、Googleから検索しようとしましたが、何も修正できませんでした。機能の問題を処理するために、ライブラリ org.opencv.features2d をインポートしました。

最初に、これは私の SURF 実装コード (の一部) です。

    public void SURFExtraction()
{
    FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
    DescriptorExtractor SurfExtractor = DescriptorExtractor.create(DescriptorExtractor.SURF);

     Mat img1 = Highgui.imread("/mnt/sdcard/FaceDB/1.jpg");//one of my face
     Mat img2 = Highgui.imread("/mnt/sdcard/FaceDB/2.jpg");//one of my different face

    //extract keypoints
    MatOfKeyPoint keypoints = new MatOfKeyPoint();
    MatOfKeyPoint logoKeypoints = new MatOfKeyPoint();

     detector.detect(img1, keypoints);//this is the problem "fatal signal"
     Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
     detector.detect(img2, logoKeypoints);
     Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());


}

プログラムを実行すると、単一のエラーが発生します。これだけ。

  A/libc(30444): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)

このエラーを検索しました。このエラーは、ネイティブ クラスが 0x00000000 メモリ アドレスに到達または書き込みしようとしたときに発生すると彼らは言いました。しかし、この問題を解決する方法がわかりませんでした。私に何ができるか教えていただけますか?

前もって感謝します

4

3 に答える 3

4

Ok!このスレッドによると、SURF の機能は現在特許を取得しています。だから私はこの問題についてのエラーだと思います。SURF 機能を抽出しようとしている人は、機能が一致しない限り、このスレッドで正常に機能する ORB 機能を続行できます。これが Android SURF 特徴抽出の検索に役立つことを願っています。

于 2013-04-19T13:17:59.843 に答える
3

SURF は OpenCV Android の配布パッケージには含まれていません。これを使用するには、nonfree モジュールをコンパイルしてプロジェクトで使用する必要があります。そのため、NDK プロジェクトを作成し、nonfree モジュールをスタンドアロン ライブラリとしてコンパイルする必要があります。次に、このライブラリを使用してプログラムをコンパイルします。その後、アプリケーションをビルドできるはずです。このチュートリアルを参照できます。

于 2013-05-24T16:49:54.460 に答える
0

古いバージョン、つまり opencv の 4.2.1 または 4.2.0 をダウンロードして、プロジェクトで使用します。

于 2014-01-07T11:49:53.747 に答える