リアルタイムのカメラ映像の顔にモザイクを付けたいことはありませんか?
あまりないですか?笑
この記事では、カメラ映像に対してリアルタイムに顔を認識し、モザイクを付けるプログラムをご紹介します。
この記事のスクリプトを実行すると、動画の内容が実行できます。
なお、紹介したサンプルスクリプトについて
「コピペしたのに動かない」「mac版も教えて」「ラズパイカメラでも動かしたい」
ということがあれば、追記します。
技術の概要、環境構築
使用している技術の概要、環境構築などは、こちらの記事で解説しています。
この記事では省略していますので、初めてご覧になる方はご覧ください。
サンプルスクリプト
それでは、上の動画を実行するためのスクリプトを紹介します。
cascade_fileの説明は上記の記事で解説しているので省略しています。
import cv2
def mosaic(img, rect, size):
(x, y, x1, y1) = rect
w = x1-x
h = y1-y
i_rect = img[y:y1, x:x1]
i_small = cv2.resize(i_rect,(size,size))
i_mos = cv2.resize(i_small, (w,h), interpolation=cv2.INTER_AREA)
img2=img.copy()
img2[y:y1,x:x1] = i_mos
return img2
cascade_file = 'haarcascade_frontalface_alt.xml'
face_cascade = cv2.CascadeClassifier(cascade_file)
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_list = face_cascade.detectMultiScale(gray, minSize=(150, 150))
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for (x, y, w, h) in face_list:
img = mosaic(img, (x, y, x + w, y + h), 10)
cv2.imshow('video image', img)
key = cv2.waitKey(10)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
たったこれだけで、顔を認識してモザイクをつけるカメラ映像の取得ができます。
なお、実行してもうまく顔が認識されない場合のよくある事例を紹介します。
- cascade_fileのxmlファイルがない
- または保存先が違う
- ファイル名に間違いがある
- detectMultiScaleの引数の値を変えてみる
(minSizeを150,150→100,100にする等)
他にも色々とあるので、上で解決できない場合はコメントください。
改めて、実行結果の動画はこちら。(終了する場合はESCキーを押してください)
なお、今回の記事ではスクリプトの詳細は割愛します。
興味がある方は、コメントやフォームでお問い合わせください。
このような情報発信をTwitterでも行っています。
宜しければフォローをお願いします。
まとめ
今回はリアルタイムのカメラ映像で顔にモザイクを付けるスクリプトを紹介しました。
上の解説記事もぜひご覧ください。
もし、スクリプトの説明を詳しく聞きたいという方がいれば、コメントかフォームでお問い合わせください。
また、「上手くいかない」「別のエラーが出た」などがありましたら、フォームやコメントでお知らせください。
できる限りフォローします。
それでは、ステキなPythonライフを!
Pythonの機械学習について詳しく知りたいという初学者には、こちらの書籍がおススメです。