ev3devとWEBカメラでオリジナルカメラを作る【前編】

## はじめに
EV3で動くLinux環境ev3devを使って開発します。この記事は、EV3にev3devをインストールし、SSH接続できている状態であることを前提にしています。
環境構築ができていない方はこちらの記事を参考にしてください。
>
[mindstorm-EV3をLinuxで制御しよう! ev3dev OSのインストールととSSH接続](http://qiita.com/murotani/items/46f905bec33b1673c41a)


##必要なもの
- WEBカメラ　　

[　Microsoft Corp. LifeCam HD-3000](https://www.microsoft.com/accessories/ja-jp/products/webcams/lifecam-hd-3000/t3h-00017)

- USBハブ

　[ELECOM U2H-SN4BRD](http://www2.elecom.co.jp/products/U2H-SN4BRD.html)

##つくるもの
ev3devとWEBカメラを使って簡単なカメラを作ります。
撮影した写真をブラウザから確認、保存できるようにします。
側をしっかり作っていないので分かり辛いですが、シャッター（タッチセンサー）を押すと、カメラが画像を取得して、PCのブラウザに表示するという仕組みです。
![スクリーンショット 2016-12-31 19.26.52.png](https://qiita-image-store.s3.amazonaws.com/0/149019/935c175b-4245-8223-1988-f847bb8d81ea.png)
シャッターを押すと..
![1 (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/149019/70e5fd26-1824-089d-6c2b-2676c7ff79a3.jpeg)
リアルタイムにPCのブラウザに画像が表示されます。
![1 (2).jpg](https://qiita-image-store.s3.amazonaws.com/0/149019/8e900c39-a5e6-4465-f90f-87612da23b2a.jpeg)



##環境構築
WEBカメラから画像を取得するにはfswebcamというコマンドを利用します。
また、今回利用するプログラムをGitHubからクローンします。

```
#fswebcamのインストール
robot@ev3dev:~$ sudo apt-get install fswebcam
#プログラムのダウンロード
robot@ev3dev:~$ git clone https://github.com/muro-tani/ev3Cam.git
robot@ev3dev:~$ cd ev3Cam
robot@ev3dev:~/ev3Cam$ npm install
```
##実行
EV3インテリジェントブロックにUSBハブを接続し、そこにUSBドングルとWEBカメラを接続します。
次に、EV3インテリジェントブロックの１番ポートにタッチセンサーを接続します。
![12b0b78d-71f3-ccf6-c4df-8df6751cc787.png](https://qiita-image-store.s3.amazonaws.com/0/149019/58968cfa-4943-5220-5ab0-ea92a3ab2b7a.png)


その後、プログラムを起動させます。

```
robot@ev3dev:~/ev3Cam$ node index.js
```
[http://ev3dev.local:1337](http://ev3dev.local:133)にアクセスすれば完了です。

タッチセンサーを押して離すと、カメラが取得した画像がブラウザをに表示されます。

##WEBカメラの認識

lsusbコマンドで確認します。

```
robot@ev3dev:~$ lsusb
Bus 001 Device 004: ID 045e:0779 Microsoft Corp. LifeCam HD-3000
Bus 001 Device 003: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
```


##WEBカメラから画像を取得
fswebcamコマンドを実行してみましょう。第一引数に保存先のファイル名を指定します。

```
robot@ev3dev:~$ fswebcam test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'.
```
詳しいオプションはこちらの通りです。

```
robot@ev3dev:~$ fswebcam -h
Usage: fswebcam [<options>] <filename> [[<options>] <filename> ... ]

 Options:

 -?, --help                   Display this help page and exit.
 -c, --config <filename>      Load configuration from file.
 -q, --quiet                  Hides all messages except for errors.
 -v, --verbose                Displays extra messages while capturing
     --version                Displays the version and exits.
 -l, --loop <seconds>         Run in loop mode.
 -b, --background             Run in the background.
 -o, --output <filename>      Output the log to a file.
 -d, --device <name>          Sets the source to use.
 -i, --input <number/name>    Selects the input to use.
 -t, --tuner <number>         Selects the tuner to use.
 -f, --frequency <number>     Selects the frequency use.
 -p, --palette <name>         Selects the palette format to use.
 -D, --delay <number>         Sets the pre-capture delay time. (seconds)
 -r, --resolution <size>      Sets the capture resolution.
     --fps <framerate>        Sets the capture frame rate.
 -F, --frames <number>        Sets the number of frames to capture.
 -S, --skip <number>          Sets the number of frames to skip.
     --dumpframe <filename>   Dump a raw frame to file.
 -s, --set <name>=<value>     Sets a control value.
     --revert                 Restores original captured image.
     --flip <direction>       Flips the image. (h, v)
     --crop <size>[,<offset>] Crop a part of the image.
     --scale <size>           Scales the image.
     --rotate <angle>         Rotates the image in right angles.
     --deinterlace            Reduces interlace artifacts.
     --invert                 Inverts the images colours.
     --greyscale              Removes colour from the image.
     --swapchannels <c1c2>    Swap channels c1 and c2.
     --no-banner              Hides the banner.
     --top-banner             Puts the banner at the top.
     --bottom-banner          Puts the banner at the bottom. (Default)
     --banner-colour <colour> Sets the banner colour. (#AARRGGBB)
     --line-colour <colour>   Sets the banner line colour.
     --text-colour <colour>   Sets the text colour.
     --font <[name][:size]>   Sets the font and/or size.
     --no-shadow              Disables the text shadow.
     --shadow                 Enables the text shadow.
     --title <text>           Sets the main title. (top left)
     --no-title               Clears the main title.
     --subtitle <text>        Sets the sub-title. (bottom left)
     --no-subtitle            Clears the sub-title.
     --timestamp <format>     Sets the timestamp format. (top right)
     --no-timestamp           Clears the timestamp.
     --gmt                    Use GMT instead of local timezone.
     --info <text>            Sets the info text. (bottom right)
     --no-info                Clears the info text.
     --underlay <PNG image>   Sets the underlay image.
     --no-underlay            Clears the underlay.
     --overlay <PNG image>    Sets the overlay image.
     --no-overlay             Clears the overlay.
     --jpeg <factor>          Outputs a JPEG image. (-1, 0 - 95)
     --png <factor>           Outputs a PNG image. (-1, 0 - 10)
     --save <filename>        Save image to file.
     --exec <command>         Execute a command and wait for it to complete.
```

##後編

[ev3devとWEBカメラでオリジナルカメラを作る【後編・プログラム解説】](http://qiita.com/murotani/items/530a5586bcc7a77b9d7b)