Python × MediaPipeで映像のプライバシー対策:顔検出&モザイク処理の実践

近年、個人情報やプライバシーの保護が強く求められるようになりました。とりわけ防犯カメラやドローン、業務記録用の映像データにおいて「人の顔」がそのまま映り込むことは、個人識別につながるリスクがあります。
このページでは、Google の MediaPipe を使って「動画内の顔を自動的に検出し、モザイク処理をかける」Pythonスクリプトの仕組みを、プログラミング学習者向けに丁寧に解説します。
1. このスクリプトの目的
本スクリプトの目的は、動画ファイルに含まれる人物の顔を自動的に検出し、モザイク加工を施すことで個人の特定を防ぐことにあります。
- 入力:映像ファイル(mp4, avi, mov, mkv)
- 処理:MediaPipeで顔検出 → 検出範囲をモザイク化
- 出力:顔にモザイクがかかった再生可能な動画
この処理は、映像の第三者提供・共有・公開を行う際のプライバシー対策として非常に有効です。
2. 使用ライブラリ
Pythonと以下のライブラリを使用します。
opencv-python
:映像の読み書き・画像処理mediapipe
:顔検出(AIモデル内蔵)os
:フォルダ操作
pip install opencv-python mediapipe
3. ソースコード構成
本スクリプトの全体構造は以下のようになっています。
├─ input_videos/ ← 入力動画フォルダ
├─ output_videos/ ← 処理済み動画の出力先
├─ script.py ← 本体スクリプト
4. プログラム解説(重要関数)
4.1 顔検出関数 detect_faces_mp
MediaPipeを用いて、1枚のフレーム内から顔の位置を検出する関数です。
def detect_faces_mp(frame):
h, w = frame.shape[:2]
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = face_detector.process(rgb)
MediaPipeでは顔の位置を「相対座標(0.0~1.0)」で返すため、ピクセル単位に変換します。
x1 = int(bbox.xmin * w)
y1 = int(bbox.ymin * h)
bw = int(bbox.width * w)
bh = int(bbox.height * h)
また、顔検出がフレーム外にはみ出さないようクリップしています。
4.2 モザイク処理 apply_mosaic
検出された顔の領域に「ピクセル縮小 → 拡大」によるモザイクをかけます。
def apply_mosaic(face_roi, mosaic_rate=0.02):
small = cv2.resize(face_roi, (small_w, small_h), interpolation=cv2.INTER_NEAREST)
return cv2.resize(small, (w, h), interpolation=cv2.INTER_NEAREST)
mosaic_rate を小さくするほど、モザイクが粗くなります(プライバシー強度UP)。
4.3 メイン処理 loop(process_video)
動画ファイルを1フレームずつ読み込み、顔検出→モザイク→書き出しを繰り返します。
while True:
ret, frame = cap.read()
if not ret:
break
faces = detect_faces_mp(frame)
for (x, y, w, h) in faces:
roi = frame[y:y+h, x:x+w]
frame[y:y+h, x:x+w] = apply_mosaic(roi)
out.write(frame)
処理進捗がわかるように、50フレームごとにログ表示もしています。
4.4 フォルダ一括処理(main)
input_videos
フォルダ内の動画ファイルを一括で処理して、出力をoutput_videos
フォルダに保存します。
for fname in os.listdir(input_folder):
if ext.lower() in {\".mp4\", \".avi\", \".mov\", \".mkv\"}:
process_video(in_path, out_path)
5. モデル選択と検出性能の調整
model_selection
には以下の2種類があります:
0
: 高精度(マスク顔にもやや強い)1
: 高速(処理が軽いが精度はやや落ちる)
現実的な運用では model_selection=1
をベースにしつつ、精度が必要な環境では 0
に切り替えてください。
また、小さな顔が検出されないときは、フレームを拡大して検出する「マルチスケール検出」などのテクニックも有効です(処理時間は増えます)。
6. 応用と今後の展望
このスクリプトは基本的なモザイク処理を行いますが、以下のような応用が可能です:
- 音声付き動画の処理(音声はそのまま)
- トラッキングで検出漏れ補完(追跡アルゴリズム併用)
- 静止画への応用(サムネイル自動モザイク)
- マスク顔にも強い顔検出(RetinaFace, MTCNNなどへの切り替え)
倫理的な観点でも、「AIを使って何を守るか」という視点は非常に重要です。安易に顔を残すのではなく、意識的に保護する文化の一端として、こうした技術を活用していきましょう。
7. おわりに
本記事では Python と MediaPipe を使って、動画中の顔にモザイクをかけることでプライバシー保護を図る実用的なスクリプトを解説しました。
企業の映像管理、学校行事の記録、映像制作の素材整備など、あらゆる現場でこのような自動処理が求められています。技術を正しく使って、守るべきものを守れるよう、ぜひこのスクリプトを活用してください。© 株式会社ビー・ナレッジ・デザイン