この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
前回書いたIntel EdisonをUSBオーディオで喋らせるで、EdisonではUSBデバイスも簡単に使えることがわかりました。で、この記事の中で
USBカメラなども繋げてみると楽しそうですね。今度チャレンジしてみたいと思います。
と書きましたので、有言実行!やってみました!
やってみた
デバイス
僕の机の引き出しの奥深くに埃まみれで転がっていたELECOMのUCAM-DLF30MというUSBカメラを繋いでみました。6年前の製品で、なんと30万画素です。タカラトミーのデコパレットでさえ200万画素だというのに...
Intel Edisonに認識させる
特に難しいことなく、USBポートに接続したらそのまま認識しました。以下dmesgの内容です。
[ 113.319202] usb 1-1: new high-speed USB device number 2 using dwc3-host
[ 113.418181] usb 1-1: New USB device found, idVendor=056e, idProduct=7001
[ 113.418213] usb 1-1: New USB device strings: Mfr=16, Product=96, SerialNumber=0
[ 113.418235] usb 1-1: Product: USB2.0 PC Camera
[ 113.418254] usb 1-1: Manufacturer: PixArt Imaging Inc.
[ 113.525628] uvcvideo: Found UVC 1.00 device USB2.0 PC Camera (056e:7001)
[ 113.535225] input: USB2.0 PC Camera as /devices/pci0000:00/0000:00:11.0/dwc3-host.2/usb1/1-1/1-1:1.0/input/input2
[ 113.535842] usbcore: registered new interface driver uvcvideo
[ 113.535862] USB Video Class driver (1.1.1)
Intel Edisonで使うためのパッケージをインストールする
CUIからUSBカメラを使うためのパッケージはいろんな種類があるのですが、今回は一番お手軽なfswebcamを使いました。opkgコマンドでさくっとインストールします。
# opkg list | grep fswebcam
fswebcam - 20140113-r0 - fswebcam version 20140113-r0 Small and simple webcam software for *nix
fswebcam-dbg - 20140113-r0 - fswebcam version 20140113-r0 - Debugging files Small and simple webcam
fswebcam-dev - 20140113-r0 - fswebcam version 20140113-r0 - Development files Small and simple webcam
fswebcam-doc - 20140113-r0 - fswebcam version 20140113-r0 - Documentation files Small and simple
# opkg install fswebcam
Go言語でWebアプリを作る
Webアプリ、と言っても大したものでは無く、HTTPでアクセスしたらfswebcamで作成したJPG画像を表示する、というだけです。アクセスするたびに実行されるので、Webブラウザのリロードによって最新の映像が表示されます。
package main
import (
"net/http"
"os/exec"
)
func handler(w http.ResponseWriter, r *http.Request) {
cmd := exec.Command("fswebcam")
cmd.Args = []string{"fswebcam", "./webcam.jpg"}
cmd.Dir = "."
err := cmd.Run()
if err != nil {
panic(err)
}
http.ServeFile(w, r, "webcam.jpg")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
go buildして作成されたバイナリファイルをscpでIntel Edisonに転送し、CUIから実行します。
実行結果
Webブラウザでhttp://<Intel EdisonのIPアドレス>:8080/にアクセスすると、以下のようにJPG画像が表示されます。
何度かリロードしたらこんな感じになります。モデルはうちの三男(犬)。さすが30万画素、ちょっと暗がりだと映像が荒くてさっぱりわかりませんが、とりあえずちゃんと撮影できてます。
さいごに
高解像度のUSBカメラを繋げれば、監視カメラ的な使い方はできそうです。顔認識が出来るともっと面白いですね。今度はその辺をやってみたいと思います!