6-10 Haarcascade 특징추출(Feature Extraction) 원리와 cars.xml에 의한 OpenCV 주행차량 인식

in #kr6 years ago (edited)

noname01.png

Opencv에서 오브젝트를 인식하는 대표적인 방법중의 하나는 Haarcascade 라이브러리 모듈을 사용하는 방법이다. Haarcascade 라이브러리를 사용하여 인식할 수 있는 오브젝트는 사람의 정면 얼굴, 얼굴 안의 눈, 고양이 얼굴, 사람의 몸 각 부분들, 컬러 및 차량을 포함한다.

사람의 얼굴을 인식하기위한 Haarcascade 방식의 알고리듬은 머신 러닝의 컨볼류션(convolution neural network) 신경망 분석 기법과 유사하다고 한다. 얼굴을 인식하기 이한 haarvascade_frontalface_default.xml의 예를 들면 수천개의 양화와 음화 이미지를 학습하여 만들어진다. 음화는 과거에 카메라 촬영 후 현상 작업을 통하여 얻어지는 결과가 네가티브 즉 음화이다. 위 그림에서처럼 이미 얼굴이 인식되었다고 하면 눈의 명암적 특징을 컨볼루션 Neural Network 머신 러닝에 의해서 찾아내는 것도 가능할 것이다. 사람이 얼굴 및 신체 각부위의 특징을 찾아내듯이 수많은 자동차의 특징도 유사한 방법으로 찾아낼 수 있을 것이며 cars.xml 라이브러리가 바로 haarcascade 라이브러리가 제공하는 자동차 인식 라이브러리이다.

OpenCV 명령인 cv2.VideoCapture() 명령을 실행하여 주행 차량 영상 분석을 위한 avi 캡츄어 파일을 설정하자. OpenCV haarcascade 파일 중에서 cars.xml 을 사용하여 주행 중인 자동차 즉 car를 인식하도록 한다. 인터넷 사이트에서 cars.xml을 찾으려니 잘 보이질 않아 예전에 보관했던 파일을 블로그에 올려두었다. 다른 파일들의 명칭은 죄다 haarcascade 로 시작하나 유독 차량인식용은 단순히 cars.xml 임에 유의하자.

우선 avi 비데오 파일명을 video_src 변수에 저장한다. 필요하다면 폴더를 만들어 넣고 그 폴더명에 “/” 를 추가한 후 비데오 파일명을 적어도 된다. 그 다음 OpencvCV 명령인 cv2.CascadeClassifier() 명령을 실행시키자.

noname02.png

while True: 문은 라즈베리 파이 파이선 코딩에서 사용하는 아두이노에서 loop 사용법에 해당한다. 즉 마이크로 콘트롤러에서 전원을 제거할때까지 코드가 실행되듯 코드를 강제로 중지 시킬 때까지 실행된다.

비데오 파일로부터 이미지를 캡츄어 즉 cap.read() 하여 변수명 img를 주어 설정한 후 cv2.cvtColor() 명령을 사용하여 그레이(gray) 이미지로 변환한다. 이 과정은 안면 인식이든 고양이 얼굴 인식이든 공통이다. 즉 흑백처리한 이미지를 사용하여 머신 러닝을 진행한다고 보면 된다. 그 이하 내용도 안면인식과 그다지 다를 바 없다.

다음 유튜브의 영상 처리 짤을 살펴보면 그레이 영상을 대상으로 인식된 차량에 대해 rectangle 명령이 잘 작동함을 알 수 있다.

이렇게 하여 비데오 영상을 대상으로 차량인식이 가능해 진다. 하지만 인식이 되었다고 해서 당장 자율주행 RC카를 만들 수 있을 정도라는 의미는 전혀 아니다. 아직은 건너야 할 루비콘 강이 너무나 멀게 느껴진다.

블로그 독자들의 편의를 위해 다음사이트에 있는 필자의 블로그 주소에 차량인식 파이선 코드 와 cars.xml 파일과 video1.avi, video2.avi 영상 파일들을 올려 두었으니 편의를 위해서 참조하기 바란다. 아울러 스팀잇에서 url을 클릭할 경우 막혀 있는 듯하므로 별도로 인터넷을 열어서 url 주소로 열어 보기 바란다.

http://blog.daum.net/ejleep1/27

Sort:  

오 자율주행 RC카를 만들려고 하시는군요. ㅎㅎㅎ

물론 실차에서는 레이저를 사용하는 라이다를 쓴다지만 어차피 컴퓨터 비전에 의한 오브젝트 인식 해석 기술과 코딩은 마찬가지 아니겠어요?

ㅋㅋㅋㅋ 아, 라이다가 레이저 기술이군요. ㅋㅋㅋ 이런. 전에도 관심 생겼던 기술인데. 생각해보니깐 배웠던 게 다 연결되는군요. ㅋㅋㅋ. 맞어요. 비슷한데 ^^ 기술이 조금 더 세분화되어 있는 것 같아요. 자율주행차 애들은 여러가지 기술을 나눠놨어요. 근데 기본을 구성하는 기술이나 코딩은 비슷할 것 같습니다.

라이다로 3차원 데이타를 받아들이게 되면 문제는 데이타 양이 어마어마하게 많아지게 되는데 이게 빅데이타는 아닌 것 같고 어쨌든 머신러닝이 풀어나가야 할 기술이 아닐까 합니다.

3차원 데이터라 ㅎㅎ 안 다뤄봐서 어느 정돈지 모르겠어요.
빅데이터는 수집 => 저장 => 분석 => 시각화 단계로 처리됩니다. AI는 따져보면 분석단계 기술인데 연합가능할 것 같네요. 빅데이터 아저씨들 분석툴도 따로 있는걸로 압니다.

빅데이타 분석, 머신 러닝, AI 들이 제각각 독특한 응용분야가 있을 수 있다는 생각이 드는군요.

예. ㅎㅎ 좀더 배워서 재밌는걸 만들고싶습니다. ㅎㅎ

Coin Marketplace

STEEM 0.28
TRX 0.12
JST 0.032
BTC 62799.08
ETH 3027.63
USDT 1.00
SBD 3.95