6-3 Pi 카메라 Face Detection을 위한 라즈베리 파이 Stretch버전에 Opencv 3.3 설치

in #kr6 years ago

noname01.png

지금 구매하는 라즈베리 파이는 이미 B 모델에서 B+ 로 넘어가는 중이다. 특별히 사용법 상 달라진 것은 없겠지만 B+ 의 클럭 주파수가 훨씬 높아짐과 아울러 연산 속도가 빨라졌으리라.
지금도 라즈베리 파이 홈페이지를 방문하면 Stretch 와 Jessie 두가지 OS 버전 중에 하나를 다운 받을 수 있을 것이며 Stretch를 설치하도록 한다. 연전에는 당연히 Jessie버전을 사용했지만 Stretch 버전으로 넘어 가는 통에 부적응 현상으로 반년 이상 손을 놓은 경험을 가지고 있다. OS 버전이야 Jessie 든 Strech 든 큰 상관이 없다고 생각할 수 도 있으나 Opencv 설치 문제와 연관되면 절대 그렇지 않다는 점에 유의하자. 1년 동안 시도 때도 없이 Opencv 설치하여 실행시켜 보려는 Face Detection 코드는 실행은커녕 허구한 날 에러 메시지를 받은게 거의 일년이 되어 간다.

이런 식으로 라즈베리 파이 보드로 뭘 해보려면 거의 망쪼들기 딱 좋다는 느낌이 든다. 머신 러닝의 무한한 가능성을 엿보려고 라즈베리 파이를 새로 구매하는 의욕적인 분들을 위해 그런 무모한 시간 및 노력의 낭비를 막아야겠다는 일념으로 오랜 만에 글다운 글(?)을 써 볼 작정이다.

우리가 목표로 하는 라즈베리 파이의 OS 가 이름 치고도 상당히 이상한 뉴앙스인 “쭉쭉뻗쳐라” 로 번역되는 Stretch 버전이라는 점을 확인하자. 설치하려는 인텔사의 Opencv는 현재 3.4 버전까지 나왔으나 3.3. 버전을 설치하도록 한다.

라즈베리 파이 보드 구매 후 Stretch 버전 설치 후 한글 설치까지는 마친 시점에서 가장 먼저 Opencv 3.3 버전을 설치하자. 설치 과장은 다음의 인터넷 주소의 설치과정을 그대로 따라 하도록 한다. 이 사이트 운영자는 라즈베리 파이의 OS 와 Opencv 가 업그레이드 되는 시점마다 설치 과정을 튜터링 하고 있다. Jessie 버전 때부터 여러 번 따라 해 보았는데 실패를 거듭하다 SD 카드를 한번 태워먹은 적도 있었지만 최근에 딱 두 번 성공했으며 동호회 한분도 성공적으로 설치했다.

https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/

사이트 끝 부분에 가면 Opencv 맛배기 짧은 예제를 보여주는 데가 끝인데 Face Detection 과 같이 관심 분야에 대해서 더 알고 싶으면 책을 구매하라는 선전으로 끝난다. 좀 괘씸하다는 생각과 함께 씁쓸한 웃음이 나왔다.

설치 후에도 Face Detection 예제 문제로 고심을 좀 하긴 했는데 그레도 Opencv 가 제대로 깔렸는지 주특기인 좌충우돌 수법으로 지난번 Jessie 버전 때부터 하던 Face Detection 코드를 살렸다. 설치가 끝나게 되면 그 예제를 올릴 예정인데 사실 거기까지가 필자의 밑천 한계이며 그 다음부터는 직접 스스로 창의적인 코딩 실력 발휘가 필요하지 싶다.

설치 과정은 그대로 따라가면 되며 잘못된 부분이 없지만 그래도 몇 가지 주의할 점들을 지적해 두고자 한다. Opencv 설치에 많이 실패하는 원인들은 심리적인 것이 많으며 아울러 라즈베리 파이 보드를 형편없는 수준의 저성능의 보드로 보는 점도 영향을 미치는 듯하다.

라즈베리 파이 보드 설치 과정에 주의할 점 중에 하나는 라즈베리 파이 보드의 속도가 1GHz 가 넘는다고는 하나 데스크탑 PC 로 치면 7∼8년은 되었음직한 낡았으면서 아주 느린 컴퓨터를 사용한다는 점을 인지하도록 하자. 멀티 태스킹 작업 시 블루투스 마우스를 움직이면 보드가 죽은 것처럼 연기하다가 갑자기 움직이는 이런 일이 비일비재하므로 절대로 속지 말아야 한다. 편안한 마음으로 진짜 보드가 죽었는지 살았는지 여러번 조심스럽게 슬로루 슬로우 테스트 해봐야 한다. 죽은 듯이 보이는데 거의 살아서 슬립하는 것으로 보인다.

그 다음 주의해야 할 점은 동호회분과 함께 작업하면서 겪은 일인데 마우스 오른쪽 버튼 클릭에 의한 복사 기능이 안되는 것으로 알고 있었다. 세상에 마우스 오른쪽 버튼 복사가 안되면 일일이 다 타이핑해야 된다는 소린데 이는 고문보다 더 한 상황이 연출 될 것이다. 그런데 동호회 전문가 분이 Opencv설치를 일일이 키보드 타이프에 의해 작업을 진행했었다. 그렇지만 라즈베리 파이 보드에서도 마우스 오른쪽 버튼 복사 기능이 건재하다는 점을 확인하고는 무생물인 라즈베리 보드에 대고 노발대발 불평을 쏟아 내었다. 이분도 라즈베리 파이 보드 성능을 잘 몰라 여러 가지 면에서 속은 듯하다.

noname02.png

아울러 라즈베리 파이 보드는 아두이노에 비해 발열이 대단히 심하다. 아무리 쥐방울만한 컴퓨터 보드라고 하지만 그래도 명색이 서버용 보드이고 클럭 주파수가 1GHz 가 넘는데 발열 문제가 없으면 이상한 것이다. 보드를 박스에 넣어 두었으면 반드시 뚜껑을 열어 두는 것이 열 발산에 유익할 것이다. 왜냐하면 오래 관찰해 보니까 한번씩 먹통이 되기도 했는데 그 원인이 발열인 듯하며 나머지는 죽은 듯이 랙먹고 위장하는 상태이다. 그래서 Opencv 설치 시 모델 B보드에 히트싱크가 설치되었는지 확인하고 사무실이라면 서늘하더라도 에어컨을 최저온도인 18도에 맞춰두는 것이 해답 중의 해답이다. B+ 보드는 아예 금속 커버로 되어 있어 열문제를 자체적으로 해결한 듯하다.

통신 환경도 광랜이 지원되면 1시간 30분짜리 과정이 있는데 상당히 빨리 설치가 끝날 수 있겠으나 문제는 내려받는 상대방 측의 서버와의 통신이 잘 안되는 경우가 수시로 발생한다. 그렇다고 별도로 미러 사이트도 없기 때문에 무한한 인내심으로 감수해야하며 특히 주의할 점은 저녁 7시 이후 절대 시도하지 않는 것이 상책이다. 필자의 경우 약간의 경험이 있음에도 불구하고 라즈베리 파이의 농간에 당해 한번은 2시간 30 분 두 번째는 거의 4시간을 소모했는데 그래서 라즈베리 파이 보드가 죽은체 하는지 수십번 테크해 보았는데 건재해 있었다. 하지만 지금은 일단 끄고 다음 날 그 지점부터 다시 시작할 정도로 경험이 쌓였다. Matplotlib 설치 시에도 비슷한 경험을 가지고 있다. 즉 보드 주변 온도를 충분히 서늘하게 유지해 주면 먹통이 되는 문제는 피할 수 있을 것이다.

Step #1:Expand filesystem

아래와 같이 설치 튜토링 사이트와 터미날 하나를 연 멀티 태스킹 환경 하에서 마우스 오른쪽 버튼을 사용하여 실행할 명령을 한번씩 카피하여 터미널 창에 복사하여 실행 시키자.
Expand filesystem 처리는 사용하는 마이크로 SD 카드의 메모리 용량을 파티션하지 않고 전체를 다 사용하도록 포함시키는 작업이다.

noname03.png

시스템 configuration 작업이 완료되면 반드시

reboot 시키도록 한다.

가용 메모리 용량이 최대로 확장 되었으면 터미널 창에서 df –h 명령을 실행시키고 그 결과를 관찰하도록 하자. 다음은 Opencv를 설치한 필자의 메모리 사용 현황이다. 64Giga 삼성 SD 카드를 사용 중인데 Opencv를 설치하면 족히 10Giga 정도 사용하는듯하다.

noname04.png

메모리 점유 현황을 참고하면 16Giga는 너무 빠듯하고 최소 32Giga 나 64Giga SD 카드를 사용하는게 좋을 듯하다.

noname05.png

그 다음 단계에서 사이트 운영자는 만약의 경우 8Giga SD 카드 사용자를 위하여 아쉽지만 default 로 설치되어 있는 Mathematica와 libreoffice를 지워 가용 메모리 1Giga를 확보하도록 권장하고 있다. 하지만 16Giga 이상이라면 이 부분을 그냥 패씽해도 무방하다.
여기까지가 Step #1 이다.
Step $2:install dependencies
Opencv 3.3 설치에 종속적인 여러 가지 라이브러리 패키지 설치를 포함한다. 그대로 따라하면 된다. 첫단계인 sudo apt-get update에서 약간의 시간이 소요되며 스텝 전체 소요 시간은 5분 이내 정도이다.

Step #3 Download the OpenCV source code
Opencv 3.3.0 버전을 설치하는데 명령 복사 시에 페이지 폭을 넘어가는 부분이 한 곳 있으므로 정확히 복사하여 옮겨 실행하도록 하자

Step #4 Python 2.7 or Python 3?

파이선 2.7과 3 버전을 다 설치한다. 이어서 사이트 운영자가 가상환경 설치에 대해 그 필요성을 설명한다. 가상환경 설정은 파이선과 Opencv와 특정한 몇 개의 라이브러리를 엮어 별도화 하는 의미이다. 윈도우즈에서 파이선을 사용하기 위해 아나콘다를 설치하는 하는 과정도 동일한 개념이다. 가상환경에 의해 짜여진 틀은 다른 여타의 프로젝트 설치 여부에 따라 영향을 받지 않고 굳건하게 유지된다.
과정을 그대로 따라하되 Numpy 라이브러리 모듈 설치에 시간이 11분 소요되는 것으로 되어 있다. 하지만 Opencv 설치 이전에 설치가 되어 있다면 시간을 더 단축할 수 도 있다.

Step #5 Compile and install OpenCV
가상환경 cv>에 들어가 설치 작업이 진행된다. 특히 cmake –D 작업이 사이트 운영자가 말하는 2분56초보다 많은 시간이 소요될 수 있음에 주의하자. 이 단계에서 파이선 2.7 과 파이선3 버전 설치를 스크롤해 모니터링 하는 방법을 설명해준다. 하지만 아무런 이상이 없이 끝나면 그냥 넘어가도 좋다.

cmake가 끝나면 라즈베리 파이가 가진 4개의 코어를 사용하여 OpenCV를 컴파일할 수 있도록 메모리의 swap space size 변경을 해야 하며 /etc/dphys-swapfile을 Open 하여 CONF_SWAPSIZE를 1024로 변경할 것을 주문한다.
그 명령은 nano 편집기를 사용하여 nano /etc/dphys-swapfile 을 실행시키면 편집할 파일이 나타난다. 화샇표 이동키로 움직여 가 수정 후 Control X키로 빠져 나오자. 컴파일 작업 중에는 1024를 유지하다가 모든 작업이 끝나면 설치가 완전히 끝난 단계에서 다시 100으로 반드시 돌려 놓아야 한다. 그렇지 않으면 사용자의 SD 카드 손상이 빠르게 일어날 수도 있음을 경고하고 있다.
만약 이 단계를 빼먹으면 Opencv 설치가 되지 않는다.

Swapspace를 stop시켰다가 다시 start시켜 활성화 시킨다음 Opencv 설치에서 가장 고비라고 볼 수 있는 1시간 30분짜리 make –j4 로 넘어가자. j4 라 함은 라즈베리 파이를 구성하는 4개의 멀티 코어를 죄다 사용한다는 의미이며 다라서 발열이 심해진다. 사용자의 보드가 라즈베리 파이3 B 모델이라면 반드시 히트싱크 즉 방열판이 설치되어 있어야 하고 실내 온도 섭씨 18도에 맞춰 에어컨 가동이 필수적이다. 경험에 비추어 보아 다른 명령들은 그대로 실행시키면 되지만 열발산 문제는 사용자 본인이 준비해야 한다.
말이 좋아 1시간 30분이지 필자의 경우 두 번 다 2시간을 넘겼다. 하지만 그렇게 걱정할 필요는 없다. 일단 시작하면 %가 출력되는데 40∼50%가 큰 고비이다. 이 단계에서 많은 경우 자신의 라즈베리가 먹통이 되었다고 판단할 수 있을지도 모르지만 라즈베리 파이 보드가 죽은체하고 있는지 여러 번 체크해 볼 필요가 있다. 특히 내려 받는 서버에서 반응이 없거나 늦어서 대기하는 경우가 비일비재한 듯하다. 그 다음은 90∼100%rk 고비다. 여기서도 만약 먹통이 되었다 해도 그리 실망할 필요는 없다. 만약 내려받는 서버와의 통신 상태가 나빠 끓어질 가능성이 99%며 만약 사용자가 발열관리를 잘못했을 가능성도 생각해봐야 한다.
만약 rebooting하여 재시작하려면 다시 가상환경 cv)까지 들어가서 cmake –j4를 재실행해야 한다. 이미 진행된 부분까지 복구는 금방 이루어지며 끊어졌던 부분에서 다시 작업이 시작된다.
이어서 make install과 ld config 작업을 수행하고여 Step #5를 종료한다.

Step #6: Finish installing OpenCV on your Pi
거의 마지막 단계이다. For Python 2.7: 과 For Python 3: 이 있는데 그대로 둘 다 작업해버리고 Step #6를 끝내다.

Step #7:Testing your OpenCV3 install

거진 다 끝났는데 이 부분에 수정할 요소가 하나 있다. Opencv 버전 확인 단계인데 python 명령을 사용하고 있다. python 명령을 그대로 사용하면 이는 python2.7을 의미한다. 따라서 Python 버전이 2.7로 확인되면 다시 python3 명령을 실행하여 확인하자. 사이트 운영자의 스크린샷 결과와 필자와의 차이점이 바로 이점이다.

noname06.png

이어서 불필요한 공간을 지우고 SWAPSPACE SIZE를 원래대로 100으로 되돌려 놓자. dl 작업이 생략되면 사용자 SD 카드 수명이 급격히 단축된다. 작업 후 swapfile 시스템을 stop, start 실행 시켜서 모든 작업을 완료한다.

Q&A를 따라 더 내려가면 사이트 운영자께서 자신을 모델로한 FACE Detection 결과와 자신의 저서를 소개하고 있으니 참고하기 바란다.
사이트 운영자의 저서와 상관 없이 라즈베리 파이 카메라 설치 및 사용버과 간단한 Face Detection 코드를 준비해 올릴 예정이다.
noname07.png

Coin Marketplace

STEEM 0.18
TRX 0.12
JST 0.027
BTC 65730.77
ETH 3446.83
USDT 1.00
SBD 2.32