[개발환경] 안드로이드 Opencv 연동

2012. 4. 12. 03:57

오늘 하루종일 Opencv 연동을 하느라 삽질을 했습니다.

자바도 처음 하고 기존에 잘 정리해주신 블로거님들 덕분에 설치 까지는 편하게 갔죠.

하지만 opencv 얼굴 검출 샘플을 실행하는데 하루 종일 삽질..ㅋㅋ

정리하자면..

1. JDK 설치

2. 이클립스 설치

3. Opencv 설치

  - 요게 사실 좀 햇갈립니다. 왜냐하면 어디에는 JNI? NDK? 머 이렇게 나와있고, 어디 갔더니 그냥 OpenCV 받아서 설치하면 되구.. 제 생각이 맞는지는 모르겠지만 포팅된 Opencv를 받는게 가장 깔끔할 듯 합니다. NDK를 이용한 방법을 써놓으신 분들은 왠지 opencv를 사용하기 위해 컴파일을 해서 라이브러리를 만드는 과정까지 해야하기 때문에 설치를 해야하지 않나 싶네요. 저 같은 경우는 아직 c로 만든 코드를 컴파일 할 일이 없으니까

그냥 Opencv 받아서 설치 하니까 끝? 설치라고 하기도 좀 그렇긴 합니다 압축 풀고 복사 한거 밖에 없거든요.

자세한 것은 인터넷 뒤지면 많이 나올꺼에요..

====================================================================================================

[수정] 나중에야 해보니 굳이 필요한거 여러개 깔지 말구, 하나만 깔면 다 해결된다. 

자세한 사항은 여기 나와있고,

http://opencv.itseez.com/doc/tutorials/introduction/android_binary_package/android_binary_package.html

다음 주소는 실제 nvidia에서 제공하는 패키지 형태의 설치 파일 주소이다.

이클립스도 업데이트 하자.

그냥 OpenCV 연동하려면 위의 파일을 까는게 속 편하다. 알아서 다 필요한 파일 깔아준다.

해당 파일 설치 후 Opencv를 해당 폴더에 적당한 이름으로 새폴더 만들고 압축푼다.

나중에 이를 이용할 경우 프로젝트 생성후 Opencv 폴더를 Import 시키면 된다.

====================================================================================================


여기서 부터가 문제 인데...

받아서 컴파일을 할려고 실행했더니 오류가 나대요.

JRE 1.7 로 해서 그런거 같더라구요. 에러 메시지가 뜨면 그 에러 메시지 긁어서 인터넷에 찾으면 방법은 나옵니다.

환경설정에서 JRE 1.5 로 바꾸시면 댈꺼예요.

두번째 장벽~ 핸드폰이 없어서 에뮬로 테스트를 하기 위해서 웹캠을 사용하려 햇으나 그리 쉽지가 않네요

인터넷 찾아봣더니 소켓 통신을 이용한 방법이 가장 많더라구요. 다른것도 있는지는 모르겟으나 몇번 찾아보다

저건 아닌거 같아서 패슈~

결국 그냥 장비 연결해서 바로 테스트 하는 방법을 사용하기로 결정~ 이건 아직 안해봐서 모르겠네요

세번째, 캠이 없으니, 일단 테스트라도 해야되는데, 어케 할까 고민하다 bmp파일 읽어서 거기서 얼굴을 찾게 하자. 예제 소스는 잇으니 입력 부분만 사~알짝~  바꿔주면 대겠죠..


하지만 자바를 하나도 모르는 저에겐 어떤 API를 써야 할까 고민

일단 SD card에 이미지 파일 부터 넣어야겠죠? 요것도 인터넷에 찾기 힘들어서 삽질~~ㅠㅠ

이클립스 오른쪽 상단에 보면 자바라고 써잇고 옆에 선택할수 있는 버턴은 있는데 거기서 DDMS를 선택해서 넣으시면 됩니다.

먼저 Android Virtual device manager를 열어서 Start 버튼을 누르고 애뮬을 띄우시고, 

애뮬이 부팅이 되면 DDMS에 막 머라고 뜨죠. 거기에 File Explorer라고 잇어서 거기에서 sdcard 폴더 찾아서 파일 넣으시면 됩니다.

그렇게 하시고, face detect 소스를 고치기 위해서 알아야할 api만 간단히 적을께요


Bitmap bmp = BitmapFactory.decodeFile("/sdcard/test.jpg");       

Bitmap bmp32 = bmp.copy(Bitmap.Config.ARGB_8888, true); 

mRgba =  Utils.bitmapToMat(bmp32);

Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_RGB2GRAY, 0); 

요것만 알면 끝나네요.

bitmapToMat 요 함수가 자꾸 제대로 작동 안해서 좀 고생했지만 결국 내부포멧 문제 같더라구요

머 저도 플밍은 통밥으로 짜는 스타일이라. 보니까 파일에서 읽은 영상 bmp가 4바이트 포멧이 아니였나봅니다. 그래서 규격에 맞게? 변경해서 복사해주고 그걸로 컬러와 흑백 이미지 만든뒤에 얼굴 검출하는데로 입력해주면 나머지는 알아서 돌아가겠죠?



오늘 하루 개고생한 결과입니다. 이제 앞으로 실제 핸드폰으로 해보고, 캠으로 얼굴 찾고 OpenGL이랑 결합만 해주면 될듯하네요.. 갈길이 멀구나~~~~ 

 

본 게시물이 도움이 되었다면, 꾸~욱~ 눌러주세요.

포스팅 하는데 많은 힘이 됩니다~~~

, ,

  1. Blog Icon
    pipak2k

    감사합니다 좋은 정보되었습니다. ㅎㅎ

  2. 잘보고갑니다 // !! 좋은 자료 감사합니다 .

  3. 도움이 되었다니 다행이네요~ 즐 플밍하세요~