3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

motionにuvc対応を入れてみた

Last updated at Posted at 2018-09-26

webcamでの動体認識には以下のオープンソースがあります

  • motion - Cで書かれた軽量なコード。V4Lなどのデバイスが使えます。

  • ZoneMinder - 超巨大な実装。onvifというperlのライブラリを使っている。

  • OpenCV - 画像処理用のライブラリで、動体認識もできます。

motionをちょっと見てみることにしました。

FreeBSDのportsをビルドしようとしたらエラーになったのでgithubにあったソースをforkしてcloneしてビルドを試しました。

githubのソースにはconfigureがないので、autoheader/autoconfして作ります。configure.acのpkg-configの記述がエラーになるので、これはコメントアウトしました。

libmicrohttpdとjpegのpkgがあれば以下のようにconfigureしてgmakeでビルドできます。

% ./configure --without-ffmpeg --without-sqlite3

motionはなんとbktrもサポートしていてBSDな開発者もいたようです。bktrは自分がいじった最初のFreeBSDのコードでした。BT878のボードはまだ持っていて、Hammerなマシンに入ってます。

FreeBSDではV4L互換のwebcamdを使って利用できるようなのですが、webcamdが依存がひどくていけてなかったので、なにか他に良い方法がないか考えてみました。

いろいろ探していたらたまたまSAITOU Toshihideさんが書かれたUVCのコードをMLで見つけて、これをがっちゃんこすることにしました。

当初、キャプチャ初めて1フレームとって止めての実装にしていたのですが、あまり効率が良くないので、pthreadで連続してキャプチャーして、フレームが必要な時だけメモリに落とすようにしました。

UVCから送られてくるデータはYUVという1ピクセル16ビットのデータでmotionに変換コードがすでにあったので、それを使って変換しています。

とりあえず動くようになったのでPullReqしたら中の人にlibuvcがいいなみたいな事いわれてます。:(

usbがrootでしかアクセスできない場合はsudoで起動します。

% sudo ./motion -c motion-dist.conf

使い方はmotion-dist.confのwebcontrol_localhostとstream_localhostをoffにするとネットワーク越しに確認できるようになります。ブラウザで8080にアクセスすると以下のような表示になります。

スクリーンショット 2018-09-26 13.09.28.png

動くものが入るとコマンドラインに以下のログがでます。

[1:Unknown] [NTC] [ALL] motion_detected: Motion detected - starting event 1
[1:Unknown] [NTC] [ALL] mlp_actions: End of event 1

confのevent_gapで認識からEndまでの間隔が指定できます。またpicture_outputをonにすると認識中の画像をjpegで保存できます。on_event_startにshスクリプトを指定すると認識開始時に実行されます。

FreeBSD/mipsで動かしたいのですがusbがちょっと辛そうです。。。

ちなみに1フレームが640x480x2で614400バイトで1フレーム/Secでも1msのパケットに614バイトになります。結構大きいです。

FreeBSD/amd64のmotionのpkgは変なコンフィグレーションで依存がたくさん発生してます。よかれと思ってやってるんでしょうが、いけてません。

Linuxでもlibusbが入っていれば使えると思うので、uvc_device_listのwebcamを持っていて、configureを--without-v4lでビルドすれば試せると思います。と思ったんですが、Ubuntuで落ちるみたいです。誰かデバッグしてください。

中の人に複数カメラ対応してくださいと言われたので、bktrのコードなどを参考にいじってみました。cameraディレクティブでconfを分けると複数のカメラが使えるみたいなので、誰か試してくれませんか?

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?