読者です 読者をやめる 読者になる 読者になる

Raspberry Pi 3 とウェブカメラ(ロジクール C270)

ラズパイに1,000円前後で購入できるWebカメラを接続してみました。

特に目新しさはないですが、せっかくなので。

LOGICOOL ウェブカム HD画質 120万画素 C270

LOGICOOL ウェブカム HD画質 120万画素 C270

ロジクールのC270。120万画素、固定フォーカス、焦点距離は40cm以上、という商品です。最近のスマホに比べると圧倒的にしょぼいですが、価格からするとかなりの健闘ぶりです。

一昔前のガラケーにしても100万画素未満でも本体価格は1万円という時期*1があったことを考えると感慨深いです。

環境

過去記事で取り付けたタッチパネルはひとまず取り外しています。

接続

何も考えずにUSBケーブルを繋ぐだけでOK。

$ lsusb
Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 006: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 005: ID 1a2c:0e24 China Resource Semico Co., Ltd
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2行目の通り、正しく認識されている。

動作確認

fswebcam

GUI ツールでもいいのだけれど、とりあえず一番手軽そうなやつ。

ネタ元:Using a standard USB webcam - Raspberry Pi Documentation

aptでインストール。

$ sudo apt install fswebcam

実行例

$ fswebcam test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'.

f:id:atuyosi:20161013231452j:plain

初期状態の解像度は352x288?

オプションで解像度を指定してみます。

$ fswebcam -r 1280x720 test2.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test2.jpg'.

f:id:atuyosi:20161014023057j:plain

ちょっと文字の読み取りは厳しいのかも。ピントが合えばなんとかなるのでしょうか。

gucview

カメラのパラメーターを調整できるGUIツール。サウンド周りの警告が出ていますがひとまず動作はしました。

$ sudo apt install guvcview

オプションなしで起動する。

$ guvcview &

起動すると下記のように制御ウィンドウとカメラからの入力が表示される。

f:id:atuyosi:20161014021742p:plain

音声関係で警告メッセージが出力される。どうもPulseAudioからマイク音声が拾えていない。また、動画を保存しようとするといきなり終了してしまった…。要調査。

静止画を撮影すると以下のような感じ。

f:id:atuyosi:20161014021825j:plain

motion

カメラに映った被写体の動きを検出できるというソフト。ちょっとした監視カメラとして運用できると思われる。

なお、設定変更にviエディタを使っていますが、nanoというエディタでも支障はないです。

インストールは下記の通り。

$ sudo apt install motion

動作確認がしたいだけなので、デーモンではなく、かつ、被写体の動きを検出する機能もオフにして起動してみる。

$  sudo motion -n -m

-nが'non-demo mode'、普通のコマンドどして連続実行。-mは動体検出(動き検出)をオフにして起動するオプション。

初期設定ではローカルホストからしか接続を受け付けないので、ラズパイのデスクトップ環境からブラウザで、ローカルホストの8081番ポートにアクセスすると画像が見れる。 また、ポート8080番が制御用のURLになっている。ここからスナップショットを保存させたりできる。スナップショットは/var/lib/motion以下に保存される。

終了させる場合は、コンソールでCtrl+cを入力するか、ブラウザで8080番ポートにアクセスして停止させる。

f:id:atuyosi:20161014004128p:plain

設定ファイルは

  • /etc/motion/motion.conf
  • /etc/default/motion

デーモンとして常時稼働させるならローカルホスト以外からアクセスできるように設定を変える。変更の要点は以下のとおり。

  • 画像の高さと幅を指定
  • 画像のクオリティに関するパラメーターをいじる
  • ローカルホストから画像を確認できるようにする
  • systemctl からサービスとして起動できるようにする。
$ sudo vi /etc/motion/motion.conf

変更箇所のみ抜粋。

# Image width (pixels). Valid range: Camera dependent, default: 352
width 640

# Image height (pixels). Valid range: Camera dependent, default: 288
height 480


# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 10


# The quality (in percent) to be used by the jpeg compression (default: 75)
quality 95


# Quality of the jpeg (in percent) images produced (default: 50)
stream_quality 75

# Restrict stream connections to localhost only (default: on)
stream_localhost off

デーモンとして実行するために下記のファイルも修正する*2

$ sudo vi /etc/default/motion

修正箇所は一箇所のみ。"no"を"yes"に変更する。これをしないとバックグラウンドで動作しない。

start_motion_daemon=yes

出力先ディレクトリの所有者をmotionというユーザーに変更*3

$ sudo chown -R motion.video   /var/lib/motion/

サービスとして起動。

$ sudo systemctl start motion

ラズパイを起動する際に自動で動かしたいなら、サービスとして有効化しておく。

$ sudo systemctl enable motion

本気で運用するなら保存するデータ量の設定やアクセス制御をちゃんと設定する必要あり。公式サイトのドキュメントを参照のこと。


(一応書いておくと)停止させる場合は、以下のとおり。

$ sudo systemctl stop motion

サービスとして無効化する場合は同じ要領で、

$ sudo systemctl disable motion

とする。まあ蛇足ですか。

参考:[Raspberry Pi]motionでお手軽監視カメラをつくる – hello-world.jp.net

まとめ

とりあえず動作することは確認できたので、あとはPython+OpenCVの構成でプログラムからカメラを活用して何か作ろうという計画です。

欲を言うならもうちょっと画素数の多いカメラが欲しいところですが、行けるところまでやってみようかと思います。

*1:2000年代中頃だったか

*2:さりげないブービートラップ

*3:最初に起動した際に管理者権限でディレクトリが作成されているのでライトパーミッションを与えるか所有者を変更しないと書き込めない