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

codingart(66)
Published in
#kr
Words
358
Reading
2 min
Listen
Play
8y

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

6-10 Haarcascade 특징추출(Feature Extraction) 원리와 cars.xml에 의한 OpenCV 주... | Ecency