LoginSignup
19
24

More than 5 years have passed since last update.

RaspberryPiに接続したLogicool C270の露出を固定する

Last updated at Posted at 2018-07-05

RaspberryPiでLogicool C270を使いたい

USBカメラのLogicool HD Webcam C270は、安価でRaspberryPiとの相性が良いため利用されている方も多いのではないでしょうか。
私もRaspi+OpenCV+c270という組み合わせを検討していたのですが、その際、c270の自動露出を解除して任意の値を設定する方法にハマってしまいましたので、解決方法をメモ書きしておきます。

実行環境

  • Raspbian-stretch date:2017-11-29
  • python:3.6.1
  • OpenCV:3.3.0
  • PyQt5:5.10.1
  • USBカメラ:Logicool HD Webcam C270

本内容は、PyQt5で作成したGUIアプリにOpenCVでキャプチャした画像を表示させた状態で確認しました。

問題点

Linux上でUSBカメラの設定を行う場合は、Video4Linuxを使うと良いらしいので、v4l2-ctlコマンドを用いて任意の露出を設定しました。
その結果、露出のパラメータであるexposure_absoluteの変更には成功したのですが、キャプチャした画像に設定内容が反映されません。

ちなみに、同様の手順をLogicool HD Webcam C615を用いて実行すると、こちらはキャプチャ画像に露出の設定が反映されます。なのでC270固有の問題なのかもしれません。

解決方法

こちらを参考にすることで解決できました。
How can I change webcam properties that OpenCV doesn't support but v4l2 API does?

理由は分かりませんが、cv2.VideoCaputure()の後、最初の一回のみcv2.read()を実行した時点でカメラの設定がリセットされてしまうみたいです。
なので一度cv2.read()を実行し意図的に設定をリセットしておいて、その後にVideo4Linuxで露出設定を行うようにすれば任意の値を反映できます。

具体的には以下のような感じです

import subprocess
import cv2

cap = cv2.VideoCapture(0)

# v4l2で設定を行う前にread()を1回実行しておく
_, _ = cap.read() # <-対策としてこの1行を追加

# v4l2の設定をsubprocessを用いて実行
cmd = 'v4l2-ctl -d /dev/video0 -c exposure_auto=1 -c exposure_absolute=20'
ret = subprocess.check_output(cmd, shell=True)

# v4l2の設定値を確認
cmd = 'v4l2-ctl --list-ctrls'
ret = subprocess.check_output(cmd, shell=True)
print(ret)

# 以降の処理でread()を実行しても、設定がリセットされることはないみたいです・・・


2019/4/11追記
下記の様なコメントを頂きました。
当時の環境が残っていないため当方では確認できておりませんが、動作しない場合は修正してみてください。

Description: Raspbian GNU/Linux 9.8 (stretch)
Release: 9.8
こちらのバージョンではコマンドが以下のように変更となっていました。
cmd = "v4l2-ctl -d /dev/video0 -c auto_exposure=1 -c exposure_time_absolute=300"


対策前(露出が反映されていない)
screenshot_04.jpg

対策後(露出が反映された)
screenshot_03.jpg

参考にさせて頂きました

19
24
2

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
19
24