728x90

여러개의 웹캠을 사용해서 얼굴 인식을 하기 위해서는 여러개의 웹캠을 한 화면에 출력하는 코드는 밑의 주소를 참고하면 됩니다.

twobeach.tistory.com/category/OpenCV/%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC

 

'OpenCV/영상처리' 카테고리의 글 목록

yolo,c언어,라즈베리파이,소켓 등등 개발자 툴 다루는 블로그

twobeach.tistory.com

 

먼저 훈련 되어진 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

 

opencv/opencv

Open Source Computer Vision Library. Contribute to opencv/opencv development by creating an account on GitHub.

github.com

위의 코드들로 사람 감지 cctv와 같은 다양한 프로젝트도 가능할 것같습니다.

728x90

+ Recent posts