[メモ] ASUS TinkerBoard : ラズパイのカメラモジュールを使う

ASUS Tinker Boardで、｜TinkerOS 2.0.1 beta ラズパイのカメラモジュール(CSI接続)が動くようになったよ。


- MJPG-streamer使用。ブラウザでビデオが見れる。(スマホの画面を撮ってる)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/228f57ba-7300-49cc-4a32-e7c0e6878e36.png)



## 概要
- TinkerOS 2.0.1 betaのリリースノート? みてたら

> 10\. Pre-support OV5647 & IMX219 (Reference ["Camera_Config.pdf"](http://dlcdnet.asus.com/pub/ASUS/mb/Linux/Tinker_Board_2GB/Camera_Config_for_v2.0.1_20170821.pdf)).

ん？この型番って、ラズパイのカメラモジュールか!?

- [CAMERA MODULE](https://www.raspberrypi.org/documentation/hardware/camera/)
    - Camera Module v1 :  OmniVision OV5647
    - Camera Module v2 : Sony IMX219

...

- 画質は... 絵がうつってる程度.. 
- `/dev/video?` にて、使用する模様
- opencvとか、つかえないっぽい。※ `c = cv2.VideoCapture(0)` で、エラーがでる

<!-- \# TinkerOS 2.0.1betaでの初期設定を書こうと思ってたんだが.. -->

## 環境

- [ASUS Tinker Board](https://www.asus.com/us/Single-Board-Computer/Tinker-Board/)
- TinkerOS: [`20170817-tinker-board-linaro-stretch-alip-v2.0.1.img.zip`](http://dlcdnet.asus.com/pub/ASUS/mb/Linux/Tinker_Board_2GB/20170817-tinker-board-linaro-stretch-alip-v2.0.1.img.zip)
- ラズパイの[カメラモジュール V2.1] (https://www.raspberrypi.org/products/camera-module-v2/)


## 説明/手順

[Camera_Config.pdf](http://dlcdnet.asus.com/pub/ASUS/mb/Linux/Tinker_Board_2GB/Camera_Config_for_v2.0.1_20170821.pdf) に書かれているままなのだが..
pdfから、コピペするとうまくいかないので、ここにメモっとく

1. ラズパイとおなじように、カメラのリボンケーブルを挿す。<br>本体中央部のコネクタ(HDMIとイヤホンジャックの間)。リボンケーブル端子の接触面は、microSDの方向を向く
2. TinkerOS 2.0.1betaをいつも通り、microSDに焼いて、起動。イメージそのままで特に設定変更無し。
3. `/dev/video0` となるらしい
4. 以下のコマンドで、動作確認。ウィンドウが開いて、プレビューが見れるハズ。

    ```bash
gst-launch-1.0 v4l2src ! video/x-raw,format=NV12,width=640,height=480 ! videoconvert ! autovideosink
```


### プレビュー / Preview

```shell-session
$ gst-launch-1.0 v4l2src ! videoconvert  ! autovideosink
$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=640,height=480 ! videoconvert ! autovideosink
```

### 静止画撮影(JPG) / Capture

```shell-session
$ gst-launch-1.0 v4l2src num-buffers=10 ! video/x-raw,format=NV12,width=640,height=480 ! jpegenc ! multifilesink location=image_%02d.jpg
$ gst-launch-1.0 v4l2src num-buffers=10 ! video/x-raw,format=NV12,width=640,height=480 ! jpegenc ! multifilesink location=image.jpg
```

### 動画撮影 / Recording

```shell-session
$ gst-launch-1.0 v4l2src num-buffers=512 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! queue ! mpph264enc ! queue ! h264parse ! mpegtsmux ! filesink location=/home/linaro/vga.ts
```

### JPG表示 / Show Picture

```shell-session
$ gst-launch-1.0 playbin uri=file:///home//linaro//image.jpg
$ gst-launch-1.0 filesrc location=image.jpg ! decodebin ! imagefreeze ! autovideosink
```

### 動画再生 / Play Video

```shell-session
$ gst-launch-1.0 playbin video-sink=rkximagesink uri=file:///home/linaro/vga.ts
$ gst-launch-1.0 uridecodebin uri=file:///home/linaro/vga.ts ! rkximagesink
```

### MJPG-streamer (Webブラウザで動画を見る)

#### インストール / Install

```shell-session
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install subversion libjpeg62-turbo-dev imagemagick
$ cd ~  ## 追加
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/
$ cd code/mjpg-streamer
$ make
$ sudo make install
```

#### MJPG-streamer開始 / Start MJPG-streamer

```
$ cd ~/code/mjpg-streamer
$ ./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www"
```

- Webブラウザから、アクセスする。
    - TinkerBoard自身からなら: `http://127.0.0.1:8080/?action=stream` 
    - ほかのPCからなら: `http://<TinkerBoardのIP>:8080/?action=stream` 
- うまく動かないときは、電源を一回切って、祈りながら、再起動してみる
- かたまったら、リロード


## その他

- メモ

    ```shell-session
$ uname -a
Linux linaro-alip 4.4.71+ #1 SMP Thu Aug 17 00:28:01 CST 2017 armv7l GNU/Linux
```