追記
2022年1月にPythonへ移行しました。
はじめに
こんにちは。かつて稼働していたTwitterアカウント**ヒカキンシンメトリbot**をご存知でしょうか。
全自動でヒカキンさんのサムネイルなどをシンメトリー(左右対称)にしてTwitterにアップロードするアカウントです。
こんなやつ↓
本人に取り上げられて一時期有名になりました。
ですがそのアカウントは2019年末より稼働しなくなってしまいました。
なので今回緊急事態宣言発令中でほぼニート状態の暇人がヒカキンシンメトリーbotを勝手に復活させました。
本家との変更点
大きな変更
###投稿時刻
まず大きな変更として毎日00:10に前日分の画像のシンメトリーを一括して投稿します。
本家シンメトリーbotでは本人様がアップロードされた直後の1時間以内くらいに投稿されてましたが、新しいやつではサーバーの都合上00:10に投稿します。(00:00分じゃ駄目なのかという話もあるかも知れませんが別のbot @randomhikakin の定期実効タイミングだったりMySQLのキャッシュリフレッシュをしてたりと処理が重くなりがちなので10分遅らせています。
取得対象
【旧】HikakinさんのYouTubeサムネイル・Twitter画像
【新】HikakinさんのTwitter画像 +SeikinさんのTwitter画像
新版ではSeikinさんを勝手に追加しました。(ごめんなさい)
※YouTubeのサムネイルの取得を廃止しました。
背景としては2019年頃よりYouTube動画をTwitterで告知する際にOPG(カード画像)が表示されなくなったため動画投稿者は直接Twitter上で動画サムネイル画像をアップロードするようになったからです。YouTube API v3等を使わずにTwitter APIのみで完結するようになったのでありがたいです。
追加取得
後述する問題点に対処するため過去のHikakinTVのサムネイルのシンメトリーを毎日18:00に投稿します。
独自に取得したHikakinTVチャンネル動画データベースから取得する感じです。
全動画のjsonファイルは配布してあります。
※PHPで特定チャンネル内のすべての動画情報を一括して取得する方法(自筆/下は英語版)
システムの変更
顔認識
顔認識を行う仕組みを変更しました。
【旧】Google Cloud Vision API
【新】OpenCV(Python)
退化してんじゃね?って思われそうですが仕方ないんです。お金払うのが嫌なんです…
AzureのComputer Vision APIなら制限内で無料でやれるかも知れないんでそれでやるかもしれないです。(情報処理学会のジュニア会員なのでAzure Studentの1万円クーポンがあるから使おうか使うまいか…)
システム設計
bot内のシステムは本家botのソースコードは利用せず一から組み直しました。
※本家Botのソースコードは↓
使用言語・ライブラリは以下のとおりです。tweepyとかを使うとオールPythonで行けたかも知れませんが動けばヨシ!とにかく暇なうちに…と考えた結果死ぬほど使い倒したPHPのtwitteroauthでツイート関連処理は組みました。
ソースコードは頒布しません。汚いので。
処理 | 言語(ライブラリ) |
---|---|
ツイート画像取得処理 | PHP(abraham/twitteroauth) |
顔認識&反転処理 | Python(OpenCV/numpy) |
画像投稿処理 | PHP(abraham/twitteroauth) |
定期実行処理 | Linuxのsystemd.timer |
※動作環境:Ubuntu 20.04 LTS / PHP7.4(Composer使用) / Python3.8(pip使用) |
問題点
今回新しく作った上で生じた問題としてヒカキンさん達が顔加工しまくっててうまく認識されない問題があります。
例えば若干の変顔であればOpenCVの笑顔プリセットで認識してくれます。
ですが↓のようにめちゃくちゃ加工してしまうと認識できないor誤認識してしまうんです。
このことから認識できない場合が多いことが予想されるので比較的補正のかかってない過去のサムネイル画像を投稿する仕組みを導入しました。
皆さんも是非見てみてください。そしてヒカキンさんセイキンさんすみませんm(_ _)m
https://twitter.com/SYM_HIKA_SEI
##諸連絡
動作に関する不具合やご要望がありましたら@tomox0115までメンション飛ばして教えて下さい。すぐ対応します。
【ブログ】https://0115765.com/
【Twitter】**@tomox0115*