Posts Tagged ‘Raspberry Pi’

motionで動体監視する(ちょっと前から最近まで)

金曜日, 3月 7th, 2014

自宅内や玄関先をUSBカメラやAndroidのスマホを使ってリビングのタブレットに常時写したり、motionで動体感知して動画をGMailに送ったりしている。
しばらくの間USBカメラ(主にLogicool QCam Pro 9000)を使い、Core i3のLinux PCを常時稼働して使っていたが、去年の夏くらいからAndroidのスマホをカメラ代わりにしたり、もっと低価格で非力なRaspberry PiとUSBカメラを使ったりしてきたのでまとめ。

  • オリジナル
    Ubuntu12.04を入れたPCに、USBでLogicool QCam Pro 9000を接続。主に玄関先に設置して誰か来た場合にメールを飛ばすよう設定、添付する動画はiモード携帯でも見れるようにffmpegで3gpに変換、受信できるファイルサイズ2MB以下の動画のみを送るようにしていた。
    PCはNUCを使っているので約30,000円程度、カメラは7,000円程度で購入。
  • カメラの追加(スマートフォンをカメラに)
    スマホやタブレットが余りだしてきたので、IP Webcamを入れてUSBカメラ代わりに使い始める。最初はmotionとはからめず、tinyWebCamで見るだけだったが、motion.confの設定でデバイスを「/dev/video0」ではなく、URIを指定したネットワークカメラを使うことができたので、motion経由で動体監視もはじめた。
    USBカメラの場合PCをカメラの近くに設置する必要があったりケーブルを這い回す必要があったりしたが、無線LANの電波が届きコンセント近くで電源供給が可能な場所であればPCとケーブルでつながっている必要はなくなった。
    ただし、スマートフォンをPCから100%制御できないのでいろいろやっかいなことが。再起動させるだけでもオリジナルの状態では難しい。root化して定期的に再起動させたり、taskerを使ってアプリの起動などを制御する必要がある。途中でアプリケーションエラーが発生してプロセスが終了しても今のところ手の出しようがない。(sshとbusybox入れておけばなんとかなるのかも)
    スマートフォン(使い古しなのでプライスレス?)
  • カメラの追加(ネットワークカメラの追加)
    ネットワークカメラに興味が出てきてDG-SP304Vなども購入してみたが、PoE給電が必要だったりと費用はかさばるばかり。ただし、熱暴走などは発生していない。安価に買えればスマートフォンよりも性能的には安心できる。
    ネットワークカメラ(17,800円)
  • PCからRaspberry Piへ
    CPUパワー的に無理だろうと思っていたが、Microsoft LifeCam StudioをRaspBerry Piに接続すると、10fps以下だが640×480のサイズでmotionを使い動体認識させることができた。
    PC同様メール送信も可能、motionの動画出力にaviコンテナのmp4を指定しておけば、Androidのスマートフォンであれば変換なしで動画再生可能ということもわかり、ffmpegで変換なしにそのままGMailに送りつけることにした。自宅内では有線LANで接続しているが、無線LANのドングルで接続しておけば電源となるUSBケーブルを接続するだけで運用可能。カメラと本体をどのように設置するかは悩みどころだが、スマートフォンと同じくらいに設置しやすくなる。
    モバイルバッテリーや太陽光電池を使えば運用範囲はさらに広がる。
    Raspberry Pi(3,300円、ケース1,000円、USB電源1,000円)、LifeCam Studio 1,012円。

12334199475_a8d4169808_o

Microsoft LifeCam Studio Q2F-00008

金曜日, 1月 31st, 2014

知り合いの家でも安価に家の外を確認したいということを聞いたので、最近スマホばっかりだった所をUSBカメラLifeCam Studio Q2F-00008を使って試してみた。
Amazonでコンスタントに4,000円台、一時期900円だったので何台かキープしてある。
USB2.0の帯域をガッツリ使うようで、すでにQcam Pro 9000を2台motionで動かしている環境に追加すると/dev/video?としては認識するけどmotionデーモンをスタートするとerrorになった。CPUはCore i3、メモリ8GB、OSはUbuntu 12.04 Server。

PC側を変えてRaspberry Piに接続してVGA画質で見てみると特に問題なく動かせているが、CPU使用率が70%を下回らない。
画質は良い。Qcam Pro 2000は昼間はきれいだけど暗所は苦手でほとんど真っ暗、暗所に強いPanasinicのDG-SP304Vよりもよく写っている。ホットピクセル的なノイズは多いがなにか動いているのは判断できるので十分。
カメラ側にUSBハブから電源供給が必要かと考えていたけど不要で、Raspberry Piからの電源供給だけで動かせてしまう。ストリームを垂れ流してtinyCam Monitorとかで見る分には、Qcam Pro 2000、PanasinicのDG-SP304V、スマホと比べると断然良い。fpsは2〜6程度。ffmpegで変換しているときはコンスタントに4fps程度。

それならばと、通常のPCにやらせていたこと、、、ファイル保存してx264でエンコードして、uuしてメール添付で送信するのはちょっと厳しい。
4フレーム/秒, 1.66秒のmpeg4/aviを256kb/MAIN@L3.0のH.264に変換するのに2分近くかかってしまう。1秒の動画に1分って所か。やはりストリームを垂れ流すだけで精一杯。24秒の動画変換は42分もかかった。これは現実的ではない。
Raspberry Pi含めて電源5V1Aで動いてしまうので、実家とか玄関上に設置しておくのも良いかも。

cpuぶん回っているのでかなり熱持っているかも? と思ったけど、ffmpeg変換中のCPU温度は50℃以下だった。Raspberry Pi本体はクリアケースに収まっている状態。

$ cat /sys/class/thermal/thermal_zone0/temp
48692


$ time ffmpeg -i 20140130_224350_cam1.avi -vcodec libx264 -vprofile main -preset slow -b:v 256k -maxrate 256k -bufsize 10000k ~/test.mp4
ffmpeg version 0.8.6-6:0.8.6-1+rpi1, Copyright (c) 2000-2013 the Libav developers
built on Mar 31 2013 13:58:10 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, avi, from '20140130_224350_cam1.avi':
Metadata:
encoder : Lavf53.21.1
Duration: 00:00:01.66, start: 0.000000, bitrate: 1387 kb/s
Stream #0.0: Video: mpeg4 (Simple Profile), yuv420p, 640x480 [PAR 1:1 DAR 4:3], 3 fps, 3 tbr, 3 tbn, 3 tbc
[buffer @ 0x1ea5be0] w:640 h:480 pixfmt:yuv420p
[libx264 @ 0x1ea4360] using SAR=1/1
[libx264 @ 0x1ea4360] using cpu capabilities: none!
[libx264 @ 0x1ea4360] profile Main, level 3.0
[libx264 @ 0x1ea4360] 264 - core 123 r2189 35cf912 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=0 b_adapt=2 b_bias=0 direct=3 weightb=0 open_gop=1 weightp=2 keyint=250 keyint_min=3 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=256 vbv_bufsize=10000 crf_max=0.0 nal_hrd=none ip_ratio=1.25 aq=1:1.00
Output #0, mp4, to '/home/pi/test.mp4':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: libx264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=-1--1, 3 tbn, 3 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 5 fps= 0 q=21.0 Lsize= 200kB time=1.33 bitrate=1228.1kbits/s ts/s
video:199kB audio:0kB global headers:0kB muxing overhead 0.431305%
frame I:1 Avg QP:18.51 size: 57799
[libx264 @ 0x1ea4360] frame P:1 Avg QP:19.97 size: 40028
[libx264 @ 0x1ea4360] frame B:3 Avg QP:20.09 size: 35070
[libx264 @ 0x1ea4360] consecutive B-frames: 20.0% 0.0% 0.0% 80.0%
[libx264 @ 0x1ea4360] mb I I16..4: 12.8% 0.0% 87.2%
[libx264 @ 0x1ea4360] mb P I16..4: 6.4% 0.0% 33.8% P16..4: 24.6% 25.6% 9.6% 0.0% 0.0% skip: 0.0%
[libx264 @ 0x1ea4360] mb B I16..4: 4.0% 0.0% 21.9% B16..8: 31.5% 15.1% 5.3% direct:21.9% skip: 0.4% L0:42.8% L1:23.3% BI:33.9%
[libx264 @ 0x1ea4360] direct mvs spatial:33.3% temporal:66.7%
[libx264 @ 0x1ea4360] coded y,uvDC,uvAC intra: 99.5% 100.0% 100.0% inter: 89.5% 99.6% 98.6%
[libx264 @ 0x1ea4360] i16 v,h,dc,p: 7% 18% 24% 50%
[libx264 @ 0x1ea4360] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 10% 10% 9% 12% 11% 11% 12% 15%
[libx264 @ 0x1ea4360] i8c dc,h,v,p: 70% 9% 8% 13%
[libx264 @ 0x1ea4360] Weighted P-Frames: Y:100.0% UV:100.0%
[libx264 @ 0x1ea4360] kb/s:974.57

real 1m50.586s
user 0m53.710s
sys 0m1.370s