【Python】OpenCVを使って顔検出してみる
OpenCVというPythonのライブラリを使って、比較的簡単に顔検出が出来てしまいました。
ちなみに、「haarcascade_frontalface_default.xml」の部分を、別のXMLファイルに差し替える事で、瞳や鼻など、別の部分を検出する事もできるようです。
下記、Colaboratoryで実行出来ます。
# 初回のみ実行。githubから、opencvのcloneを取得する
!git clone https://github.com/opencv/opencv.git
# URLから画像を取得して、test.jpgとして保存する
!wget https://www.pakutaso.com/shared/img/thumb/SAYAPAKU5460_TP_V.jpg
!mv SAYAPAKU5460_TP_V.jpg test.jpg
# ライブラリのインポート
import matplotlib.pyplot as plot
import cv2
# 顔検出用の定義ファイルを読み込む
cascades = cv2.CascadeClassifier("opencv/data/haarcascades/haarcascade_frontalface_default.xml")
# 顔検出したい画像を読み込む
img = cv2.imread("test.jpg")
# 横幅600pxの縦横比固定で、画像をリサイズする
scale = 600 / img.shape[1]
img = cv2.resize(img, dsize=None, fx=scale, fy=scale)
# 顔の認識
face_detects = cascades.detectMultiScale(
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), #グレースケールした画像を渡す
minSize = (30, 30) #この寸法以下の物体は検出対象外とする
)
# 認識結果の出力
if len(face_detects) == 0:
print("You have no face:(")
else:
# 顔認識された箇所を四角形で囲む
for (x, y, width, height) in face_detects:
cv2.rectangle(img, (x, y), (x + width, y + height), (0, 255, 255), thickness = 3)
# 画像の保存
cv2.imwrite("dest.png", img)
# 画像の表示
plot.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plot.show()
!git clone https://github.com/opencv/opencv.git
# URLから画像を取得して、test.jpgとして保存する
!wget https://www.pakutaso.com/shared/img/thumb/SAYAPAKU5460_TP_V.jpg
!mv SAYAPAKU5460_TP_V.jpg test.jpg
# ライブラリのインポート
import matplotlib.pyplot as plot
import cv2
# 顔検出用の定義ファイルを読み込む
cascades = cv2.CascadeClassifier("opencv/data/haarcascades/haarcascade_frontalface_default.xml")
# 顔検出したい画像を読み込む
img = cv2.imread("test.jpg")
# 横幅600pxの縦横比固定で、画像をリサイズする
scale = 600 / img.shape[1]
img = cv2.resize(img, dsize=None, fx=scale, fy=scale)
# 顔の認識
face_detects = cascades.detectMultiScale(
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), #グレースケールした画像を渡す
minSize = (30, 30) #この寸法以下の物体は検出対象外とする
)
# 認識結果の出力
if len(face_detects) == 0:
print("You have no face:(")
else:
# 顔認識された箇所を四角形で囲む
for (x, y, width, height) in face_detects:
cv2.rectangle(img, (x, y), (x + width, y + height), (0, 255, 255), thickness = 3)
# 画像の保存
cv2.imwrite("dest.png", img)
# 画像の表示
plot.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plot.show()
この記事の最終更新日:2019/03/11
最初に記事を書いた日:2019/02/25