【PHP】USBカメラの画像をブラウザからチェックできるようにしてみた!

PHP

ラズベリーパイに接続してあるUSBカメラの映像をブラウザから確認できるようにしてみました。

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

ブラウザで[Capture]をタップすると、USBカメラの静止画を表示してくれます。
スポンサーリンク

ソースコード

ソースはGitHubにアップしています。

GitHub - takabus/live-usbcam: Linuxサーバーに接続されているUSBカメラの映像をブラウザから見れるようにします
Linuxサーバーに接続されているUSBカメラの映像をブラウザから見れるようにします. Contribute to takabus/live-usbcam development by creating an account on GitH...
スポンサーリンク

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サーバーの実行ユーザーから読み取りが許可されている必要があります。また、一時ファイルを生成するため、当プログラムを配置するディレクトリへの書き込み権も必要です。動作しない場合はアクセス権を確認してみてください。

コメント

タイトルとURLをコピーしました