TinkerOS V2.0.8にてISPの構造が変更されたことで、カメラの取扱いについて以前までのバージョンと若干異なる対応が必要となります。本稿では、現行の最新バージョン(V2.1.16)で確認したカメラの接続と設定、および使用方法を解説いたします。
内容
1. Tinker Boardとの接続
1.1. 必要な機材
(1) カメラモジュール本体
Tinker BoardにおけるCSIカメラは、IMX219およびOV5647をサポートしています。
カメラモジュールの接続方式に関して、本稿ではフラットケーブル式とUSBケーブル式の2種類を取り扱います。お手持ちのカメラに合わせて、ご参照ください。
(2) Tinker Board本体
(3) 電源(5V, 3A以上のもの)
安定した動作のために必要です。(低電力状態での動作は、思わぬ不具合につながるおそれがあります。)
(4) microSDカード
Tinker OSのイメージファイルを書き込み、Tinker Board本体に挿入します。
(5) HDMIケーブル
(6) HDMIディスプレイ
(7) キーボード
(8) マウス
(9) LANケーブル※
※無線接続時は不要
1.2. 機材の接続
マウス、キーボード、HDMIケーブル、LANケーブル、電源の接続は下図のように行います。通電するとOSが起動するため、[wc_highlight color=”yellow” class=””]電源を入れる前にカメラの接続を行います。[/wc_highlight](次節の項目をご確認ください)
1.3. カメラの接続
フラットケーブル式の場合
フラットケーブルには、下図のように両端の接点(金属部)が同じ側の面にあるものと、異なる面にあるものとがあります。
この2つには互換性がありません。入れ替えて使用すると、カメラモジュールやTinker Board本体の故障の原因となります。
必ずカメラモジュールに付属のケーブルを使うようにしてください。
[wc_highlight color=”yellow” class=””]フラットケーブル式のカメラモジュール接続時は、必ずTinker Boardの電源を切った状態で行います。いま一度ご確認ください。[/wc_highlight]
Tinker Boardには、フラットケーブルを接続できそうな部分が2か所あります(ディスプレイ用コネクタとカメラ用コネクタ)。今回使用するカメラ用コネクタの位置は下図の通りです。
まずは白いツメ部分を引き上げ、ケーブルを差し込めるようにします。その後フラットケーブルを、金属接点のある側がHDMIコネクタ側を向くよう差し込みます。
このとき、ケーブルが突き当たる位置までしっかりと差し込んでください。(差し込みが甘くなっていると、カメラが機能しません。)
差し込んだら白いツメ部分をやさしく押し込み、ケーブルがコネクタから抜けないようロックしてください。
接続を終えたら、電源を入れてTinker OSを起動します。
なお、コネクタの形状や規格が合わない、Tinker OSにドライバが用意されていないなどの理由で、フラットケーブル式のカメラモジュールでもTinker Boardで使用できないものがあります。接続確認済みのカメラモジュールとして、Physical Computing ストアでは次の6種類を扱っています。
- Tinker Board向け187度超広角・小型カメラモジュール [SE219FE-00-01-CB]
- Tinker Board用カメラモジュール(Adjustable Focus) [TSI-TB039-AF(B)]
- Tinker Board用カメラモジュール(Fisheye Lens) [TSI-TB039-FL(G)]
- Tinker Board用赤外線カメラモジュール(Fixed Focus) [TSI-TB039-FF(E)]
- Tinker Board用赤外線カメラモジュール(Adjustable Focus) [TSI-TB039-NAF(F)]
- Tinker Board用赤外線カメラモジュール(Fisheye Lens) [TSI-TB039-NFL(H)]
USBケーブル式の場合
USBカメラは、(Tinker Board起動中でも)USBコネクタに接続したタイミングでTinker Boardに認識されます。
ただしカメラの相性によっては認識できない可能性があるため、あらかじめ動作確認済み機種などの情報を集めておく必要があります。
1.4. 設定および接続確認
フラットケーブル式、USBケーブル式いずれの場合においても、接続実績のあるカメラモジュールであれば、OS上での設定やドライバのインストールなどを行う必要は通常ありません。
カメラモジュールがTinker OSに認識されていれば、/dev/video*(*は0, 1, 2などの数字)というデバイスファイルが作成されています。たとえばLXTerminalから、
[wc_code]$ ls /dev/video*[/wc_code]
などのコマンドにより確認できます。
またUSBケーブル式のものに関しては、次のコマンドを利用する方法もございます。
[wc_code]$ lsusb[/wc_code]
lsusbコマンドを実行すると、Tinker BoardにUSB接続された機器の一覧が表示されます。一覧中に接続したUSBカメラが存在していれば、接続されたUSB機器として認識されています。
認識されないときは……
まず、Tinker Boardの設定を確認します。LXTerminalから、
[wc_code]$ sudo tinker-config[/wc_code]
を実行すると、設定画面が表示されます。
キーボードの方向キーでInterfacing Options –> Camera と移動、選択(Enterキー)していきます。
デフォルトのインタフェース設定ではIMX219が選択されています。OV5647をお使いの場合は、ここでOV5647を選択するようにします。
設定を終えたら再起動です。コマンド経由でも、
[wc_code]$ sudo reboot[/wc_code]
により再起動を行うことができます。
次に、media-ctlコマンドで確認します。
[wc_code]$ sudo apt install v4l-utils[/wc_code]
[wc_code]$ media-ctl -p[/wc_code]
“entity 7” という部分にimx219あるいはov5647といった名前が表示されていれば、Tinker Boardからモジュールが検出されています。
entity 7が見つからない場合は、モジュールの接続が正しく行われているか改めてご確認ください。
2. 使用方法
以降では、接続したカメラモジュールを使って静止画や動画の撮影を行う方法をご紹介します。
ここではフラットケーブル式のカメラを扱う一例としてGstreamer(Tinker OSにデフォルトでインストールされているマルチメディアフレームワーク)を、USBケーブル式のカメラを扱う例としてCheeseというソフトウェアを用いることにします。
Cheeseのインストールは、LXTerminal上で
[wc_code]$ sudo apt install cheese[/wc_code]
のようにしてインストールすることができます。インストールした後は、GUIメニューのSound&Videoの項目から起動できるようになります。
2.1. 動作確認
Tinker Board Wiki 上ではカメラテスト用のtest_camera.shというスクリプトファイルが記載されておりますが、[wc_highlight color=”yellow” class=””]確認を行った最新バージョン(V2.1.16)では削除[/wc_highlight]されているようです。
フラットケーブル式の場合
Gstreamerを用いて行います。LXTerminalを開き、ターミナル上で次のコマンドを入力します。
[wc_code]$ gst-launch-1.0 rkcamsrc io-mode=4 ! video/x-raw,format=NV12,width=640,height=480 ! rkximagesink[/wc_code]
実行すると、ウィンドウ上にカメラ画像のプレビューが表示されます。
USBケーブル式の場合
Cheeseを起動すると、カメラのプレビュー画像と下部にコントロールパネルが付いたウィンドウが表示されます。
2.2. 静止画の撮影
フラットケーブル式の場合
ターミナル上で次のコマンドを入力します。
[wc_code]$ gst-launch-1.0 rkcamsrc num-buffers=10 io-mode=4 ! video/x-raw,format=NV12,width=640,height=480 ! jpegenc ! multifilesink location=image.jpg[/wc_code]
実行すると、カメラのキャプチャ画像が “location=” にて指定した名前(ここではimage.jpg)で保存されます。
保存された画像はファイルマネージャから開くほか、ターミナル上から次のコマンドにより表示することができます。
[wc_code]$ gst-launch-1.0 filesrc location=image.jpg ! decodebin ! imagefreeze ! autovideosink[/wc_code]
USBケーブル式の場合
- Cheeseのウィンドウ下部左側のPhotoボタンを押し、静止画撮影モードにします。
- 下部中央の録画マークボタンを押します。
- 3, 2, …とカウントダウンが始まり、0のタイミングで画像が撮影されます。
- 撮影された画像は、ボタン下のサムネイル領域に表示されます。右クリックメニューからSave asを選択すると、ファイルとして保存することができます。
2.3. 動画の撮影
フラットケーブル式の場合
ターミナル上で次のコマンドを入力します。
[wc_code]$ gst-launch-1.0 rkcamsrc num-buffers=512 io-mode=4 isp-mode=2A tuning-xml-path=/etc/cam_iq/IMX219 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! queue ! mpph264enc ! queue ! h264parse ! mpegtsmux ! filesink location=/home/linaro/vga.ts[/wc_code]
実行してからCtrl-Cで中断するまでの間、動画が撮影されます。動画は “location=” にて指定した名前(ここではvga.ts)で保存されます。
保存された動画はファイルマネージャから開くほか、ターミナル上から次のいずれかのコマンドにより再生することができます。
[wc_code]$ gst-launch-1.0 playbin video-sink=rkximagesink uri=file:///home/linaro/vga.ts[/wc_code]
[wc_code]$ gst-launch-1.0 uridecodebin uri=file:///home/linaro/vga.ts ! rkximagesink[/wc_code]
USBケーブル式の場合
- Cheeseのウィンドウ下部左側のVideoボタンを押し、動画撮影モードにします。
- 下部中央の録画マークボタンを押します。録画マークが停止マーク(■)に変わり、動画の撮影が始まります。
- 停止マーク(■)ボタンを押すと動画の撮影を終了します。
- 撮影された動画は、ボタン下のサムネイル領域に表示されます。右クリックメニューからSave asを選択すると、ファイルとして保存することができます。
【参考】
https://tinkerboarding.co.uk/wiki/index.php/CSI-camera-2.0.8
Tinker OS V2.0.8以降でのCSIカメラの設定、撮影方法に関するWikiです。本稿で紹介したものを含むいくつかの利用方法について、必要なターミナル上での操作等がまとめられています。