6-8 OpenCV 고양이(Catface) 찾기
OpenCV를 haarcascade를 사용하여 고양이 얼굴을 인식하여 찾아보자. 일반적으로 동물의 얼굴 인식이 사람보다 어렵다고 알려져 있다. 종류도 많을뿐 더러 특히 털가죽으로 모습을 포장하고 있어 그 진면목을 알아내기 힘들 수도 있을 것이다.
이 작업을 위해 필요한 Haarcascade 파일은 haarcascade_frontalcatface.xml 파일이다.
참고로 Haar cascade 시스템 파일들은 https://github.com/opencv/opencv/ 에서 다운 받아 압축을 풀면 opencv-master 디렉토리가 생성되며 그 내부의 데이터(data) 폴더 내부의 haarcascade 폴더 속에 여러가지 대상들에 대한 xml 파일들이 들어 있다.
여기서는 블로그 독자들의 편의를 위해 다음사이트에 있는 필자의 블로그 주소에 고양이 얼굴 찾기 파이선 코드 face_detect_catface_01.py 와 haarcascade_frontalcatface.xml파일과 cats.jpg 사진 파일을 올려 두었으니 참조하기 바란다. 아울러 스팀잇에서 url을 클릭할 경우 막혀 있는 듯하므로 별도로 인터넷을 열어서 url 주소로 열어 보기 바란다.
http://blog.daum.net/ejleep1/26
이미 사용했던 사람 얼굴 찾기 코드에서 몇 줄만 수정하는 수고를 하면 된다.
haarcascade_frontalface_default.xml 과 haarcascade_eye.xml을 삭제하고 대신에 haarcascade_frontalcatface.xml을 사용하는 Classifier 명령으로 대체하도록 하자.
중간쯤에 cv2.imread()에서 사진 파일 명을 cats.jpg 로 바꾸어주도록 한다. 아울러 haarcascade_frontalcatface.xml 파일과 cats.jpg 파일을 실행코드와 같은 폴더 내에 두도록 한다.
그빆에 detectMultiscale에서 scaleFactor값을 1.1∼1.3 범위내에서, minNeighbors값을 1 ∼3 범위 내에서 조절해 가면서 결과에 미치는 영향을 관찰해 보도록 한다,
다음 사진에서처럼 3마리의 고양이가 검출되었다.
한편 2017년에 Jessie 버전을 사용하여 코드를 실행했을 때 minNeigbors를 2로 설정하여 커버사진과 같이 최대 4마리가 검출되었으며 고양이 발을 1개 잘못 인식하였는데 지금 OpenCV3.3 버전을 설치하고 아무리 해도 재현이 되지를 않는다. 파라메터 설정에 민감하므로 사용 경험이 중요한듯하다.
이와 같이 특정한 대상에 대하여 이미 충분히 학습이 완료된 상태에서 임의의 대상물들 속에 숨어 있는 특정 대상을 찾아내는 Haarcascade Classifier가 2001년에 발표된지 무려 17년이 흘렀지만 별로 그다지 진전이 없는 것 같다. 지금 현재도 4차산업혁명이니 인공지능이니 말만 무성하고 실제 출시된 제품이란게 고작 아마존 AI 스피커 또는 구글 AI 카메라 나부랭이 정도인걸 보면 증말 이 분야에서 연구하는 회사나 사람을 찾아보기 힘든 무인지경인 듯하다.
다음번에는 정적인 사진이 아니라 비데오 영상을 사용하여 자동차를 인식해 내는 코드를 다루어 보고자 하며 아울러 얼굴인식에서도 일단 사람이 인식되면 코드에서 자동으로 LED ON을 시키든지 아니면 스피커에서 반응을 할 수 있게 GPIO 인터페이스가 가능하도록 약간의 배선과 코딩을 추가해 볼 예정이다.
헐. 고양이 친구 두녀석은 숨바꼭질 성공이네요. ㅎㅎ
한녀석은 frontalface에서 각도가 너무 벗어나 있고 또 한 녀석은 되다 안되다 그러네요!
여러가지 동물들이 섞여 있으면 일일이 분류해서 찾아내기 만만치 않을듯 합니다.
전에 써주신 라이브러리 코드가 openCV 폴더 안에 있더라고요. 그거 보고 분석하면 업글 가능하지 않을까요? ㅎㅎ
Haarcascade 라이브러리는 그대로 가져다 쓰시면 되나 실행코드들은 OS버전, Python3버전, OpenCV3.3 버전 문제로 에러가 나올 가능성이 농후 합니다.