V4L(ウェブカメラ)デバイスから生画像をキャプチャ

V4L(ウェブカメラ)デバイスから生画像をキャプチャ

私はセルフサービスの冷蔵庫を監視するためにラズベリーパイを使用しています。ドアが開くと、ドアが再び閉じられるまでイメージをキャプチャするシェルスクリプトが実行されます。しかし、問題はARMプロセッサの速度です。 fswebcamを使用してフル解像度でキャプチャするには2〜4秒かかりますが、長すぎます。

この問題を解決するための私たちのアイデアは、プロセスを分割することです。

  1. 生の画像をキャプチャしてメモリーカードに保存
  2. ドアが閉じた後に生データを処理します。これに対する時間要件はありません。

今私の質問は次のとおりです。

  1. これは可能ですか/賢明ですか?
  2. どのプログラムを使うべきですか?

答え1

これが今まで私たちが持っているものです:

#!/bin/bash

tempdir=/tmp/fswebcam
host="167.174.70.42"
destdir=~/fsweb
tformat=%Y-%m-%d_%H-%M-%S

if [ ! -d "$tempdir" ]; then
    mkdir $tempdir
fi

cd $tempdir

dooropentime=$(date +$tformat)

for i in {1..3}
do
    starttime=$(date +%s%N)
    echo -e "\n==== starting capture at" $(date +%H:%M:%S.%N) "====  (# $i)"
    fswebcam --device /dev/video0 --input 0 --resolution 1280x720 --timestamp "$tformat" $tformat.jpg
#   fswebcam --device RAW:/dev/video0 --palette NV12MB --resolution 1280x720 $tformat.jpg
    endtime=$(date +%s%N)
    echo -e "==== capture finished at" $(date +%H:%M:%S.%N) "==== (in "$((($endtime - $starttime) / 1000000))"ms)\n"
done

echo "packing..."
tar -cjf $dooropentime.tar.bz2 *.jpg

echo "copying..."
scp *.tar.bz2 pi@$host:$destdir
#cp *.tar.bz2 $destdir
rm -r $tempdir/*
echo "done!"

それでも原始的ですが、少なくとも動作します。 piからフレームをキャプチャするのに約3300ミリ秒かかります。

--device RAW:/dev/video0パレット非互換エラーが発生し、NV12MBパレット(http://www.firestorm.cx/fswebcam/"fswebcam-20060604: NV12MB パレットタイプの追加 (raw ソースのみ)") が欠落しているようです。

どんなアイデアがありますか?

関連情報