ホームページ > 記事 > テクノロジー周辺機器 > Python を使用してリアルタイムで顔をぼかす方法
翻訳者 | Bugatti
レビュー | Chonglou
ビデオや画像で顔を隠すなど、さまざまな理由で顔のぼかしを使用することがあります。プライバシーとセキュリティへの懸念が主な理由です。ほとんどのビデオ共有プラットフォームとビデオ編集ソフトウェアには、顔ぼかし機能が組み込まれています。
Python、OpenCV、NumPy ライブラリを使用して、独自の顔ぼかしプログラムを最初から作成できます。
この記事の学習を完了するには、Python の基本的な知識とその使用方法の基本を理解している必要があります。 NumPy ライブラリの。
使い慣れた Python IDE を開きます。仮想環境を作成して必要なライブラリをインストールします。新しい Python ファイルを作成します。ターミナルに移動し、次のコマンドを実行して必要なライブラリをインストールします。ライブラリをスペース区切りのリストとして渡します。
pip install OpenCV-python NumPy
OpenCV を使用してビデオ入力を取得および前処理し、NumPy を使用して配列を処理します。
ライブラリをインストールしたら、IDE がプロジェクト バックボーンを更新するまで待ちます。更新が完了し、環境の準備ができたら、コーディングを開始できます。
注: 完全なソース コードは、GitHub リポジトリ (https://github.com/makeuseofcode/Face-Blurring) にあります。
まず、OpenCV ライブラリと NumPy ライブラリをインポートします。これにより、サポートされている機能を呼び出して使用できるようになります。 OpenCV-Python を cv2 としてインポートします。
import cv2 import numpy as np
OpenCV-python モジュールは、OpenCV コミュニティによって確立された規則として cv2 という名前を使用します。 OpenCV-Python は、C で書かれた OpenCV ライブラリの Python ラッパーです。
変数を作成し、VideoCapture オブジェクトを初期化します。コンピュータのメインカメラを入力ソースとして使用する場合は、パラメータとして 0 を渡す必要があります。コンピュータに接続された外部カメラを使用するには、1 を渡します。事前に記録されたビデオで顔のぼかしを実行するには、代わりにビデオのパスを渡します。リモート カメラを使用するには、IP アドレスとポート番号を含むカメラの URL を渡します。
cap = cv2.VideoCapture(0)
入力に対して顔のぼかしを実行するには、次の 3 つの関数が必要です。
入力ビデオの各フレームを入力として受け取る入力前処理関数を作成します。顔を検出するために使用する CascadeClassifier クラスを初期化します。フレームのサイズを 640*640 ピクセルに変更します。サイズ変更されたフレームをグレースケールに変換して処理し、最後に入力内の顔を検出して四角形にバインドします。
def image_preprocess(frame): face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') resized_image = cv2.resize(frame, (640, 640)) gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY) face_rects = face_detector.detectMultiScale( gray_image, 1.04, 5, minSize=(20, 20)) return resized_image, face_rects
この関数は、サイズ変更された画像と、検出された顔を表す四角形のリストを含むタプルを返します。
入力された顔をぼかすためのぼかし関数を作成します。この関数は、前処理関数によって返された、サイズ変更されたフレームと顔を囲む四角形のリストを入力として受け取ります。面の長方形をループします。各長方形の中心とぼかし円の半径を計算します。すべてのピクセルを 0 に初期化して、サイズ変更されたフレームと同じ寸法の黒いイメージを作成します。計算された半径を使用して、顔の四角形を中心とする黒い画像上に白い円を描きます。最後に白い円の部分をぼかします。
def face_blur(resized_frame, face_rects): for (x, y, w, h) in face_rects: # Specifying the center and radius # of the blurring circle center_x = x + w // 3 center_y = y + h // 3 radius = h // 1 # creating a black image having similar # dimensions as the frame mask = np.zeros((resized_frame.shape[:3]), np.uint8) # draw a white circle in the face region of the frame cv2.circle(mask, (center_x, center_y), radius, (255, 255, 255), -1) # blurring the whole frame blurred_image = cv2.medianBlur(resized_frame, 99) # reconstructing the frame: # - the pixels from the blurred frame if mask > 0 # - otherwise, take the pixels from the original frame resized_frame = np.where(mask > 0, blurred_image, resized_frame) return resized_frame
この関数は、NumPy where() 関数を使用して、ブラー処理中にフレームを再構築します。
プログラムのエントリ ポイントとして機能する main 関数を作成します。その後、プログラム フローを制御します。この関数は、ビデオ入力のフレームを継続的にキャプチャする無限ループを開始します。キャップ オブジェクトの read メソッドを呼び出して、カメラからフレームを読み取ります。
次に、この関数はフレームを前処理関数に渡し、戻り値を別の関数 face_blur に渡して、ぼやけた画像を取得します。次に、blur 関数によって返されたフレームのサイズを変更し、出力を表示します。
def main(): while True: success, frame = cap.read() resized_input, face_rects = image_preprocess(frame) blurred_image = face_blur(resized_input, face_rects) # Diplaying the blurred image cv2.imshow("Blurred image", cv2.resize(blurred_image, (500, 500))) if cv2.waitKey(1) == ord("q"): break
この関数は、ユーザーが q キーを押したときに出力表示も終了します。
スクリプトを実行するときは、必ず最初に main 関数を実行してください。スクリプトが別のプログラムのモジュールとしてインポートされた場合、この条件は false になります。
if __name__ == "__main__": main()
これにより、スクリプトをモジュールとして使用したり、スタンドアロン プログラムとして実行したりできます。プログラムを実行すると、次のような出力が表示されるはずです。
顔がぼやけていて認識できません。外。
顔ぼかしを使用すると、さまざまな種類のアプリケーション環境でプライバシーを保護できます。ストリート ビューとマッピング サービスは、ぼかし技術を使用して画像内の人の顔を隠します。法執行機関は、証人の身元を保護するために顔ぼかし技術を使用しています。
多くのビデオ共有プラットフォームには、ユーザー向けの顔ぼかし機能も統合されています。これらの分野での顔のぼかしの使用を比較すると、他のプラットフォームがこのテクノロジーをどのように統合しているかを理解するのに役立ちます。
元のリンク: https://www.makeuseof.com/python-blur-human-faces-real-time/
以上がPython を使用してリアルタイムで顔をぼかす方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。