티스토리 뷰

반응형

Windows 10 IoT Core 와 RaspberryPI 를 가지고 기본적인 Sensor 제어를 지금까지 해보았는데 Home Security 를 위한 Camera 및 영상처리를 위한 Study가 필요하다. 우선 MS 에서 제공하는 OpenCV Sample을 실행해보고 코드 분석을 통해 나만의 Project에 적용할 예정이며 오늘은 OpenCV 샘플에 대해서 다뤄보려 한다.

# OpenCV ?

OpenCV(Open Computer Vision)은 오픈 소스 컴퓨터 버전 C라이브러리이다. 원래는 인텔이 개발하였고 윈도우, 리눅스 등의 여러 플랫폼에서 사용할 수 있다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상을 볼수 있는 Intel Performance Primitives(IPP)를 지원한다. (참조 : https://ko.wikipedia.org/wiki/OpenCV). 응용할 수 있는 분야는 물체인식, 안면인식, 제스처 인식에 쓰일 수 있는데 오픈소스로서 스펙만 맞추면 자신의 알고리즘도 라이브러리에 등록시킬 수 있다. 공식홈페이지는 아래와 같다.

공식홈페이지 : http://opencv.org/

공식문서화위치 : https://sourceforge.net/projects/opencvlibrary/

영상처리에 대한 동작을 OpenCV 라이브러리를 통해서 수행할 수 있고 카메라 영상을 뿌려주는 등의 기본적인 기능들도 OpenCV 라이브러리를 통해 할 수 있다.

# OpenCV Library 빌드

OpenCV는 C라이브러리로 링크해서 사용되기때문에 자신의 프로젝트에서 사용할 수 있도록 각 타켓에 맞게 빌드해야한다. 난 RapsberryPI 위에다가 App을 돌릴 것이기 때문에 ARM용으로 빌드한다. 우선 하기 git을 clone해서 살펴보자.

Microsoft에서 제공하는 OpenCV 라이브러리 용 소스 및 예제 : https://github.com/Microsoft/opencv

참고할 예제 설명자료는 이 곳을 참고한다.(https://developer.microsoft.com/ko-kr/windows/iot/samples/opencv)

간략히 OpenCV 라이브러리를 빌드하는 순서를 보면,

1. MS에서 제공하는 OpenCV 프로젝트 다운로드

2. vs2015-sample-ARM 으로 git branch 후 sln 로 프로젝트 오픈

 : ARM용으로 빌드한다면 경로는 이와 같다.(\opencv\vs2015\WS\10.0\ARM)

3. System 환경변수를 등록해놓는다.

 : 환경변수를 등록해서 차후 빌드시 OpenCV의 라이브러리를 잘 링크될 수 있도록 해야한다. 'OCV2015_ROOT' 로 여기서는 설정했다. 자세한 내뇽은 MS에서 제공하는 Sample의 설명내용을 참조하도록 한다.

4. 빌드시작

 : Release 그리고 Target은 ARM으로 해서 빌드하고 빌드된 곳의 Release 폴더의 ARM용으로 나온 dll을 기억해둔다.

5. 나만의 Project 생성

 : C++ 빈 프로젝트 생성 그리고 OpenCV dll을 추가한다. 추가할때 문의 할 사항은 위에서 공유한 OpenCV 샘플 자료를 참조하도록 한다.

# 빌드완료와 배포

빌드는 코드상의 문제가 없으면 정상이며 이제 배포를 시작한다. 배포시 샘플문서의 맨 마지막에 '컴퓨터 이름'을 지정하는 부분을 잘 확인한다. 배포가 되고 나면 Xaml 파일에 작성한 UI가 나타난다. 현재는 버튼 3개가 있는 단순한 UI 이며 각각의 버튼은, image load, canny, recognition 으로 해당 기능이 수행되어야 한다.

# OpenCV Sample 확인

OpenCV가 잘되기 위해서는 많은 개발자들의 참요가 필요하나 기본적인 기능은 Sample에서 보여주는게 가장 일반적이다. 

Test Image 버튼을 눌러서 이미 등록해놓은 이미지를 불러온다.

Canny 기능인 edge detect를 해보자. (https://en.wikipedia.org/wiki/Canny_edge_detector)

얼굴인식과, 신체 인식을 예시로 보여주고 있다. 실제 코드로 다루는 부분은 설명하는 것보다 조금은 더 이해하기 어려울 수 있지만 OpenCV 예제프로그램을 통해 위와같은 동작을 구현할 수 있다.

지금까지 OpenCV 라이브러리에 대한 개념적인 설명과 기초적인 이용방법, 샘플에 대한 소개를 했다. OpenCV 라이브러리가 방대한 만큼 다루지 못한 부분이 더 많은 것이 사실이지만 샘플에서 사용한 기능만 잘 사용하더라도 기본적으로 자기가 원하는 기능을 사용할 수 있을 뿐더러 영상처리에 대한 기본적인 지식을 쌓는데 유용할 것이다. 실제 프로젝트에 이용할 수 있는 시간이 빨리 왔음을 바라며 오늘은 여기까지~!




반응형
댓글