Raspberry PI3 でソニーセミコンダクタソリューションズのIU233をOpenCV経由で動かす①

# 概要
今年の[みんなのラズパイコンテスト2017](http://coin.nikkeibp.co.jp/coin/itpro-s/seminar/LIN/abstract/index.html)で，ソニーセミコンダクタソリューションズさんの「[IU233](http://www.sony-semicon.co.jp/products_ja/IS/sensor3/index.html)」をお借りすることができました．
IU233をラズパイで動かす手順については，「[ビジョンプロセッシング・コミュニティ](https://www.visionproc.org/IU233_usage.php)」にて説明がなされているのですが，これを実際にプログラムに組み込んで使用するためにOpenCV上からアクセスすることを目指してトライしてみました．

# 目次
1 環境
2 IU233の動作確認
3 OpenCVインストール

# 1 環境
* Raspberry PI3 modelB
* Jessie (2017-07-05 : 8.0)
* IU233
* Python 3.4.2
* OpenCV 3.2.0

# 2 IU233の動作確認
## 開封
![IMG_2242.JPG](https://qiita-image-store.s3.amazonaws.com/0/47773/e668ab45-8eb2-e56c-1d00-5367e0e189d1.jpeg)

白黒カメラを使おうと思って応募したのですが，中にはカラーと白黒の二つのカメラも入っていました．
梱包されていたのは，

* [IU233N2-Z](http://www.chip1stop.com/dispDetail.do?partId=SONY-0004276&mpn=IU233N2-Z)（カラー）
* [IU233N5-Z](http://www.chip1stop.com/dispDetail.do?partId=SONY-0004277&mpn=IU233N5-Z)（白黒）
* [IU233N USB-EVB](https://www.visionproc.org/iu233_download.php?key=IU233N_USB-EVB_Spec)（上記カメラをUSB接続するための変換コネクタ）
* [IU233N RPi-EVB](https://www.visionproc.org/iu233_download.php?key=IU233N_RPi-EVB_Spec)（上記カメラをフレキシブルケーブルに接続するための変換コネクタ）
* フレキシブルケーブル（RaspBerry PIに接続するためのフレキシブルケーブル）

 * [Raspberry PI用](https://www.adafruit.com/product/1648)
 * [Raspberry PI Zero用](https://www.switch-science.com/catalog/3195/)

##  [IU233N USB-EVB](https://www.visionproc.org/iu233_download.php?key=IU233N_USB-EVB_Spec)＋[IU233N2-Z](http://www.chip1stop.com/dispDetail.do?partId=SONY-0004276&mpn=IU233N2-Z)による撮影

![IMG_2318.jpg](https://qiita-image-store.s3.amazonaws.com/0/47773/cfd53f46-d446-3e7c-90b4-df46902312aa.jpeg)

windows10にUSBで接続して，動作確認.
IU233N2-Zを小っさいコネクタにはめ込んで，そのままMicro USBに差し込んだらwindows上で即認識．

USB カメラとして確認．作業的にはなにも無し
![スクリーンショット 2017-08-01 11.11.29.png](https://qiita-image-store.s3.amazonaws.com/0/47773/8d45c383-dcf8-56fb-a820-88f916d55a09.png)

適当なviewerがなかったので，Python + OpenCVでキャプチャ

```py3
import cv2

capture = cv2.VideoCapture(0)
if capture.isOpened() is False:
    print("IO Error")
cv2.namedWindow("Capture", cv2.WINDOW_AUTOSIZE)

while True:
    ret, image = capture.read()
    
    if ret == False:
        continue
    cv2.imshow("Capture", image)
    
    if cv2.waitKey(1) == 27:
        cv2.imwrite("image.png", image)
        break
cv2.destroyAllWindows()
```

結果
![image.png](https://qiita-image-store.s3.amazonaws.com/0/47773/5d8a85c2-0546-9ef4-6fc1-2822ce06d519.png)

今回は動作確認のみなので，画像解像度やフレームレートは弄らず．

## [IU233N5-Z](http://www.chip1stop.com/dispDetail.do?partId=SONY-0004277&mpn=IU233N5-Z)＋[IU233N USB-EVB](https://www.visionproc.org/iu233_download.php?key=IU233N_USB-EVB_Spec)によるRaspberry PI3への接続

### 配線
こんな感じ
![IMG_2319.JPG](https://qiita-image-store.s3.amazonaws.com/0/47773/11678681-1eb0-13f6-96f4-40f3c71b2a93.jpeg)

### 動作確認
[IU233用VPF画出し手順](https://www.visionproc.org/IU233_usage.php)に従って動作確認．

※この部分について必要であれば追記します


# 3 OpenCVでの動作確認
## OpenCVをRaspberry PIにインストール
いくつかのサイトを参考にインストール．
特に参考になったのは「[OpenCV + Python3 on Raspberry Pi](http://qiita.com/nanbuwks/items/422eb405ceef84826ab4)」．というかほぼその通り．

## OpenCVにUSB接続で画像を表示

## Raspberry PIのカメラモジュールをOpenCVに接続

### raspicam_cvのインストール
[ここ](http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_camera_opencv/)や[ここ](http://qiita.com/NaotakaSaito/items/f1f1548c8b760629cd26)を参考に．

必要なツール，ライブラリをインストール

```bash:
sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff5-dev libtiff4 libtiffxx0c2 libtiff-tools

sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs libavcodec-dev libavcodec56 libavformat56 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine2-ffmpeg libxine2-dev libxine2-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev libgtk2.0-dev pkg-config
sudo apt-get install libswscale-dev
```

### RasPi-CAM用ライブラリのインストール

https://github.com/robidouille/robidouille/tree/master/raspicam_cv

### Raspberry Pi userland libraryのインストール

```bash:
sudo apt-get install gcc g++ libx11-dev libxt-dev libxext-dev libgraphicsmagick1-dev libcv-dev libhighgui-dev
mkdir -p ~/git/raspberrypi
cd ~/git/raspberrypi
git clone https://github.com/raspberrypi/userland.git
cd userland
./buildme
```

### raspicam libraryのインストール

```bash:
cd ~/git
git clone https://github.com/robidouille/robidouille.git
cd robidouille/raspicam_cv
mkdir objs
make
```

ところがここでエラー発生
raspicam_cvのmakeでエラーが．．．
原因は，フォルダ構成を上記の参考と異なる位置にしていてMakeFileのパスが異なっていたこと．
さらにraspicam_cvのgitの置き場を自分で変更していたので，そこを修正．

パスの変更

```bash:
#CFLAGS_OPENCV = -I/usr/include/opencv
CFLAGS_OPENCV = -I/usr/local/include/opencv
```

OpenCV3用に opencv_legacy を削除

```bash:
#LDFLAGS2_OPENCV = -lopencv_highgui -lopencv_core -lopencv_legacy  ....
LDFLAGS2_OPENCV = -lopencv_highgui -lopencv_core  ....
```

これで再度make
しかし，またエラーが発生．

いろいろ調べていくと（詳細をメモし忘れて不明．．．orz）CvRoundが見つからないなどのエラーが発生して，コンパイルできない．
これの原因で，OpenCV3.2で同様のエラーが起きているという事案を見つけて，今度はOpenCVを3.1へダウン．

最終的にraspicam_cvをMakefile書き換えてmake．
これでコンパイルが通った．




・
・
・

しかし．．．
[GitHub： raspicam_cv make error (cvRound) #16](https://github.com/robidouille/robidouille/issues/16)によると，

> Hi,
> Change BUILD_TYPE=release in Makefile
> Before, apply issue #15

とあり，その通りにMakeFileを設定して，OpenCV3.2をインストール ＆ makeすると，コンパイルが通ってしまった．．．．orz


あとで3.1は消しました．．．