paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

Raspberry Pi Zero WとカメラモジュールをPythonで動かして撮影してみた

f:id:paiza:20170823110306j:plain
秋山です。

Raspberry Pi Zero W」が日本でも手に入るようになりましたね!(まだまだ品薄で、出荷即完売みたいな状況ではありますが…)
www.switch-science.com

私も運よく購入できたので、いろいろ遊んだりしています。

とりあえず実物を見た第一印象は、すごく小さい!その辺にあった消しゴムと並べてみました。
f:id:paiza:20170823110252j:plain
キーホルダーにして持ち歩きたくなるぐらいのかわいいサイズ感です。

このサイズでWi-Fi、Bluetoothが搭載されていて、値段が千円ちょっとってすごいですよね。

今回は、Pythonでコードを書いて、このRaspberry Pi Zero Wを使ったタイムラプスムービー的なものを作ってみたので、その手順を書いていきたいと思います。

Raspberry Pi Zero Wに神宮外苑花火大会を撮影してもらいたい

Raspberry Pi Zero Wに撮影してもらうための準備

先日、8月20日の日曜日に神宮外苑花火大会が開催されました。

見に行った方もいるかもしれませんが、弊社オフィスは会場と近く、窓から花火が見えます。

そこで、今年の花火大会はRaspberry Pi Zero Wに花火を見てもらって、撮影しておいてもらうことにしました。

最初は、リモートで家から画像を見ながらサーボモータなりで操作して、花火をいい感じの角度で見れたら……みたいなことを考えていましたが、ちょっとセキュリティ的に難しそうなので、Raspberry Pi Zero Wは社内Wi-Fiにゲストで接続し、ntpd で時間調整だけをしてもらうことにしました。(なので、Wi-Fiの利点はあまり活かせていません…)


今回は、Python3、picamera、 Pillowがインストールされた環境が必要になります。
picamera — Picamera 1.13 Documentation
Pillow — Pillow (PIL Fork) 4.2.1 documentation

また、カメラモジュールの設定も必要です。詳しくは↓このあたりを参照してください。
www.raspberrypi.org

カメラモジュールは、こちら↓を使用しました。
www.switch-science.com
このモジュールは、Raspberry Pi Zero系列に繋がるケーブルが付属しているわけではないので、ケースとケーブルがセットになったこちら↓を使いました。
www.switch-science.com

そしてフォントはこちら↓を使っています。
fonts.google.com


今回は、0.333秒ごとにカメラで外を撮影し、連番で保存していってもらうことにします。

main.pyとして保存した下記Pythonファイルを指定時刻に実行して(撮影してもらう時間は 3*60*60*3 * 0.333秒で、約3時間としました)、ついでにエンコードも走らせます。

from time import sleep
import picamera
from PIL import Image, ImageDraw, ImageFont
import datetime

camera = picamera.PiCamera()

for i in range(3*60*60*3):
    sleep(0.333)
    file_name = "{0:08}.jpg".format(i)
    camera.capture("/home/pi/camera/img/"+file_name)
    font = ImageFont.truetype('/home/pi/camera/OpenSans-Light.ttf', 12)
    img = Image.open("/home/pi/camera/img/" + file_name, 'r')
    draw = ImageDraw.Draw(img)
    draw.text((10, 10),str(datetime.datetime.now()),font=font , fill='#F00')
    img.save("/home/pi/camera/img/" + file_name)
    print(file_name)


とりあえず今回は、atコマンドで指定時間にコマンドを実行することにします。atコマンドはデフォルトで入っていないのと、エンコードにはavconvを使いたいので、libav-toolsをインストールします。(avconvはlibav-toolsに入っています)

sudo apt-get install at libav-tools

これ、インストールするのに結構時間がかかりました。(Raspberry Pi Zeroはシングルコアなのと、このとき使ったmicroSDカードがその辺にあったclass4だったので、その辺が原因なのかも…)


あとは、前述のPythonコードと、エンコードのオプションなどを適当に整えたコマンドを boot.sh として

python3 /home/pi/camera/main.py
avconv -framerate 60 -i /home/pi/camera/img/%08d.jpg -vcodec libx264 -pix_fmt yuv420p -r 60 /home/pi/camera/out.mp4

と記述しておきます。main.pyを実行し、その後avconvでjpgファイルからmp4ファイルを作る…という流れになっています。


上記のboot.shファイルを指定時刻に動かすコマンドを入力したら、あとは放置でOKです。

ただ、自分のデスクは窓から遠いので撮影に適した場所じゃないし、いちいち電源を入れてSSHしてatコマンドで指定時間に起動予約をする…というのも面倒なので、電源が入ったら勝手にatコマンドが実行されるように、 /etc/rc.local にコマンドを書いておくことにしました。

sudo vim /etc/rc.local で

at "09:00 20.08.17" -f /home/pi/camera/boot.sh

を exit 0 の手前に記述しておけばOKです。

あとは電源が入ったときに、勝手にatコマンドが実行されて、UTCで8月20日の9時、要するにJST(UTC+9)で日本時間の18時からスクリプトが起動するようになっています。

これで8月18日金曜日の夜にカメラモジュールをオフィスの窓際に設置して、帰宅しました。

◆撮影できたかな

8月21日月曜日に出社して、さっそく見てみました。わくわく+(0゚・∀・) +


Raspberry pi zeroによるタイムラプスムービー 2017/08/20 18:30〜20:29


Σ(´Д`;) う~ん……

カメラを窓の花火が見えそうな位置にテープで貼りつけておいたんですけど、テープがとれてずり落ちていたようで、花火を見にきた人たちの流れが見えるだけの動画になってしまいました。(↑YouTubeにあげてみました)

たま~に花火っぽい光が映るときもありますが……残念な動画になってしまいました。

■まとめ

というわけでRaspberry Pi Zero Wとカメラモジュールを使って遊んでみました。

花火はうまく撮れなかったけど、撮影自体は問題なくできるようなので、使い方によってはいろいろおもしろい動画が撮れるかも?

ほかにもRaspberry Pi Zero Wで何か遊べそうなことがあったら実験してみたいと思います。


「プログラミング初心者なのでラズパイとかわかんない」「Pythonの基礎的な書き方から勉強したい」という方は、プログラミングが動画で学べる「paizaラーニングPython入門編から始めてみると、無理なく基礎を習得できると思います。
paiza.jp

また、現在paizaラーニングではRubyRailsの有料講座を期間限定で無料公開しているので、興味のある方はごらんください。詳しくはこちら↓(無料公開スケジュールとかが載ってます)
paiza.hatenablog.com




paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。

自分のスキルを磨いていきたいという方におすすめなのが「paizaラーニング」。オンラインでプログラミングしながらスキルアップできる入門学習コンテンツです。初心者でも楽しくプログラミングの基本を学ぶことができます。
paiza.jp
そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
paiza.jp
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza


プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編