前回のプログラムをいじってウェブカメラの映像からリアルタイムで顔検出をできるようにしました。

  1. import cv2

  2. video = cv2.VideoCapture(0)
  3.  
  4. while video.isOpened():
  5.     ret, frame = video.read()
  6.     if not ret: break

  7.     facerect = cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=6, minSize=(30, 30))
  8.      
  9.     rectangle_color = (0, 255, 0)
  10.  
  11.     if len(facerect) > 0:
  12.         for rect in facerect:
  13.             cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), rectangle_color, thickness=2)
  14.             cut_frame = frame[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]
  15.             cut_frame = cv2.resize(cut_frame,(rect[2]//20, rect[3]//20))
  16.             cut_frame = cv2.resize(cut_frame,(rect[2], rect[3]),cv2.INTER_NEAREST)
  17.             frame[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]=cut_frame
  18.  
  19.     cv2.imshow('frame', frame)
  20.  
  21.     key = cv2.waitKey(1) & 0xFF
  22.     if key == ord('q'): break
  23.  
  24. video.release()
  25. cv2.destroyAllWindows()
3行目でウェブカメラの映像を読み込んでいます。パソコンにカメラが一つだけついている場合は0番で問題ありませんが、複数ついている場合は番号を変えて目的のカメラに合わせてください。
6,7行目でフレームの読み込みと読み込めなかった場合の終了処理をしています。
9行目で顔の検出をしています。
13行目とそのあとのfor文で顔を認識したときのモザイク処理をしています。
21行目でフレームの描写をしています。
23,24行目でポップアップの終了処理をしています。
26,27行目でプログラムの終了処理をしています。


 また、今回も前回と同じフリー素材(https://www.pakutaso.com/)を使わせていただきました。