AI関連技術

【機械学習】リアルタイムのカメラ映像で顔にモザイクを付けるスクリプト

【機械学習】リアルタイムのカメラ映像で顔にモザイクを付けるスクリプト

リアルタイムのカメラ映像の顔にモザイクを付けたいことはありませんか?

あまりないですか?笑

この記事では、カメラ映像に対してリアルタイムに顔を認識し、モザイクを付けるプログラムをご紹介します。

この記事のスクリプトを実行すると、動画の内容が実行できます。

なお、紹介したサンプルスクリプトについて

「コピペしたのに動かない」「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の機械学習について詳しく知りたいという初学者には、こちらの書籍がおススメです。

ABOUT ME
papa3
某教育機関で現役の講師をしながら、ブログとYouTubeでプログラミングの情報を発信しています。個人でもウェブアプリケーション開発と運営をしながら本業収入<副業を目指しています!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です