前回のプログラムをいじってウェブカメラの映像からリアルタイムで顔検出をできるようにしました。
- import cv2
- video = cv2.VideoCapture(0)
- while video.isOpened():
- ret, frame = video.read()
- if not ret: break
- facerect = cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=6, minSize=(30, 30))
- rectangle_color = (0, 255, 0)
- if len(facerect) > 0:
- for rect in facerect:
- cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), rectangle_color, thickness=2)
- cut_frame = frame[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]
- cut_frame = cv2.resize(cut_frame,(rect[2]//20, rect[3]//20))
- cut_frame = cv2.resize(cut_frame,(rect[2], rect[3]),cv2.INTER_NEAREST)
- frame[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]=cut_frame
- cv2.imshow('frame', frame)
- key = cv2.waitKey(1) & 0xFF
- if key == ord('q'): break
- video.release()
- cv2.destroyAllWindows()
3行目でウェブカメラの映像を読み込んでいます。パソコンにカメラが一つだけついている場合は0番で問題ありませんが、複数ついている場合は番号を変えて目的のカメラに合わせてください。
6,7行目でフレームの読み込みと読み込めなかった場合の終了処理をしています。
9行目で顔の検出をしています。
13行目とそのあとのfor文で顔を認識したときのモザイク処理をしています。
21行目でフレームの描写をしています。
23,24行目でポップアップの終了処理をしています。
26,27行目でプログラムの終了処理をしています。
また、今回も前回と同じフリー素材(https://www.pakutaso.com/)を使わせていただきました。
6,7行目でフレームの読み込みと読み込めなかった場合の終了処理をしています。
9行目で顔の検出をしています。
13行目とそのあとのfor文で顔を認識したときのモザイク処理をしています。
21行目でフレームの描写をしています。
23,24行目でポップアップの終了処理をしています。
26,27行目でプログラムの終了処理をしています。
ちさと@chisao_62OpenCVで遊んでいる https://t.co/Wpx8g0Lac3
2020/10/15 21:27:54
また、今回も前回と同じフリー素材(https://www.pakutaso.com/)を使わせていただきました。