USBカメラをつないでみる

世の中にごまんとブログはあるので、適当に参考にする。

(35連休)4日目:Raspberry Pi(OpenCVのインストール〜リアルタイム顔認識) - hsuetsugu’s diary

OpenCVをapt-getする。結構大きいな。。。。

luvcviewもあっけなく動作したので、まずはUSBカメラの動作検証までは完了。

 

次は、OpenCVで1フレームごとのキャプチャする。これも世の中にごまんとコードがある。ここで、はまった。python-opencvをインストールしても、またしてもpython3では動作しない。python2.7では動作する。

 

どうやら以下のブログを読むとそもそもOpenCVそのものが ver2ではpython2.7しかサポートしていなかったらしい。よって、OpenCV3をpython3にバインドする、ということを自前でやる必要がある。


できなくもないが、そこまでしてpython3に拘っても面倒なので、ここはpython2.7であきらめることにする。そのうちだれかaptパッケージで用意してくれるさ。

 

ページ先頭のブログのサンプルをpython2.7で実行すると、以下のような予想外のエラーが出る。どうもVNC接続をしている先に表示できない。

f:id:ken_miyashita:20160824233528p:plain

 あたっていた。HDMI画面には普通に表示できた。まあVNCOpenGLは無理だから、cv.NamedWindow() で作るウインドウの調整でなんとかできるか試してみる。おかしい。cv.NamedWindow() は引数に明示しない限りOpenGL使わないはずだが、引数なしのデフォルトでも失敗。

 

仕方ないので、以下を参考にしてなつかしのMESAを入れる。まさかこの期に及んでMESAのお世話になるとは。

Raspberry PiにOpenCVを導入してキャプチャするまでと、トラブルシューティング - Qiita

あれ? MESAはすでに入っていた。ということはこれでは解決しない?

 

以下のブログで同様のトラブルをx11vncを使って回避している。

OpenCVとTightvncサーバー - 満腹居士 七転八倒の記

 

せっかくTightVNC serverを自動起動するようにしてあるが、いったんそれをOFFにしておき、x11vncを自動起動させる。

デフォルト起動を変更 - 技術の無駄遣い

Raspberry Piでリモート操作できるようにするメモ – 1ft-seabass.jp.MEMO

/home/pi/.config/autostart/x11vnc.desktop を準備した。よし自動起動成功。

 

あれ? vncでキーリピートしない。

Sakura/VPS/x11vnc - Home Server Journal

では「x11vnc -repeatで成功」と言っているのでやってみる。成功。

 

webカメラ + opencv + python + vncでふつうに遊べる環境がやっと整った。

デフォルト起動を変更

tightvncserverをデフォルト起動するようにするには、本によると以下のようにすればよろしい。これは動作した。
/etc/init.d/rightvnc というスクリプトを置いてある、という前提だが。

$ sudo update-rc.d tightvnc defaults

でデフォルト起動から外すには?

$ sudo update-rc.d tightvnc disable


一連の /etc/rc{0,1,2,3,4,5,S}.d から /etc/init.d/tightvnc へのシンボリックリンクが消えたので、きちんとデフォルト起動から外れたようだ。

Raspberry Piにつなぐカメラを探してみる

玄関天井近くに無粋なWebカメラを設置したくはないので超小型カメラで解像度は低くてよいもの、がないのか探してみる。

 

なかなか魅力的。4000円なり。

store.shopping.yahoo.co.jp

 

そもそも、本家から出ている。

www.raspberrypi.org

 

が、結局むき出し基板にケースを自作してとか考え始めると、USBカメラの方が無難か。ケーブルの長さもとれるし。以下のものは991円。安い。。。1.9 x 6 x 2.4 cmなら十分小さいかな。

iBUFFALO マイク内蔵120万画素Webカメラ HD720p対応モデル ブラック BSWHD06MBK

f:id:ken_miyashita:20160821234158p:plain

と思ったが、値段は若干あがるが1081円の LOGICOOL ウェブカム HD画質 120万画素 C270 にした。こちらの方が、ロッカーの扉の上に付けるにはいい形だし。

 

f:id:ken_miyashita:20160824221715p:plain

I2Cで温度センサをつないでみる

仕事でI2C接続をさんざん使っていながら、自分の手で直接接続したことがなかったので、初心に帰ってここから。

 

ラズパイマガジンの初心者用部品セットに入っていたADT7410を接続する。

ついに半田付けをする日がきた。ピンヘッダを付けるだけだが。

 

昔、半田付けがうまくできなかったトラウマがあるので(だからソフトウェアに走ったという話もある)、「半田付け コツ」でぐぐると、出てくる。。。 すごい世の中になったものだ。

www.murata.com

 

村田製作所の教えに従い、半田こての先をきちんと清浄したおかげか、8秒のリズムに忠実に従ったおかげか、自分史上もっともきれいな半田付けに成功。テスターでチェックしたが隣同士のショートもしていない。

f:id:ken_miyashita:20160821112508j:plain

さて、ハードウェアの準備は整った。あとはソフトなのだが、2冊の本で利用しているpythonライブラリが異なるので面倒だな。

  • ラズベリーパイ超入門
    pythonでRPiモジュールを利用して説明していた。GPIOを利用するLチカはこれで動作したが、この本ではI2Cの制御にAdafruit_ADS1x15など、独自のモジュールを提供している。手元の温度センサーを直接制御するには不都合。
  • ラズパイマガジン2016/6
    秋月でこのマガジンとペアになっている部品群をまとめて購入したので、pythonコードもこちらの本を参考にすれば問題ない。が、wiringpiがインストールできない。

そうすると、今後も考えるとラズパイマガジンの環境にそろえた方がよさそうだ。wiringpiをなんとか使えるようにしよう。

 

% sudo apt install wiringpi

では「最新だ」と言われるので、どうもネイティブのwiringpiは入っているのだが、それをpythonから使うpythonパッケージがうまく見つけられていないようだ。

 

きちんと本家からもってきてビルドするのが正しいのか?

pypi.python.org

 

いや、ここにあるようにpipでスマートに入れられる、はず。やってみよう。

raspi.tv

 

どうもよく分からないが、python2.7に対しては wiringpi が動作した。python3では駄目。上記のインストールをする前から実は python2.7 では動作していたのかもしれないので何とも言えないなあ。

 

ん? 以下のブログを参考にしてもう一度やってみよう。

E.S.C. — Raspberrry PiにWiringPi2 を(python3)

うまくいった。

どうもpython2.7とpython3.4が併存していると面倒だな。まあ、とにかくpython3でもwiringpiが動作した。

 

では、ラズパイマガジンに従ってソフト環境の準備を続ける。

  • wiringpiをpythonから使えるようにする。
  • apt-get install libi2c-dev
  • Raspberry PiインターフェイスとしてI2Cを有効化
  • ADT7410の全機能を使うためのお呪い
  • wiringpiを利用したサンプルコードを実行

 root権限で実行しないと wiringpi.wiringPiSetup() が失敗する、ということがIDLE上で実行していると見えずはまりかけたが、コンソールから実行すればきちんとエラーが出ていた。

温度表示成功。

が、あまり変化がないので盛り上がらないな。

 

 

 

Lチカしてみた

さっそく秋葉原の秋月でRaspberry Pi 3 Model Bを購入。

 

入門書も購入。もうこれ以上ないという感じのベタな書名だ。

f:id:ken_miyashita:20160820213826j:plain

 

まずはLチカ(LEDチカチカ)をやってみる。ソフトで言えばHello Worldだな。

wiringpiパッケージがうまく見つからず一瞬はまったが、RPiパッケージは動作したので、当面はそちらを使うことにした。

f:id:ken_miyashita:20160820214140j:plain

 

しかし、ブレッドボードを使うと部品を再利用できるのが今更ながら新鮮。高校生のとき(何年前だよ)に半田付けしたときには「何か作るたびに小遣いがなくなる。。。」と悩んだ記憶が。

 

これは楽しめそうだ。

 

どのマイコンにする?

世のマイコンシステムで前から気になっていたものをもう一度調べなおしてみる。

 

Arduino、Raspberry Pi、Intel Edison、mbed。それぞれの違いを紹介 – ニフティIoTデザインセンターブログ 

ラピッドプロトタイピングツールの比較(Arduino vs Raspberry Pi) | 株式会社バニーホップ

あたりを斜め読みして、気になる点をまとめよう。

  • Arduino
    安価なので分、メモリやCPUといったスペックは貧弱、というあたりが気になる。
  • Raspberry Pi
    Linux / python なのでソフト屋から見ると取っ付きはいい。消費電力は大きめなのでAC電源必要。ほぼ10年前のLinux PCと思えばよい。
  • Intel Edison
    超小型ながら、WiFiを搭載しており、さらにBluetoothを扱うこともできます。消費電力小さ目。Linux / python あり。
  • mbed
    C言語を使って開発。オンラインIDEという考え方が素敵だ。
    ネットワーク機能はありませんが、モジュールとして有線、無線LANが販売されている。

で、考える。。。

  • 玄関の靴ロッカーの中に、電源コンセントとLANルータがある。なので消費電力は気にしなくてよいし、Wi-Fiでなくて有線LANでOK。
  • 開発言語はどれでもいいが、あとでクラウドにデータをアップさせたいのでCよりはpythonの方が楽かな?
  • 世の情報量としては、ArduinoRaspberry Piの2強が抜きんでている。

 mbedのオンラインIDEにはかなり興味があるのだが、やはり最初はRaspberry Piから入ってみることにする。

 

では、さっそく購入。ネットで買ってもよいのだが、たまたま暇なこの週末、久しぶりに秋葉原にでも行ってみるかと思い、あえて実店舗にこだわる。

Raspberry Pi 秋葉原の販売店 | タビログ(Tabilog)

 

Raspberry Piもいろいろバリエーションあり。

Raspberry Pi - Wikipedia

値段もたいして変わらないのだから、Pi 3 Model B にしておくか。当分 Wi-Fi は使わないはずだけど。

 

センサーも買わなければ。気圧センサーとカメラが欲しい。

ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信 | Device Plus - デバプラ

Amazon ベスト センサーモジュール キット 20種セット

 

Raspberry Pi本体ボードとセンサーはケーブルで離さないとならない(センサーは靴ロッカーの外に出すので)ことを考えると、簡単な電子工作も必要そう。

 

参考になりそうなブログをちらっと見ておく。この例では人感センサーだが、まあセンサーの値をpythonで読み出す、という流れはこんなものか。あっけない。

RaspberryPiで人感センサーを作る - Qiita

 

あとは、参考文献も購入。以下の本にするかは分からないが、このあたりの本は1冊は買っておこう。

O'Reilly Japan - Raspberry Piをはじめよう