Raspberry Pi Advent Calendar 4日目です。
AliExpressの独身の日セール
11月は独身の日とブラックフライデーとで安売りをブッこまれまくってて良くないですね。つい変な買い物をしてしまう〜。
ちょうどこのころ、仕事でラズピッピカメラを擦りまくって若干不足ぎみになったので、ちょっと買い足そうかなと思ってAliExpressみてみたら、まあ色々あったわけですが、なかでもV1カメラがバカみたいな安さで売られていてビビりました。価格はなんと260円くらい。なんでやねん。通常価格の300円でも安すぎる。こんなに安いなら2コ買ってもええやろと思ってポチポチしました。
その後、V1カメラ系でフォーカス調整に対応したモデルというものも発見して、使えるのかわからないけどポチってみました。こちらは1000円くらい。
着弾。
V1カメラは丁寧にリボンケーブルまで付属。リボンケーブルだけで200円しても本来おかしくはないのでは。ただし、このカメラモジュールが正規のものとはもちろん思っていないので、大昔に買った正規のやつと比較してみます。左が今回来たもの、右が正規品。基板のパターンがわりと違うっぽいですね。左にはR6、R7のパターンがあります。
裏側。こちらはほとんど同じ配置に見えますが、左上がちょっと違うみたいです。
つかえるのか?
Buster環境のraspistillコマンドで撮影してみました。まずは今回来たほうを2つ分。
こっちは正規品の方。
比べてみると、AliExpressからきた方はちょっと青みがかってるっぽいですね。正規品の方のほうが色はあってそうです。ただ、全く使えないということはないので、これで200円ちょっとで遊べるなら全然アリです……やばい。
フォーカス調整対応カメラ
続けてフォーカス調整対応らしいカメラのほう。こちらはPiZeroのCSIポート用に設計されているため、普通のRaspberry Piにつけるなら変換が必要です。持ってないな…と思ったけれど、前に買い間違えたと思っていたケーブル延長アダプターと、変換になるケーブルを組み合わせたら使えました。もしかして購入した当時の自分はこれを想定していたのか??
普通に撮影するのは問題なくできました。色味も正規品のそれに近いのでクオリティよしですね。
で、フォーカス調整の方はというと……動きませんでした。CSIにはI2Cが含まれているらしく、/boot/config.txtで有効化してやるとbus0で見えるようになるのですが、コマンドを送り込んでも動く気配がないので、中のモーターが壊れているか、コマンドが違う可能性がありそうでした。
設定の方はi2c_vcの有効化が必要なようですが、i2c_armの有効化も必要そうでした。設定後は要再起動。
$ sudo vi /boot/config.txt dtparam=i2c_arm=on dtparam=i2c_vc=on
raspivid -t 0 &などしてバックグラウンドでカメラを動かしっぱなしにしながらi2cdetectコマンドでI2Cバスの0を見ると、以下の通り0x0cが見えます。カメラを止めると見えなくなるので注意。0x36はマスタースレーブの変換らしいのでカメラ用のものではなさそうです。
pi@yamanooku:~/RaspberryPi/Motorized_Focus_Camera $ i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- 0c -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
フォーカス調整機能きカメラモジュールの同じと思われるものはArduCamというところで売られているようですが、ここの手順を参考にさせてもらっても動かないようでした
あるいはI2Cのコマンド表みたいなのも出てきましたが、setしても値は変わらず、getした値もなんかよくわからないけど怪しげ、という感じでした。
フーム🤔?
# ズーム?のはず pi@yamanooku:~ $ sudo i2cset -y 0 0x0c 0x00 0x0898 w pi@yamanooku:~ $ sudo i2cget -y 0 0x0c 0x00 w 0x0000 # フォーカス?のはず pi@yamanooku:~ $ sudo i2cset -y 0 0x0c 0x01 0x0898 w pi@yamanooku:~ $ sudo i2cget -y 0 0x0c 0x01 w 0xff00 # モーターがビジー? pi@yamanooku:~ $ sudo i2cget -y 0 0x0c 0x04 0xff
PiZeroに直接接続しても変わりないようなので、こちらのカメラモジュールはただの単焦点カメラとして使う感じになりそうです。画質はヨサゲなので良いけど、うーん惜しい……。
まとめ
AliExpressの激安カメラは、色味こそ怪しいっぽいですが、普通にRaspberry Piで使うことができました。画質にこだわるならそもそもHQcamを使ったほうが良いので、写ってOpenCVかなんかで使えればそれで良い人にはアリなソリューションかもしれません。
余談(長い): 最近のRaspberry Pi OSのカメラ事情
カメラと言えば、Raspberry Pi OS Bullseyeからカメラを制御するためのドライバーがlibcameraベースに変更され、今までのものはレガシーとなりました。今までのカメラモジュールはクローズドソースだったのに対して、libcameraはオープンな実装のため、自由度がましていると説明されています。
libcameraへの対応自体はだいぶ前から発信されており、ドキュメントでもBullseyeリリース前から予告されていました。
ベーシックなコマンド類が変わるのは別にそれほど大きな変化ではなさそうに見えるので、影響もそれほど大きくはないと思われますが、一方で今まで多くの人が使ってきた(でもRaspberry Pi公式提供のライブラリじゃなかったらしい?)Pythonライブラリであるpicameraが使えなくなってかつ代替のPythonライブラリが開発中で間に合っていないことがカメラユーザーの中で致命的な問題になっており、picameraのIssueでは、Bullseyeで動かないという悲鳴や、Raspberry Pi OSの開発姿勢に疑問を呈されるなどの場外乱闘も勃発しています。私もメダカメラで使ってるので、こいつはBullseyeに移行できなさそうです。
Bullseyeではカメラの他にもKMS採用など新しいものがいくつか入っており、スムーズに移行できないであろう要素が存在するため、そのあたりを考慮してか、Raspberry Pi OS史上初となる一個前のバージョン(Buster)の最新ビルドが並行してリリースされることとなりました。
Pythonでカメラを扱う人たちに関しては、libcamera対応のPythonライブラリが出て移行できる状況が整うまでは、無理にBullseyeを採用せずにBusterにとどまったほうが良さそうです。ただし、上記ブログにもあるとおり、Busterのメンテナンスリリースでは今後の新しいモデル(例えばRaspberry Pi 5とか)には対応しないとのことなので、移行せずに延々Busterを使い続けることも難しそうではあります。Raspberry Pi 5なんてものがいつ出るのかって話ですけど。