728x90
여러개의 웹캠을 사용해서 얼굴 인식을 하기 위해서는 여러개의 웹캠을 한 화면에 출력하는 코드는 밑의 주소를 참고하면 됩니다.
twobeach.tistory.com/category/OpenCV/%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC
먼저 훈련 되어진 weight(가중치) 파일을 불러와서 얼굴 인식을 하는 코드입니다.
import cv2
import numpy as np
import cvlib as cv
import time
from matplotlib import pyplot as plt
from cvlib.object_detection import draw_bbox
frame0 = cv2.VideoCapture(0)
frame1 = cv2.VideoCapture(1)
def concat_tile(im_list_2d):
return cv2.vconcat([cv2.hconcat(im_list_h) for im_list_h in im_list_2d])
prevTime = 0 # 이전 시간 저장
while 1:
ret0, img0 = frame0.read()
ret1, img00 = frame1.read()
img1 = cv2.resize(img0,(360,240))
img2 = cv2.resize(img00,(360,240))
addh = concat_tile([img1, img2])
curTime = time.time()
sec = curTime - prevTime
prevTime = curTime
fps = 1/(sec)
print("FPS : {0} " . format(fps))
str1 = "FPS : %0.1F" % fps
cv2.putText(addh, str1, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255))
bbox, label, conf = cv.detect_common_objects(addh)
print(bbox, label, conf)
out = draw_bbox(addh, bbox, label, conf, write_conf=True)
cv2.imshow('multicam',out)
k = cv2.waitKey(1) & 0xff
if k == 27:
break
frame0.release()
frame1.release()
cv2.destroyAllWindows()
먼저 훈련 된 coco dataset이므로 사람이외의 것들도 훈련되어있어서 다른 물체들도 detecting 됩니다.
밑의 코드는 opencv haarcascade의 xml파일을 이용해서 사람을 detecting하는 코드입니다.
import cv2
import numpy as np
import time
from matplotlib import pyplot as plt
xml = 'opencv/data/haarcascades_cuda/haarcascade_frontalface_alt.xml'
face_cascade = cv2.CascadeClassifier(xml)
frame0 = cv2.VideoCapture(0)
frame1 = cv2.VideoCapture(1)
def concat_tile(im_list_2d):
return cv2.vconcat([cv2.hconcat(im_list_h) for im_list_h in im_list_2d])
prevTime = 0 # 이전 시간 저장
while 1:
ret0, img0 = frame0.read()
ret1, img00 = frame1.read()
img1 = cv2.resize(img0,(360,240))
img2 = cv2.resize(img00,(360,240))
#addh = cv2.hconcat([img1,img2])
addh = concat_tile([img1, img2])
curTime = time.time()
sec = curTime - prevTime
prevTime = curTime
fps = 1/(sec)
print("FPS : {0} " . format(fps))
str1 = "FPS : %0.1F" % fps
cv2.putText(addh, str1, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255))
gray = cv2.cvtColor(addh, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.05, 5)
print("Number of faces detected: " + str(len(faces)))
if len(faces):
for (x,y,w,h) in faces:
cv2.rectangle(addh,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('multicam',addh)
k = cv2.waitKey(1) & 0xff
if k == 27:
break
frame0.release()
frame1.release()
cv2.destroyAllWindows()
위의 코드는 사람의 얼굴을 인식해주고, 프레임 수는 캠화면이 많을수록 감소됩니다. xml을 다운받을 수 있는 경로는 다음과 같습니다.
github.com/opencv/opencv/tree/master/data/haarcascades
위의 코드들로 사람 감지 cctv와 같은 다양한 프로젝트도 가능할 것같습니다.
728x90
'코딩 > OpenCV - 영상처리' 카테고리의 다른 글
[opencv, ubuntu] 여러개의 웹캠을 이용하여 한 화면에 출력 (1) | 2020.10.13 |
---|