顔を左右対称にするbotとは?
リプライでアカウント(@SymmetryFace)に顔写真を送ると、顔を左右対称にした画像を作って送り返します。
元ネタ→ゲームをする時はしっかりマイクをOFFにしましょう - Oculus VR -
※鍵アカウントの人のための使い方
(鍵アカウントは相互フォロー状態にならないと、リプライを送っても動作しません。)
- 一度鍵を外す。
- アカウント(@SymmetryFace)をフォローする。
- 鍵を付け直す。
- 写真を送り付ける。
この仕様をなおしたい...
左右対称にしたサンプル
顔を左右対称にするプログラム
SymmetryFace.py
import cv2
import sys
import math
import numpy as np
CASCADE_PATH = "haarcascade_frontalface_alt.xml"
def symmtry_face(in_image_path, out_image_path):
image = cv2.imread(in_image_path)
height, width, color = image.shape
cascade = cv2.CascadeClassifier(CASCADE_PATH)
facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
if len(facerect) == 0:
return False
rect = facerect[0]
start_x = rect[0]
face_width = rect[2]
center_x = int(math.floor(start_x + face_width/2.0))
left_image = image[0:height, 0:center_x]
right_image = left_image[:,::-1]
out_image = cv2.hconcat([left_image, right_image])
cv2.imwrite(out_image_path, out_image)
return True
if __name__ == "__main__":
symmtry_face("test.jpg", "test.out.jpg")
→実行するとtest.jpgから顔を検出して、左右対称にした画像をtest.out.jpgをして書きだす。
その他にやったこと
この記事には載せていませんが、Twitter botにするにあたって以下のこともやってます。
- Tweepyを使ってリプライの監視と左右対称画像の返信
- Supervisorを使ってでメインスクリプトのデーモン化
同じことをやろうとしている人へのアドバイス
- OpenCVを入れるのがめんどくさいときは、Anacondaを使うとかなり楽ちん[3]です。
- 画像のDLはPython2.7.9以上じゃないと、InsecurePlatformWarningとかがでるからアップデートしたり、Anaconda使ったりするといい。
- Supervisorの設定項目のdirectoryをちゃんと指定するといい。
- Supervisorで困ったときは「
sudo service supervisor restart
」すると動くかもしれない。
参考にしたサイトとか
- ゲームをする時はしっかりマイクをOFFにしましょう - Oculus VR -
- Tweepyでstreaming apiを使用した自動フォロー返し
- pythonでOpenCVを使う一番簡単な方法
- Authentication Tutorial — tweepy 3.5.0 documentation
- Unable to save image from web using urllib2
- Supervisorで簡単にデーモン化
宣伝
フォローお願いします @redshoga