それ、ラズパイでつくれるよ
それ、ラズパイでつくれるよ——画像の自動ツイートもできるよ!
「Raspberry Pi」の活用例を紹介する連載企画「それ、ラズパイでつくれるよ」。 第12回はWebカメラで撮った写真をTwitterへアップロードしてみよう。
神託の青い鳥
私は青い鳥と暮らしている。ベッドで横になりながらスマホで動画を見ていると、青い鳥が側の机の端から私をのぞき込んでくるのだが、これがなんとも可愛い。ある日そんな私に彼女が語りかけてきたのだ。
Zoomのバーチャル背景でプライバシーを守って満足か。愚かな人間よ。守るべきプライバシーなどないのだ。その怠惰な姿を世にさらしてみよ。
青い鳥を通して天啓が下ったのだ。そこで今回はWebカメラで撮ったベッドの様子をTwitterにアップロードするシステムを作る。
用意するもの
今回は用意するものは以下の二つ。
- ラズパイ(Raspberry Pi 3 Model Bを「2020-02-13 Raspbian Buster」で使用した)
- 市販のWebカメラ(USB接続)
Webカメラではなくても、もちろんラズパイ用のカメラモジュールでも良い。
APIの取得
ラズパイからTwitterへ投稿するためにはTwitterのAPIを通す必要がある。APIキー取得のために、まず適当なTwitterアカウントを作成しよう。
アカウントを作成したらTwitterの開発者用のサイトから、アプリケーションの作成を行う。開発者登録がまだの場合怒られるので、その登録を先に行う。これが今回一番の難所となる。英作文させられるのである。
開発者登録では、まずAPI使用の簡単な目的とアカウント情報を聞いてくるので、正直に答えよう。今回簡単な目的は「Making a bot」とした。アカウントは電話番号での認証が必要なので、正直に行っておこう。
次にAPI使用の詳細について書かなければならない。「In English」で200文字。今回はTweetを行う予定なので「The specifics」はキャプチャー画像のようにしておいた。文言も画像の通りで、このくらいの熱量で大丈夫だよ、ということを伝えたい。困ったときは日本語で書いて最近評判の良い「DeepL翻訳」に突っ込めば大勝利だ。
あとは「Developer Agreement」にagreeし、認証メールを待ってリンクを踏めば#welcomeだ。
ここまでくると、「Create an app」のボタンがアクティブになっているはずなので押すと、アプリケーションの登録ができる。先ほど書いた内容をほぼコピペすればなんとかなるので、正直に書いておこう。
アプリの登録が済んだら、「Keys and tokens」のタブを開き、「Consumer API keys」と「Access token & access token secret」をメモして準備は完了だ。「Access token & access token secret」は「Generate」した時に表示される。
ソフトウェアの準備
次に自動的に写真を撮ってTweetするPythonスクリプトを準備する。とりあえず、
$ sudo apt-get update $ sudo apt-get upgrade
写真を撮るのに必要なfswebcamとPythonからtwitterを操作するライブラリをインストール。
$ sudo apt-get install fswebcam $ sudo pip3 install python-twitter
Pythonスクリプトを以下のように作成する。私はoyasumizzz.pyとして、/home/pi/oyasumi_pi/に保存した。「APIキー」と「アクセストークン」はそれぞれ取得したものに、「fileName」に保存した場所を記述することを忘れずに。
#!/usr/bin/env python import subprocess import datetime import twitter
APIキーとアクセストークンを定数に登録しておきます。
CONSUMER_KEY = '***************YOUR DATA*****************' CONSUMER_SECRET = '***************YOUR DATA*****************' ACCESS_KEY = '***************YOUR DATA*****************' ACCESS_SECRET = '***************YOUR DATA*****************'
コマンドを楽にするためにオブジェクトにキーの登録をしておきます。
api = twitter.Api(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
カメラの初期化を行い、写真を1枚パシャリ。fswebcamの引数の-Fや-Sは環境の明るさに合わせて変更してください。
now = datetime.datetime.now() fileName = '*******YOUR DIRECTORY*******' + \ now.strftime('%Y%m%d_%H%M%S') + '.jpg' cmd = 'fswebcam -r 1280x720 -F 10 -S 100 --no-banner ' + fileName subprocess.run(cmd, shell=True)
ツイートする内容はここで変更
message = 'おやすみ〜 # raspberrypi'
写真をtwitterへ投稿
photo = open(fileName, 'rb') response = api.upload_media(media=photo) api.PostUpdate(message, media=fileName)
いらなくなった写真を削除
cmd = 'rm ' + fileName subprocess.run(cmd, shell=True)
これを1時間おきに実行するためにcronに登録しておこう。
$ crontab -e
で、次のように追記する。保存した場所が異なる場合は適宜変更してほしい。
0 * * * * sudo python3 /home/pi/oyasumi_pi/oyasumizzz.py
一応cronを再起動しておく。
$ /etc/init.d/cron restart
これでプライバシーゼロの生活を始められる。
見せるかどうかは自己責任で
最後にWebカメラをいい感じに配置し、何度か写真を撮って画角をいい感じに調整しておこう。
こちらのアカウントに撮った写真が公開されるようになってしまった。1日に24回しか撮られないのに登場する回数が多いことや、14時頃まで寝ていることなど、筆者の生活のだらしなさが見て取れる。
青い鳥はいつも通りぴーぽぽと鳴いている。
今回、撮った写真をTwitterへアップロードする方法を紹介した。私は特にやましいものがないため全生活を公開しても構わないが、そうでない人は風景やペットの写真を投稿しても良いかもしれない。
今回は撮った写真をそのままアップロードしたが、その写真を画像解析してメッセージを変更するなどしても面白いと思う。また今回は写真だったが動画を投稿することなどに挑戦してみてもらいたい。ソースはgithubにアップロードしているのでご自由に活用してもらえると嬉しい。
※このコーナーでは、みなさんの「それ、ラズパイでつくれるよ」をお待ちしています。問い合わせフォームからドシドシご応募ください。