LoginSignup
9
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-22

顔を左右対称にする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

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