자율주행

Haarcascades 라이브러리와 cars.xml 차량 인식 IV

coding art 2022. 9. 10. 17:38
728x90

 

 

Haarcascades 라이브러리

자율주행을 연구 시작을 위해서는 적어도 광법위하게 연구가 진행되어 온 Image Classification 영역을 섭렵할 필요도 있겠지만 상당한 노력이 필요하므로 그 대안으로서 쉽게 이해하고 응용해 볼 수 있는 Haarcascades 라이브러리 사용에 관심을 가져 볼 만하다.

 

OpenCV에서 객체를 인식하는 잘 알려진 방법 중의 하나는 Haarcascades 오픈소스 라이브러리 모듈을 사용하는 방법이다. Haarcascades 라이브러리를 사용하여 인식할 수 있는 객체들은 사람의 정면 얼굴, 얼굴 안의 눈, 고양이 얼굴, 사람의 몸 각 부분들, 컬러 및 차량을 포함한다. 

 

 

 

일종의 학습결과를 라이브러리로 모듈화시킨 Haarcascades 라이브러리의 원리는

예를 들어 CNN의 feature map 수준에서 관찰될 수도 있을 법한 이미지들의 마이크로적인 특징(feature)을 단계별로 조사하여 인식시킨다.

 

사람 얼굴 인식을 위한 haarcascade_frontalface_default.xml 은 수천 장의 사진으로부터 양화와 음화 이미지를 학습하여 만들어진다. 음화란 카메라 촬영 후 현상 작업을 통하여 얻어지는 결과로서 네가티브 필름을 뜻한다.

 

사람의 얼굴 및 신체 각 부위의 특징을 찾아내듯이 수많은 자동차의 특징도 유사한 방법으로 찾아낼 수 있을 것이며 cars.xml 라이브러리가 바로 Haarcascades 라이브러리가 제공하는 자동차 인식 라이브러리이다. 다른 라이브러리 모듈들의 명칭은 죄다 haarcascade 로 시작하나 유독 차량인식은 단순히 cars.xml 임에 유의하자.

 

cars.xml 차량 인식 IV

 

이번 장에서는 오픈소스인 cars.xml 을 사용하여 동영상 파일 video1.avi 에서 차량을 인식(인지) 해보자. 두 개의 파일들 cars.xml 과 video1.avi 을 바탕화면의 개인사용자 폴더에 미리 넣어 두자. 문자열 변수 cascade_src를 cars.xml 로, 뱐수 video_src를 video1.avi 로 두자.

 

cv2.VideoCapture 명령에 동령상 파일명 video_src를 입력하자. 그다음 OpencvCV 명령인 cv2.CascadeClassifier() 명령을 실행시키자.

 

 

while True: 무한 루프 제어문을 사용해 공영상 파일 frame 들을 읽어 들여 흑백으로 변환 후 detectMultiScale 명령을 적용하자.

 

 

OpenCV에서 Haarcascades 라이브러리를 사용하여 객체를 탐지하기 위한 명령 detectMultiScale 사용법에 대해서 알아보자.

     detectMultiScale( image, scalFactor, minNeighbors, minSize, maxSize)

scaleFactor: 이미지 크기 조절, 객체를 찾기 위한 학습과정 중에 입력 이미지를 알고리듬이 탐지가 가능하도록 재 조절한다.

minNeighbors: 탐지하려는 객체 주위의 객체 수, 이 숫자가 클수록 고퀄리티가 가능하나 탐지되는 객체수는 감소, 정수, 3 ~ 6 추천 값

minSize: 정수, 탐지하려는 객체의 크기가 이보다 작으면 무시된다.

maxSize: 정수, 탐지하려는 객체의 크기가 이보다 크면 무시된다.

 

리스트 데이터 형태로 cars 에 저장된 탐지된 객체들을 직사각형(rectangle)으로 둘러쌓도록 작도하자. (x,y)와 (x+w, y+h) 는 직사각형의 대각선 꼭지점을 나타내며, RGB 값 (0,0,255)는 빨간색을, 2 는 선의 굵기를 나타낸다.

 

cv2.waitKey(33) 은 33 milisecond 기다렸다 소문자 ‘q’를 키보드 입력하는 이벤트 발생 시 무한 루프가 break 즉 멈추게 되, 마지막으로 윈도우즈 바탕화면에서 영상화면을 삭제한다.

 

 
 다음은 출력된 동영상을 캡춰한 결과이다.
 
 

블로그에 첨부된 Vehicle_Detection.ipynb 파일을 다운받아 실행해 보자.