WebカメラのビデオフレームをJPEGにダンプ

WebカメラのビデオフレームをJPEGにダンプ

私はRaspberry Piを持っていて、ここからウェブカメラのビデオをストリーミングしたいと思います。私のWindows Mobile携帯電話(またはブラウザがある他のデバイス)と互換性があるようにしたいので、mjpegストリーミングはできません。実際、Linuxでストリーミングできる形式が見つかりません。私のWindowsコンピュータでは、WebcamXPを使用してWebカメラのビデオをストリーミングしましたが、うまく動作します。ソフトウェアはjpegをフォルダにダンプし、ブラウザにはjpegを40msごとに1回取得する単純なjsスクリプトがあります。これは「かわいい」ソリューションではありませんが、私のRaspberry Piで同じ目標を達成したいと思います。

問題は、jpegを1fps以上でフォルダにダンプできるソフトウェアが見つからないことです。私はmplayerとvlcがこれを行うことができることを知っていますが、彼らが出力する画像は緑色で正しく見えるようにする方法を見つけることができません(数日間試しました)。興味深いことに、Motionとfswebcamは何も設定せずに良いビデオを出力しますが、JPEGダンプを十分に迅速にサポートしていません。毎秒1回だけスナップショットを作成できます。

mplayer / vlcでビデオを修正する方法が見つからないと仮定すると、この問題を解決する2つの方法があります。 1. イメージを正しくダンプするプログラム/ユーティリティを探します。 2.ストリームをモーションからjpegに変換します。

サーバーを設定してjsスクリプトを書くことは問題ではありませんでした。 Webカメラからフォルダにjpegの安定したストリームをインポートする必要がありました。

答え1

ついにmplayerで作業するようになりました。 mplayerの色と彩度の値が間違っていることがわかりました。理由はわかりませんが、他の人もこれについて文句を言うのを見ました。これは私が使用したコマンドです。

mplayer -really-quiet -tv driver=v4l2:height=320:width=240:quality=1:hue=35:saturation=-80:brightness=99:contrast=-88:fps=8:device=/dev/video0 tv:// -vo jpeg -saturation -50 -contrast -3 &

jpegを8fpsでフォルダにダンプしますが、これは私のニーズには十分です。

このスクリプトに加えて、フォルダから8秒以上経過した画像を削除するスクリプトも実行します。これはパイの貴重なリソースなので、CPU使用率を低く保つために8秒を使用しました。

cd /home/pi/webcam_frames

while true; do
find . -not -newermt '-8 seconds' -delete
sleep 8;
done

最新の画像へのシンボリックリンクを毎秒10回生成するスクリプトもあります。

cd /home/pi/public

sleep 2
rm -rf latest.jpg

while true; do
ln -s -f /home/pi/webcam_frames/`ls -rt /home/pi/webcam_frames | tail -n1` latest.jpg
sleep 0.1
done

このシンボリックリンクはパブリックディレクトリにあり、nodejsを介してブラウザから取得できます。

var express = require('express'),
app = express(),
port = 8888;

app.use(express.static('/home/pi/public'));
app.listen(port);

毎秒数回nodejsからシンボリックリンクイメージを取得する簡単なhtml + jsページがあるため、javascriptを処理できるすべてのデバイスで実行される5-8fpsビデオがあります。

それは醜い解決策であり、結果も醜いですが、まさに私に必要なものです。

関連情報