MacbookAirのカメラで顔が写ったら顔を笑い男マーク(Python3+OpenCV3+PIL)
シリーズ:
MacbookAirのカメラで顔が写ったらモザイク加工(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔をエッジ抽出(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔をネガポジ変換(Python3+OpenCV3+PIL)
MacbookAirのカメラで顔が写ったら顔を笑い男マーク(Python3+OpenCV3+PIL)
[amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"]
前提
MacbookAirのカメラで顔が写ったらモザイク加工(Python3+OpenCV3+PIL)で作ったFaceクラスを作成しておく。
github のfaces.py
笑い男マーク(smileman.jpg)を準備
笑い男マークを検索し、source/image配下にsmileman.jpgを設置しておく。
Faceクラスにget_smileman_faceメソッドを実装
Faceクラスに顔が移ったらエッジ化するget_smileman_faceメソッドを実装した。
[python title="get_smileman_faceメソッドの内容"]
def get_smileman_faces(self, image, min_size=(100, 100)):
"""
顔を笑い男マークにするメソッド。
image: cv2.imreadで読み取った変数
min_size: 顔判定する最小サイズの指定。
"""
# イメージをpillowで扱うことのできる形式に変換しておく。
img_edit = Image.fromarray(image)
# 笑い男マーク呼び出し
img_smileman = Image.open("./image/smileman.jpg")
# OpenCV用のデータに変換
img_smileman = np.asarray(img_smileman)
# pillowではRGB、OpenCVではGBRのため、色の順番を並べ替え。
img_bgr = cv2.split(img_smileman)
img_smileman = cv2.merge((img_bgr[2], img_bgr[1], img_bgr[0]))
# pillow用のデータに変換
img_smileman = Image.fromarray(img_smileman)
# 顔認識
faces = self.get_faces(image, min_size)
# 顔があった場合。
if len(faces) > 0:
# 複数の顔があった場合、1つずつ四角で囲っていく。
for face in faces:
# 顔の部分の左上のx,y座標(微調整)
face_x = face[0] -50
face_y = face[1]
# 顔の部分の横の長さと縦の長さ(微調整)
face_height = face[1]+face[3] – 50
tmp_smileman = img_smileman.resize((face_height, face_height), Image.LINEAR)
# 元の画像に加工した顔画像を貼り付ける。
img_edit.paste(tmp_smileman, tuple((face_x, face_y)))
#pillow用のデータをOpenCVデータに変換
img_opencv = np.asarray(img_edit)
return img_opencv
[/python]
実行してみる。
[python title="faces.pyの実行部分"]
if __name__ == '__main__’:
face = Face()
"""
image = cv2.imread("./image/physicists.jpg", 1)
mosaic_faces = face.get_mosaic_faces(image, min_size=(10, 10))
# 表示
cv2.imshow("Show MOSAIC Image", mosaic_faces)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""
# カメラからキャプチャー
cap = cv2.VideoCapture(0)
while(True):
# 動画ストリームからフレームを取得
ret, frame = cap.read()
# モザイク処理
# frame = face.get_mosaic_faces(frame, ratio=40)
# cv2.imshow('MOSAIC FACE’, frame)
# エッジ
# frame = face.get_edge_faces(frame)
# cv2.imshow('EDGE FACE’, frame)
# ネガポジ変換
# frame = face.get_negaposi_faces(frame)
# cv2.imshow("NEGAPOSI FACE", frame)
# 笑い男
frame = face.get_smileman_faces(frame)
cv2.imshow("SMILEMAN FACE", frame)
# qを押したら終了。
k = cv2.waitKey(1)
if k == ord('q’):
break
cap.release()
cv2.destroyAllWindows()
[/python]
[shell]
(opencv_python)$ python faces.py
[/shell]
笑い男マーク!
ちなみに攻殻はみたことありません。
ディスカッション
ピンバック & トラックバック一覧
[…] MacbookAirのカメラで顔が写ったら顔を笑い男マーク(Python3+OpenCV3+PIL) […]