ラズベリーパイに接続してあるUSBカメラの映像をブラウザから確認できるようにしてみました。
ネット検索してみますと、mpeg-streamerを使ったものが多いです。しかし、常時カメラを起動しなくてはならないことや、メモリー消費が多いなどの問題がありました。そこで、アクセスがあったときだけ画像を取得し、ブラウザで確認できるシステムを自作してみました。

ソースコード
ソースはGitHubにアップしています。
USBカメラから静止画を取得するには?
さまざまな方法がありますが、ffmpegから取得するのがおすすめです。
ffmpeg -ss 10 -f video4linux2 -s 1280x960 -i /dev/video0 -vframes 1 image.jpg
このコマンドを実行すると、USBカメラの静止画を撮影してくれます。
-iにはUSBカメラのデバイスパスを指定します。
-ssは撮影開始までの待機時間を指定しています。USBカメラを起動してすぐ撮影してしまうと、露出があっていない画像が得られてしまうことがあるため、10秒ほどまってから撮影するようにしています。画像の取得に時間がかかりすぎるというときは、もう少し縮めてもよいかもしれませんね。
もちろんこれはサンプルですので、環境に合わせてパラメータを変更する必要があります。
使い方としくみ
[Capture]をクリックするごとに、USBカメラの映像が取得されます。
Captureボタンがクリックされると、axiosからapi.phpにアクセスが行われます。api.phpはphpのexecを使用し、上で紹介したffmpegの撮影コマンドを実行します。

撮影画像ファイルをbase64エンコードし、フロントエンドに返すことで、ブラウザで撮影した画像を閲覧できるようにしました。

かなりシンプルな仕組みとなっています。
もちろんですが、カメラデバイスにはWebサーバーの実行ユーザーから読み取りが許可されている必要があります。また、一時ファイルを生成するため、当プログラムを配置するディレクトリへの書き込み権も必要です。動作しない場合はアクセス権を確認してみてください。
コメント