リアルタイムで「顔」をぼかす!実践的なチュートリアル

リアルタイムで「顔」をぼかす!実践的なチュートリアル

みなさんこんにちは。今日は実践的なチュートリアルを皆さんと共有したいと思います。

いつものように、まずは結果を見てみましょう(目標があることを確認してください)。

顔認識技術の発達により、私たちの日常生活は大きく便利になりましたが、プライバシーの問題もあります。そして、犯罪者が違法行為を行うために利用される可能性もあります。

そのため、多くのビデオブロガーは通行人の画像をぼかします。しかし、手動でコーディングするのは非常に面倒な作業です。1 フレームの画像であれば比較的簡単ですが、ビデオのフレーム レートが 25FPS、つまり 1 秒間に 25 フレームの画像があると仮定すると、数分間のビデオの場合、作業量も非常に膨大になります。

そこで、プログラムを使って、このような操作を自動で実行してみます!

Opencv、Mediapipe、Python を使用して、顔をリアルタイムでぼかすことができます。

これは 2 つのステップで実行できます。

  • コーディングする前に、まず顔の位置を決める
  • 顔を取り出してぼかしを入れ、処理した顔をビデオフレームに戻します(ビデオ処理も同様です)

(宿題: 自分以外の人をコーディングするにはどうすればいいですか?)

1.コーディングする前に、まず顔の位置を決める

いつものように、まず環境を設定し、必要なライブラリ(OpenCVとMediaPipe)をインストールします。

 pip install opencv-python pip install mediapipe

MediaPipe ライブラリは、顔のキーポイント検出用のモジュールを提供します。

詳細については、https://google.github.io/mediapipe/solutions/face_mesh.html を参照してください。

もちろん、顔のキーポイント検出用のコードもプロジェクト コードに提供されています。

「facial_landmarks.py」のファイル:

顔キーポイント検出の効果図

コードのこの部分を一緒に書いてみましょう:

  • まず、顔のキーポイント検出に必要なライブラリとモジュールをインポートします。
 import cv2 import mediapipe as mp import numpy as np from facial_landmarks import FaceLandmarks # Load face landmarks fl = FaceLandmarks()
  • 次に、検出された顔のキーポイントのうち、キーポイントの最外側の円を使用して、多角形(顔の輪郭)を描画します。ここでは、opencv の convxhull() 関数を使用して次のことを実現できます。
 # 1. Face landmarks detection landmarks = fl.get_facial_landmarks(frame) convexhull = cv2.convexHull(landmarks)

描画後の結果は次のとおりです。

次に、上記で抽出した顔のキーポイント座標を使用してマスクを作成し、ビデオフレーム内の関心領域を抽出します。

 # 2. Face blurrying mask = np.zeros((height, width), np.uint8) # cv2.polylines(mask, [convexhull], True, 255, 3) cv2.fillConvexPoly(mask, convexhull, 255)

結果は以下のようになります。

このマスクを取得した後、顔をさらにぼかす(コード化する)ことができます。

ぼかし操作には、OpenCV の cv2.blur() 関数を使用します。

 # Extract the face frame_copy = cv2.blur(frame_copy, (27, 27)) face_extracted = cv2.bitwise_and(frame_copy, frame_copy, mask=mask)

結果:

現時点では、顔のコーディング操作は実現しています。残っているのは、顔以外の領域を抽出して最終結果に結合することです。

顔の外側の領域(背景)を抽出するには、上記のマスクを反転するだけです。

背景抽出:

 # Extract background background_mask = cv2.bitwise_not(mask) background = cv2.bitwise_and(frame, frame, mask=background_mask)

画像の詳細を見ると、背景は完全に見えていますが、顔の部分が黒くなっていることがわかります。これは、次のステップで顔にぼかしを適用する空白領域です。

最後のステップは、上記の 2 つのステップで取得した顔マスクと背景を追加することです。ここでは、目的を達成するために cv2.add() を使用します。

 # Final result result = cv2.add(background, face_extracted)

結果:

これは画像のフレームの処理です。

2. 顔を取り出してぼかし、処理した顔をビデオフレームに戻します。

上記の操作はすべて、画像の 1 つのフレームに対して処理されます。ビデオを出力する必要がある場合も、原理はまったく同じです。ビデオを一連の画像に分割するだけです。

いくつか小さな変更を加えます:

(1)入力ファイル(画像→動画)

 cap = cv2.VideoCapture("person_walking.mp4")

(2)入力ビデオフレームに対してループトラバーサルを実行する。

 while True: ret, frame = cap.read() frame = cv2.resize(frame, None, fx=0.5, fy=0.5) frame_copy = frame.copy() height, width, _ = frame.shape ...

<<:  AI分野に新たな学者が加わりました!清華大学の胡世民が選出され、「Jitu」フレームワークは彼の研究室から生まれた

>>:  Adobe がインドのスタートアップ Rephrase.ai を買収、生成 AI 分野で初の買収となる

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

EUが「インダストリー5.0」の時代を発表

[[415365]]画像ソース: https://pixabay.com/images/id-358...

...

頻繁にミスを犯す自動運転車は「ドメイン適応」が欠如している可能性がある

6月に開催されるCVPR 2019は、マシンビジョン分野で最も重要な学術会議です。選考結果が発表され...

...

よく使われる6つのクラスタリング評価指標

クラスタリング結果の妥当性を評価すること、つまりクラスタリング評価または検証は、クラスタリング アプ...

ゲイツは間違っていた!これはロボットが仕事を奪うことに対処するための最善の解決策です

落ち着いてください。ロボットや人工知能 (AI) システムが人間の労働力を置き換えるにはまだ程遠いの...

報告書は、中国が人工知能の特許出願数で世界一であると指摘している。

最近、2020年中国人工知能産業年次大会が蘇州で開催されました。大会で発表された「中国人工知能発展報...

ラスベガスの「チャイナナイト」:中国の人工知能が外国人に人生への疑問を抱かせ始める!

CES は世界最大かつ最も影響力のある消費者向け電子機器展示会です。米国時間1月8日、ラスベガスで...

AI時代に医療データの品質が重要な理由

効果的な医療データ分析においては、データの品質は主観的なものになります。データから得られる情報の正確...

調査:CIOはAIの実験や投資に依然として慎重

機械学習の実験と成果の達成に関しては、持っている人と持っていない人の間の格差が拡大しています。先週ニ...

人工知能の時代にはどんな教師が必要なのでしょうか?

「私の仕事はロボットに置き換えられるのでしょうか?」人工知能の急速な発展により、ますます多くの人々...

ChatGPTは個人のカスタマイズをサポートします!長いプロンプトに別れを告げ、まずは自己紹介をしましょう

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

OpenAIとAppleの分岐点、アルトマンとジョブズが排除された日

何の警告もなく、OpenAIのCEOサム・アルトマンは解雇された。一つの石が千の波紋を呼ぶ。ウルトラ...

TensorFlow 2.0 中国語オープンソースブックプロジェクト: 1 日あたり 700 件の「いいね!」を獲得、GitHub のホットリストに

TensorFlow2.0の正式版がリリースされてからしばらく経ちますが、それに関連する体系的なチュ...

Google: LLM は推論エラーを見つけることはできないが、修正することはできる

今年、AI分野では大規模言語モデル(LLM)が注目を浴びています。 LLM はさまざまな自然言語処理...