4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPiでWebCameraを利用する

Last updated at Posted at 2019-06-09

概要

RaspberryPiでUSBカメラから画像を撮影する環境を構築しました。fswebcamを利用して撮影できることを確認しています。
最終的な環境は下記の手順で実現できます。

$ sudo apt install -y fswebcam
$ sudo usermod -aG vidoe $USER
$ fswebcam -p YUYV -r 640x480 -F 1 -S 20 --no-banner ./image.jpg

デバイスの接続状態確認

lsusbでデバイスが接続されているかどうかが確認できます。

fswebcamのインストール

下記コマンドでfswebcamをインストールできます。

$ sudo apt install -y fswebcam

上記コマンドで導入しただけだと、fswebcamのコマンドで/dev/videoにアクセスできない場合があります。その場合は、Permission Deniedが発生するので下記コマンドでユーザをvideoグループに追加します。初期設定のpiユーザだと不要かもしれません。

$ sudo usermod -aG vidoe $USER

撮影

画像の取得には下記のようなコマンドで実行します。

$ fswebcam ./image.jpg

fswebcamの設定では色々できるようですが、今回は下記のようなコマンドを利用して指定した解像度で取得するようにしました。

$ fswebcam -p YUYV -r 640x480 -F 1 -S 20 --no-banner ./image.jpg
  • -p YUYV: カメラによっては、これがないと保存できない場合があるようです。
  • -r 640x480: 640x640画素の画像を保存します。好きな値を設定してください。
  • -F 1: 撮影するフレーム数です。おおよそ露光時間に関係する値のようです。
    大きくすると露光時間が長くなり、動きがあるとぶれた画像になります。
  • -S 20: 撮影前のパラメータ調整が行われるようです。
    大きいほうが調整がいい場合があるようなのですが、時間がかかるようになります。
  • --no-banner: バナーは邪魔なので削除。

docker環境

上記まででRaspberry Pi上での環境構築は完了なのですが、直接環境構築すると何かあった時に大変になるのでdockerで実現するための方法です。単純にfswebcamだけをインストールしたimageを用意し、コマンドを実行しています。

Dockerfile

ラズパイのイメージとしてはbalenalibを利用しています。

FROM balenalib/raspberry-pi:latest

RUN set -x \
  && apt-get update \
  && apt-get autoremove \
  && apt-get install -y fswebcam \
  && apt-get clean \
  && rm -rf /var/lib/apt/lits/*

WORKDIR /workspace
CMD ["fswebcam"]

実行には下記のようなコマンドを利用すれば撮影できます。localhost:fswebcamは上記Dockerfileでビルドしたイメージを指します。

$ docker run --rm -v ./:/workspace --device=/dev/video0:/dev/video0 -u $(id -u):44 localhost:fswebcam fswebcam -p YUYV -r 640x480 -F 1 -S 20 --no-banner image.jpg
  • --device=/dev/video0:/dev/video0: videoデバイスをdockerコンテナに接続します。
    • 環境によっては/dev/viceo0の末尾番号が異なる可能性があります。
  • -u $(id -u):44: コンテナ内の実行ユーザIDとグループIDを指定します。
    • 設定せずに起動すると、rootユーザで画像が保存されます。
    • グループIDはvideoデバイスに接続できるグループです。
      cat /etc/group | grep videoで確認できます。
      設定が正しくないと、videoにアクセスできずPermissionエラーが発生します。

docker-compose.yml

上記のコマンドを毎回利用してもよいのですが、大変なのでdocker-composeを用意します。

version: "2"
services:
  fswebcam:
    image: localhost:fswebcam
    user: 1000:44
    devices:
      - /dev/video0:/dev/video0
    volumes:
      - .:/workspace:rw
    working_dir: /workspace
    command: fswebcam -p YUYV -r 640x480 -F 1 -S 20 --no-banner image.jpg

上記ファイルを用意して下記のコマンドを実行することで、docker runと同様に動作します。

$ docker-compose run --rm fswebcam
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?