2013-04-07 2 views
3

내 프로젝트에서 얼굴 인식과 관련된 SURF 기능을 구현하려고합니다. opencv에서 안드로이드에 대한 새로운입니다. 따라서 논리적 인 오류를 찾는 것이 조금 어렵습니다. 또한 나는 구글에서 검색하려고했지만 아무것도 수정할 수 없었다. 기능 문제를 처리하기 위해 libray org.opencv.features2d를 가져 왔습니다.SURF Android OpenCV SDK로 기능 추출 - 일부 오류 받기

처음에는 내 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 메모리 주소에 도달하거나 쓰기를 시도 할 때이 오류가 발생한다고 말했습니다. 그러나 나는이 문제를 해결하는 방법을 알아낼 수 없었다. 내가 무엇을 할 수 있는지 말해 줄 수 있습니까?

미리 감사드립니다.

+1

로 사용할 가지고 당신 STDERR의 모든 출력 메시지? – brotherofken

+1

logcat에 오류를 표시하려고했습니다. 나는 치명적인 신호 오류가있어. 반면에 나는 STDERR을 사용하는 방법이나 사용법을 모른다. – COvayurt

답변

4

Ok! SURF 기능은 현재 this thread에 따라 특허를 받았습니다. 그래서 나는이 문제에 관한 오류라고 생각한다. SURF 기능을 추출하려고 시도한 사람은 일치하는 기능이 없으면 this thread에있는 ORB 기능을 계속 사용할 수 있습니다. 나는 이것이 android SURF 특징 추출을 찾는 데 도움이되기를 바랍니다.

+0

나는이 주제와 관련하여 유용한 비평을하고 있습니다. 내가 틀렸다면 나를 바로 잡으십시오. – COvayurt

+0

내가 제공 한 링크에서 제공되는 ORB 기능에 대한 자습서를 따라 왔지만 문제는 항상 아니오를 제공한다는 것입니다. 같은 (500과 동등한) 좋은 경기의 경우, 나는 다른 이미지로 시도한 후, 최소값과 최대 값의 변화가 있지만 좋은 경기는 없다. 또한 객체 이미지에서 장면의 좌표를 가져오고 싶습니다.이 작업을 수행하는 방법을 알고 있다면 –

3

SURF는 OpenCV Android의 배포 패키지에 포함되어 있지 않습니다. 이를 사용하려면 nonfree 모듈을 컴파일하고 프로젝트에서 사용해야합니다. 그래서, 당신이해야 할 일은 NDK 프로젝트를 만들고 nonfree 모듈을 독립형 라이브러리로 컴파일하는 것입니다. 그런 다음이 라이브러리를 사용하여 프로그램을 컴파일하십시오. 그런 다음 애플리케이션을 구축 할 수 있어야합니다. 이 tutorial을 참조 할 수 있습니다.

+1

제가 튜토리얼을 참조 했으므로 설명했던대로 2 개의 .so 파일을 만들었습니다. 이제 서핑 탐지 기능을 사용하고 싶지만 어떻게 코드 (C++ 또는 Java)를 작성하고 내 안드로이드 코드에서 그 메소드를 호출해야합니까? 지원을 해주셔서 감사합니다. –

+0

자습서의 두 번째 부분에서는 NDC 및 JNI를 통해 OpenCV 기능을 사용하는 방법을 보여줍니다. https://sites.google.com/site/wghsite/technical-notes/opencv_nonfree_android_jni_demo –

0

다운로드 이전 버전, 즉 4.2.1에서 OpenCV의 4.2.0 및 프로젝트

관련 문제