電子工作をやっていて困ることの一つに、画像周りの処理があります。カメラで何か撮ったり写真の内容を解析したりといった作業は、Arduinoだとちょっと厳しいし、かといってRaspberry Piでやるにしても環境構築から始める必要があるなど、なかなかハードルが高いものでした。
今回は、そういった画像処理周りを楽に扱えるJeVoisという商品を紹介&使ってみたレポートをお届けします。公式サイトはこちら。ちなみにJeVoisはフランス語のようで、読み方はジュ・ボァが近いです。ジェ・ボイスじゃないんですね。
JeVoisは、2017年初頭あたりにKickstarter上でファンディングに成功した、新しいマシンビジョンカメラです。このカメラは、写っているものにエフェクトをかけたりARマーカーを認識したりといった機能を内蔵しています。その結果をホストとなるコンピュータへ映像として表示しつつ、シリアル通信でその結果を送信してくれます。
超小型のLinuxマシンとカメラが一体となった本体が外部からはUSBカメラ+シリアルポートとして認識され、JeVois側で先に処理した結果を映像やシリアル通信として見られるというようにできています。
スイッチサイエンスでは、こちらのページよりお買い求めいただけます。
■とりあえず動かしてみる
百聞は一見にしかずということで、実際に動かしてみましょう。
JeVoisとRaspberry Pi 3を並べてみました。非常に小さい。
もう一方をPCに挿すと、なんとUSBカメラとして認識されます。
筆者はWindows10のPCを使っているため、ここでおもむろに「カメラ」アプリを起動すると、なんと商品の紹介動画が流れてきました。
そして、このような画面になります。ちょっと混乱するかもしれませんが、この画面に現れている文字や図形は全部WEBカメラとしてホストPCから認識されているJeVoisからの映像です。ホストPC側で画像処理の結果をオーバレイ表示しているのではなく、JeVoisから処理結果が映像として送られてきています。
また、JeVoisを挿したときに現れたCOMポートへ「info」と送ってあげます。
送る側のソフトは何でも良いので、とりあえずArduinoIDEのシリアルモニタから送りました。すると、カメラの動作情報が返ってきました。
というふうに、JeVois側がよしなにいろいろやってくれるので、僕らはその結果を知るだけ!という優しい仕組みになっています。
■セットアップ
上のほうでは特にセットアップをせずとも動作確認ができますが、Windows10のカメラアプリではすべての機能が使えないので、少しばかりセットアップをします。主に2点。
- 別のカメラアプリを導入する
- グレースケール映像に対応させる
どちらも基本的には公式のクイックスタートガイド(英語)を参照して進めていくのですが、一点、「Windowsをホストコンピュータとして使い始める」内の「グレースケールキャプチャの有効化」欄で注意が必要です。
グレースケール映像を取得するにあたって、Y800モードなる映像ストリームを受信します。そのために追加でYUVxfm.dllなるファイルをWindowsに追加する必要があります。ここで、64bit版OSを使っている人はMicrosoftのサポートページを見ながら、別ディレクトリと別ツールを使わなければなりません。
筆者は、カメラアプリはクイックスタートガイドにも紹介されているAMCapを使いました。
■いろいろな機能を試してみる
他にもいろいろ機能がついているので、試してみます。JeVois内蔵の機能を切り替えるには、2つの方法があります。
- USBカメラとしての解像度を変更する
- シリアル通信で機能を指定する
USB接続なし、例えばArduinoからシリアル通信で処理結果をもらうなどの場合は後者の方法を取ります。今回は、PCにつないで処理結果を映像で見たいので、前者の方法をとります。ちなみに、USBカメラとして映像を取得しつつシリアル通信で機能を切り替えるというのはできません。
カメラアプリから、映像フォーマットを選びます。
JeVoisは非常に多様な形式がリストアップされるデバイスで、このひとつひとつが別機能に割り当てられています。試しに、「色空間: YUY2 / サイズ: 320x308」を選んでみます。聞いたこともない半端な解像度ですが、これがJeVoisの機能切り替えの仕組みなのです。
なんと、この解像度はTensorFlowのMobileNetsとよばれる画像認識用学習済みモデルを実行する環境になっています。例えば、キーボードに向けてみると…
ここで、シリアルモニタ等からsetpar serout USB
と送ってあげます。これは、USB接続のシリアル通信を使うというコマンドで、実行すると画像処理等の結果(今回はMobileNetsの分類結果)がつらつらと流れてきます。
こんな感じ。おおよそキーボードとして認識されているとわかります。
他にも試して見ましょう。「色空間: YUY2 / サイズ: 320x286」とやると、QRコードの認識機能に切り替わります。
また、setpar serout USB
とやるほかにsetpar serstyle Fine
とも送ってあげると、次のようになります。
他にもいろいろ機能があるので、ぜひご自身の目で確かめてみてください。どんなことができるのかはスタートアップガイドの「Included machine vision algorithms and demos」から見ることができます。
また、シリアル通信の設定は、次の資料を参考にしました。
- Standardized serial messages formatting
- Command-line interface user guide
- それぞれのデモの情報ページ(例: QR)
例えば、QRコードを読むデモのページには「Serial Messages」と書かれた段落があります。メッセージタイプは2Dで、URLなどのデコード結果はextraというフィールドに含まれている、と書かれています。
「Standardized serial messages formatting」のページには、「2Dフォーマット」がどういう形式でデータを含んでいるかが記述されています。今欲しいのはextraフィールドなので、serstyleをDetailかFineにすれば良さそうです。というわけで、setpar serstyle Fine
というコマンドが作られました。
他には、開発者向けのチュートリアルとしてJeVois user tutorialsが公開されており、自分で作った学習済みモデルを動かすこともできるようです。利用ドキュメントのトップはこちら。
というわけで、駆け足気味でしたがJeVoisの紹介と実際に動作させてみた様子をお届けしました。似たようなものとしてはGoogleのVision Kitもありますね。あちらはMovidiusアクセラレータがあるぶん強力ですが、サイズも大きくなっています。圧倒的な小ささを備えているのがJeVoisの魅力の一つではないでしょうか。みなさんもぜひ、小型マシンビジョンカメラのJeVoisを使ってみてください。
JeVoisは、こちらのページよりお買い求めいただけます。