LoginSignup
8
9

More than 3 years have passed since last update.

Opencvで顔を検出してみた

Last updated at Posted at 2018-08-31

はじめに

この記事では以下のようなことについて書きます。
1.opencvで顔を検出
2.顔を検出して切り出し、別のファイルに保存する

環境

windows
juypter notebook
python3.6

下準備

opencvが使えない場合はjuypter notebookに以下を入力してください。

! pip install opencv-python

特徴ファイルはこちらにあります。

顔を検出

qiita.py
import cv2
import  matplotlib.pyplot as plt
%matplotlib inline

img=cv2.imread("./Lena.jpg")#画像の読み込み
image=cv2.imread("./Lena.jpg",0)
img= cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#RGBに変換する
HAAR_FILE="haarcascade_frontalface_default.xml"#特徴の読み込み
cascade=cv2.CascadeClassifier(HAAR_FILE)
face=cascade.detectMultiScale(image)#顔検出
for x,y,w,h in face:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#顔を四角で囲む
plt.grid(False)#デフォルトだとグリッドとxy軸ラベルが表示されるので非表示にする
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
plt.imshow(img)

2019-07-15 (2).png

顔を検出して別のファイルに保存

ここからjupyter notebook使用しています

import cv2
import matplotlib.pyplot as plt
import numpy as np
import sys, os
from PIL import Image
%matplotlib inline


#入力ファイルのパスを指定
in_jpg = "in_nana/"
out_jpg = "out_nana/"

#リストで結果を返す関数
def get_file(dir_path):
    filenames = os.listdir(dir_path)
    return filenames

pic = get_file(in_jpg)

for i in pic:
    # 画像の読み込み 
    image_gs = cv2.imread(in_jpg + i)

    # 顔認識用特徴量ファイルを読み込む --- (カスケードファイルのパスを指定)
    cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

    # 顔認識の実行
    face_list = cascade.detectMultiScale(image_gs,scaleFactor=1.1,minNeighbors=1,minSize=(1,1))

    # 顔だけ切り出して保存
    cnt= 1;
    for x,y,w,h in face_list:

        dst = image_gs[y:y+h,x:x+w]
        #保存する時の名前
        save_path = out_jpg + '/' + 'out_('  + str(i) +')' + str(no) + '.jpg'

        #認識結果の保存
        a = cv2.imwrite(save_path, dst)
        plt.show(plt.imshow(np.asarray(Image.open(save_path))))
        print(cnt)
        cnt += 1

2018-09-01 (1).png
このようになりました。上手く切り出せず顔以外の画像も保存されています。

参考

大量の画像から顔の部分のみトリミングして保存する方法
OpenCVでの画像処理

おわりに

質問や間違いがありましたらコメントお願いします。

8
9
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
8
9