0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】OpenCVで画像処理(顔検出)(初心者向け)

Last updated at Posted at 2022-12-11

1.はじめに

PythonにてOpenCVを用いた画像処理を実施したのでまとめました。
前回からの続きで、グレースケールに変換した画像から正面から見た人の顔を検出しマスクします。
djangoの使用については、株式会社キカガク殿にて学習した内容を元に作成しました(djangoの説明については割愛します)。

2.開発環境

・Windows10
・Python 3.9.12
・opencv-python--headless==4.5.1.48
・Pillow==9.2.0

3.顔検出

顔検出を行うため、OpenCVのカスケードファイルである「haarcascade_frontalface_default.xml」という人の正面からの顔を検出する分類器を使用します。

import cv2
from PIL import Image
(省略)

# カスケードファイルの保管場所取得
cascade_path = settings.BASE_DIR + "/imgrayapp/haarcascades/
(省略)

# 元画像の保管場所取得
path = settings.BASE_DIR + obj.document.url
(省略)

# 顔検出
# 学習済みモデルの読み込み
cascade = cv2.CascadeClassifier(cascade_path)
# detectMultiScaleで顔検出
# minSizeで最小検出サイズを指定(下記(20, 20)は20ピクセル*20ピクセル以下は探さないを意味する)
# img_grayはグレースケールに変換した画像を示す
face_list = cascade.detectMultiScale(img_gray, minSize = (20, 20))
                
# face_listの値をまとめる
x = face_list[0][0] # X座標    
y = face_list[0][1] # Y座標
w = face_list[0][2] # 横幅
h = face_list[0][3] # 縦幅

4.検出した顔をマスク

顔を検出した後、顔を隠すための画像を顔のある位置に貼り付けます(顔を隠すための画像はあらかじめ用意しておきます)。その際、画像を加工するためpythonの画像処理ライブラリであるPillowを使用します。

# 人の顔に張り付ける画像の保管場所取得
maskimage = settings.BASE_DIR + "/media/documents/maskimage.png"
# PILで画像を開く
original_image = Image.open(path)
maskim = Image.open(maskimage)
            
# 顔にあったサイズにマスク画像をリサイズする
resize_maskim = maskim.resize((w, h))
resize_maskimage = settings.BASE_DIR + "/media/documents/resize_maskimage.png"
resize_maskim.save(resize_maskimage)
            
# 元画像はそのままにしておくため、コピーを用意する
back_im = original_image.copy()
            
# 背景透過のためのsplit()
back_im.paste(resize_maskim, (x, y), resize_maskim.split()[3])
            
# 保存する
mask_image = settings.BASE_DIR + "/media/gallery/mask_image.jpg"
back_im.save(mask_image)
obj.faceimage = "gallery/mask_image.jpg"

5.結果

下の画像は、顔を検出しマスクする前と後の画像になります。
lenna.png
マスク前の画像

mask_image.jpg
マスク後の画像

無事顔の位置を検出し、マスクすることができました。

6.Webアプリ

Djangoを使用し、人の顔をマスクするWebアプリケーションを作成してみました。

image.png
ファイル選択画面

image.png
実行結果

画像で顔を隠す手法以外に、検出した顔の位置のみモザイク加工をして顔を隠す手法も実施しました。

7.参考文献

https://camp.trainocate.co.jp/magazine/python-opencv/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?