会社の部活でOrange Pi Zero
を買ってもらったので、USBカメラと繋げて遊んでみました。
Orange Piとは
Orange Pi
はRaspberry Pi
に似た感じでLinuxが動かせる小型コンピューターです。
USB・LANケーブル差せたる、WiFiとか付いてる、約800円で送料込みで1000円ちょっと、安い。
中ではarmbian
というDebian系のOSが動いている状態です。
USBカメラ
転がってたELECOMのカメラを使います。
WebカメラをOrange Piで使う
USB接続を確認
USBカメラをOrange Piに接続する。
$ lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 056e:7016 Elecom Co., Ltd
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Elecomってやつがいるので、認識されてるみたい
Bus 002 Device 002: ID 056e:7016 Elecom Co., Ltd
fswebcamをインストール
とりあえずお手軽に撮影できるのでfswebcam
をインストールします
$ apt install -y fswebcam
fswebcamで撮影してみる
$ fswebcam test.jpg
$ ls -l test.jpg
-rw-r--r-- 1 root root 65560 Mar 26 19:29 test.jpg
armbianにはGUIが付いてないため、
画像の確認にはCyberDuckからSFTP経由でダウンロードすると簡単に見られるので便利です
撮影した画像をSlackに送信
pipインストール
$ python --version
Python 2.7.9
$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python
$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
fabricインストール
$ apt install -y build-essential libssl-dev libffi-dev python-dev
$ pip install fabric
$ fab --version
Fabric 1.13.1
Paramiko 2.1.2
fabric経由で撮影
from datetime import datetime
from fabric.api import local
def camera():
d = datetime.now().strftime("%Y-%m-%d_%H-%M")
filename = 'camera_' + d + '.jpg'
local('fswebcam --no-banner --frame 5 --set 5 --resolution 640x512 ' + filename)
$ fab camera
slackに送信する
$ pip install slacker
from datetime import datetime
from fabric.api import local
from slacker import Slacker
SLACK_TOKEN = 'xxxxxxxxxxxxxxxxxxxxx'
SLACK_CHANNEL = 'xxxxx'
def camera():
d = datetime.now().strftime("%Y-%m-%d_%H-%M")
filename = 'camera_' + d + '.jpg'
local('fswebcam --no-banner --frame 10 --set 5 --resolution 640x512 ' + filename)
slack = Slacker(SLACK_TOKEN)
slack.files.upload(filename, channels=[SLACK_CHANNEL])
SLACK_TOKEN
とSLACK_CHANNEL
にはSlackから取得したものを設定してください
cronに登録して定期実行
$ crontab -e
* * * * * /usr/local/bin/fab camera >>/tmp/cron.log 2>>/tmp/cron-err.log
これで毎分撮影されるようになります
GIFアニメを作成してSlackに投稿する
毎分投稿されるとうざいのでGIFアニメにして10分毎にまとめて投稿されるようにしてみます。
ImageMagicをインストール
$ apt install -y imagemagick
$ convert -version
Version: ImageMagick 6.8.9-9 Q16 arm 2017-03-12 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib
GIFアニ作成task作成
fabfileを少し修正して、GIFアニを作ってSlack投稿するtaskを新しく作ります
from datetime import datetime
from fabric.api import local
from slacker import Slacker
SLACK_TOKEN = 'xxxxxxxxxxxxxxxxxxxxx'
SLACK_CHANNEL = 'xxxxx'
def camera():
d = datetime.now().strftime("%Y-%m-%d_%H-%M")
filename = 'camera_' + d + '.jpg'
local('fswebcam --no-banner --frame 10 --set 5 --resolution 640x512 ' + filename)
def slack():
filename = 'anime.gif'
local('convert -delay 10 -loop 0 camera_*.jpg ' + filename)
slack = Slacker(SLACK_TOKEN)
slack.files.upload(filename, channels=[SLACK_CHANNEL])
local('rm camera_*.jpg')
cronで10分毎に実行させるように登録
* * * * * /usr/local/bin/fab camera >>/tmp/cron.log 2>>/tmp/cron-err.log
*/10 * * * * /usr/local/bin/fab send >>/tmp/cron.log 2>>/tmp/cron-err.log
おわり
今回Orange Pi
を初めて使ってみましたが、普通にRaspberry Pi
を同じように使えた
Raspberry Pi Zero W
も発売されましたが、全く手に入らないので代用にOrange Pi Zero
けっこう良いかもしれない
日本ではこのWiFi使うと技適警察に怒られるので注意!
fabric使ったけど、今回いらなかった気がする・・・