顔を左右対称にするTwitter botを作った話

  • 7
    Like
  • 0
    Comment

顔を左右対称にするbotとは?

image.png
リプライでアカウント(@SymmetryFace)に顔写真を送ると、顔を左右対称にした画像を作って送り返します。
元ネタ→ゲームをする時はしっかりマイクをOFFにしましょう - Oculus VR -

※鍵アカウントの人のための使い方
(鍵アカウントは相互フォロー状態にならないと、リプライを送っても動作しません。)
1. 一度鍵を外す。
2. アカウント(@SymmetryFace)をフォローする。
3. 鍵を付け直す。
4. 写真を送り付ける。
この仕様をなおしたい...:anguished:

左右対称にしたサンプル

これが
e884a322.jpg
こうじゃ
DKTkz-6UEAAyDS_.jpg

顔を左右対称にするプログラム

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」すると動くかもしれない。

参考にしたサイトとか

  1. ゲームをする時はしっかりマイクをOFFにしましょう - Oculus VR -
  2. Tweepyでstreaming apiを使用した自動フォロー返し
  3. pythonでOpenCVを使う一番簡単な方法
  4. Authentication Tutorial — tweepy 3.5.0 documentation
  5. Unable to save image from web using urllib2
  6. Supervisorで簡単にデーモン化

宣伝

フォローお願いします:soccer: @redshoga