image classification에 관심이 큰 초보자 입장에서 아주 간단하게 OpenCV의 Haar cascade 라이브러리를 사용하여 사람과 고양이의 2종을 포함한 이미지를 classification 해 보도록 하자. 물론 Haar cascade 라이브러리는 object 하나하나씩을 여러개 학습시켜 만든 라이브러리임에도 불구하고 되기는 된다. 별 것 아닌 코드 같겠지만 image classification 을 꽤 오래 해오면서 느꼈던 중요한 의문중의 하나였기에 지금까지 쌓인 일단의 의문이 명쾌하게 해소되었다.
한가지 주의할 점은 OpenCV에서 2종류의 classifier 를 함께 사용하여 최종적으로 image에 중첩하여 bounding box를 출력하는 아래 코드는 그다지 정상적이 아니므로 출력은 얻어지나 코드 멈춤이 잘 안됨에 유의하자.
이미지 "mandcat.jpg" 다운로드 하시길.
#catface_detect.py
import cv2
import numpy as np
import sys
import time
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
catfaceCascade = cv2.CascadeClassifier("haarcascade_frontalcatface.xml")
camera = cv2.VideoCapture('mancat.jpg')
#camera = cv2.VideoCapture(0)
time.sleep(0.2)
while True:
# and occupied/unoccupied text
ret, image = camera.read()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
graycopy = gray
#faces = catfaceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=0 )
cats = catfaceCascade.detectMultiScale(gray,scaleFactor=1.1, minSize=(60,60) )
# Draw a circle around the faces
for (x, y, w, h) in cats:
cv2.circle(image,(int(x+w/2),int(y+h/2)),int((w+h)/3),(255,255,255),3)
#cv2.rectangle(image,(x, y), (x+w, y+h),(255,255,255),3)
faces = faceCascade.detectMultiScale(graycopy,scaleFactor=1.1, minNeighbors=5 )
# Draw a circle around the faces
for (x, y, w, h) in faces:
#cv2.circle(image,(int(x+w/2),int(y+h/2)),int((w+h)/3),(255,255,255),3)
cv2.rectangle(image,(x, y), (x+w, y+h),(255,255,255),3)
cv2.imshow("Frame", image)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cv2.destroyAllWindows()
코드 실행이 제대로 될때까지 수정할 예정임.
Under Construction ....
'Image Classification' 카테고리의 다른 글
Remake:PyTorch Transfer Learning 예제 (0) | 2022.03.12 |
---|---|
윈도우즈10 아나콘다 YoLoV3 초간단 설치 (0) | 2022.01.24 |
윈도우즈10 아나콘다에 YoLoV3 를 설치하자. (0) | 2022.01.21 |
컴퓨팅 부하 경감을 위한 SeparableConv2D (0) | 2022.01.20 |
PyTorch VGG16 모델 활용 Feature Map 관찰기법 (0) | 2022.01.15 |