Orange Pi Zero로 Slack 전송의 정점 카메라를 만들어 보았다

회사의 부활에서 Orange Pi Zero 를 사 받았으므로, USB 카메라와 연결해 놀아 보았습니다.

Orange Pi란?




Orange PiRaspberry Pi 와 비슷한 느낌으로 Linux가 움직일 수 있는 소형 컴퓨터입니다.

USB·LAN 케이블 넣는, WiFi라든지 붙어 있는, 약 800엔으로 우송료 포함으로 1000엔 조금, 싸다.

그 중에서는 armbian라는 Debian계의 OS가 움직이고 있는 상태입니다.

USB 카메라



구르고 있던 ELECOM의 카메라를 사용합니다.



웹캠을 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을 통해 촬영



~/fabfile.py
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

~/fabfile.py
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_TOKENSLACK_CHANNEL 에 Slack 로부터 취득한 것을 설정해 주세요

잘하면 이런 식으로 게시됩니다.


cron에 등록하여 정기 실행


$ crontab -e

crontab
* * * * * /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 애니 만들기 태스크 만들기



fabfile을 조금 수정하여 GIF 애니를 만들어 Slack 게시하기 task를 새로 만들기

~/fabfile.py
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분마다 실행되도록 등록



crontab
* * * * * /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 사용했지만, 이번에 필요 없었던 생각이 든다···

좋은 웹페이지 즐겨찾기