2010-03-14 2 views
0

나는 얼굴 인식을 위해 opencv와 java를 사용하고 있으며,이 "JNI2OPENCV"파일을 찾았습니다 ....하지만 어떻게 작동하게 만드는지 혼란 스럽습니다. 아무도 도와 줄 수 있습니까?OpenCV를 JNI로 작동시키는 법?

http://img519.imageshack.us/img519/4803/askaj.jpg

다음은 FaceDetection.java에게 있습니다

class JNIOpenCV { 
    static { 
     System.loadLibrary("JNI2OpenCV"); 
    } 
    public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename); 
} 

public class FaceDetection { 
    private JNIOpenCV myJNIOpenCV; 
    private FaceDetection myFaceDetection; 

    public FaceDetection() { 
     myJNIOpenCV = new JNIOpenCV(); 
     String filename = "lena.jpg"; 
     String cascade = "haarcascade_frontalface_alt.xml"; 

    int[] detectedFaces = myJNIOpenCV.detectFace(40, 40, cascade, filename); 
    int numFaces = detectedFaces.length/4; 

     System.out.println("numFaces = " + numFaces); 
     for (int i = 0; i < numFaces; i++) { 
      System.out.println("Face " + i + ": " + detectedFaces[4 * i + 0] + " " + detectedFaces[4 * i + 1] + " " + detectedFaces[4 * i + 2] + " " + detectedFaces[4 * i + 3]); 
     } 
    } 

    public static void main(String args[]) { 
     FaceDetection myFaceDetection = new FaceDetection(); 
    } 
} 

내가 넷빈즈에이 일을 할 수있는 방법 사람이 말해 줄 수? 나는 Google을 시도했으나이 특정 주제에 대한 도움은 매우 중요합니다.

나는 netbeans 프로젝트에서 Llibrary로 전체 폴더를 추가했고 whe는 내가 followig wrroes를 얻을 파일을 실행하려고합니다.

Exception in thread "main" java.lang.UnsatisfiedLinkError: FaceDetection.JNIOpenCV.detectFace(IILjava/lang/String;Ljava/lang/String;)[I at FaceDetection.JNIOpenCV.detectFace(Native Method) at FaceDetection.FaceDetection.<init>(FaceDetection.java:19) at FaceDetection.FaceDetection.main(FaceDetection.java:29) Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds)

은 누구도 날이 작동하는 정확한 방법을 알 수 있습니까? 내가해야하는 일처럼?

답변

0

Windows에서 JNI를 사용하는 경우 Dependency Walker은 (는) 친구가 될 것입니다.

하지만, 우리가 그에게 도착하기 전에 먼저 JRE가 추가하여 JNIOpenCV.dll을 찾을 수 있는지 확인합니다 System.out.println("java.library.path="+System.getProperty("java.library.path")); 을 정적 생성자 블록에.

그러나 여기에있는 문제는 JNIOpenCV.dll 파일을 찾는 것이 아니라 그 파일이 의존하는 파일이라고 생각합니다. Dependency Walker에서 .dll을 열고 (그냥 끌어다 놓으십시오.) msjava.dll을 제외한 모든 오류 메시지를주의하십시오. - 무시하십시오. 중요하지 않습니다. 대개 내 직감은 Microsoft Visual C/C++ 런타임 라이브러리가 필요하며 Visual Studio 웹 사이트에서 다운로드하여 dll과 같은 폴더에 저장하는 것입니다.

행운을 빈다.

는 현재를 살펴한다
+0

안녕하세요, 답장을 보내 주셔서 감사합니다 ......하지만 java.library.path를 확인했습니다 ... ... JNI2OpenCV.dll을 종속 워커에 열었습니다. 그 점에 대해 많은 도움을 줄 수 있습니까? http://img221.imageshack.us/img221/5042/helpf.jpg – user293252

+0

여기에 내가 추가하고 java.library.path을 발견 'java.library.path = C : \ 프로그램 파일 \ 자바 \ jdk1. C : \ WINDOWS \ system32 \ WBEM \ 6.0 \ 18 \ bin; C : \ WINDOWS \ system32 \ C : \ WINDOWS \ system32 C : \ Program Files \ Intel \ DMIX, C : \ OpenCV2.0 \ bin, C : \ Sun \ SDK \ jdk \ bin, C : \ Program Files \ QuickTime \ QTSystem \ MySQL 서버 5.1 \ bin; C : \ Sun \ SDK \ bin ' – user293252

+0

종속성 워커는 좋게 보입니다. MSJAVA와 MPR은 일반적으로 오류가 있으므로 다른 모든 것이 보이지 않으면 괜찮습니다. System.loadLibrary()는 위에있는 경로에서 라이브러리를 찾고 dll이 없기 때문에로드되지 않습니다. 이동하거나 System.load()를 사용하여 DLL의 전체 경로와 파일 이름 (및 확장명)을 예상 할 수 있습니다. – ianium

0

내가 OpenCV의 2.3.1 대신 넷빈즈의 Eclipse를 사용하여 작업 안드로이드 예제를 만들었습니다.

이 작은 tutorial은 토치 라이트를 따르는 로봇을 설명합니다. 이 페이지에는 필요한 단계와 소스 코드도 포함되어 있습니다.

관련 문제