Ubuntu 20.04 LTSでUSB接続のWEBカメラを使う
Ubuntu 20.04 LTSをインストールしたノートパソコンで、USB接続のWEBカメラが使えるのか試してみました。
コロナ禍でWEB会議だのリモート飲み会だのが増えて、ノートPC内臓のカメラでなんとかしていたのですが、画質や角度(設置場所)などの問題があってWEBカメラを購入しました。
購入したのはエレコムの WEBカメラ WEBCAM-101BK 。 マイク内蔵 、 高解像度 Full HD1920×1080ピクセル対応 、オートフォーカス、カメラシャッター付。価格は3,500円くらいだったかと思います。
Windowsの場合はUSB接続すればすぐに使えるのですが、Ubuntuの場合はどうなんでしょうか。USBのWEBカメラをUbuntuマシンに接続すらしたことがなかったので今回試してみました。
USB接続を確認する(lsusb)
現在のLinux(Ubuntu)のカーネルは、ほとんどのWEBカメラに対応しているとのことで、設定をしなくても動作するらしいです。そういえば、ノートパソコンの内臓のカメラはソフト(例えばCheese)を起動すれば何もしてなくても使えます。
では、USB接続のWEBカメラはどうなんでしょうか。接続してみます。まずはUSB接続自体が認識されいるか、「lsusb」コマンドで確認してみます。
USB接続確認
WEBカメラをUSB接続し、認識しているか「lsusb」コマンドで確認してみます。
#lsusb でUSB接続を確認してみます
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:07dc Intel Corp.
Bus 001 Device 010: ID 1bcf:28c4 Sunplus Innovation Technology Inc. FHD Camera Microphone
#↑これがUSB接続のWEBカメラ
Bus 001 Device 002: ID 04f2:b3b1 Chicony Electronics Co., Ltd TOSHIBA Web Camera - HD
#↑これは内臓のWEBカメラ
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
#他のデバイスを接続したときの例です(本編との関係は薄)
#上記に加えて、ゲーミングマウスとUSBメモリを接続した場合です。
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 046d:c092 Logitech, Inc. G203 LIGHTSYNC Gaming Mouse
#↑ロジテックのゲーミングマウス
Bus 001 Device 007: ID 0411:0110 BUFFALO INC. (formerly MelCo., Inc.) USB Flash Disk
#↑バッファローのUSBメモリ
Bus 001 Device 003: ID 8087:07dc Intel Corp.
Bus 001 Device 004: ID 1bcf:28c4 Sunplus Innovation Technology Inc. FHD Camera Microphone
#↑USB接続のWEBカメラ
Bus 001 Device 002: ID 04f2:b3b1 Chicony Electronics Co., Ltd TOSHIBA Web Camera - HD
#↑内臓のWEBカメラ
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
あたりまえですが、認識されています。
カメラの詳細設定ツール v4l-ctl を使う
v4l2-ctl は、そのマニュアルに
NAME v4l2-ctl – An application to control video4linux drivers
とあるとおりビデオ周りの情報取得や設定をするアプリケーションです。
例えば、「v4l2-ctl –list-devices」を実行すると、利用可能なカメラのリストが表示されますし、「v4l2-ctl -d /dev/video2 -c contrust=80」を実行すると、デバイスを指定してコントラストの値を変更(この場合は80に設定)できたりします。
1,v4l-utils のインストール
「 v4l2-ctl 」を使うためには、「v4l-utils」がインストールされていなくてはなりません。
#v4l-utilsをインストールします
sudo apt install v4l-utils
[sudo] ****** のパスワード: #パスワードの入力を求められたら入力します
#以下のように進捗状況が表示されてインストールされます(読み飛ばしてください)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
v4l-utils はすでに最新バージョン (1.18.0-2build1) です。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libllvm11 shim
これを削除するには 'sudo apt autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。
#必要ないということなので、削除を実行します
sudo apt autoremove
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
libllvm11 shim
アップグレード: 0 個、新規インストール: 0 個、削除: 2 個、保留: 2 個。
この操作後に 83.2 MB のディスク容量が解放されます。
続行しますか? [Y/n] y
#「y」を入力します
(データベースを読み込んでいます ... 現在 209827 個のファイルとディレクトリがインストールされています。)
libllvm11:amd64 (1:11.0.0-2~ubuntu20.04.1) を削除しています ...
shim (15.4-0ubuntu9) を削除しています ...
libc-bin (2.31-0ubuntu9.2) のトリガを処理しています ...
#インストールと不要になったファイルの削除が完了します
2,利用できるWebカメラの一覧を取得する
v4l2-ctl で利用可能なWEBカメラの一覧を取得してみます。
#利用可能なWEBカメラの一覧を表示しています
v4l2-ctl --list-devices
TOSHIBA Web Camera - HD: TOSHIB (usb-0000:00:14.0-10): #内臓カメラ
/dev/video0
/dev/video1
FHD Camera Microphone: FHD Came (usb-0000:00:14.0-14): #USB接続のWEBCAM-101BK
/dev/video2
/dev/video3
#USB接続のカメラを外して実行すると、外されたカメラは表示されません
v4l2-ctl --list-devices
TOSHIBA Web Camera - HD: TOSHIB (usb-0000:00:14.0-10): #内臓カメラ
/dev/video0
/dev/video1
#↑外したUSBカメラはリストにない
3,デバイスに関する全ての情報を表示する
デバイスの全ての情報を表示するには、v4l2-ctl -d /dev/video2 –all を実行します。
#デバイスの全ての情報を表示します
v4l2-ctl -d /dev/video2 --all
Driver Info:
Driver name : uvcvideo
Card type : FHD Camera Microphone: FHD Came
Bus info : usb-0000:00:14.0-14
Driver version : 5.11.22
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 800/600
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 1600
Size Image : 960000
Colorspace : sRGB
Transfer Function : Rec. 709
YCbCr/HSV Encoding: ITU-R 601
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 800, Height 600
Default : Left 0, Top 0, Width 800, Height 600
Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 800, Height 600, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 800, Height 600, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 15.000 (15/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=0
contrast 0x00980901 (int) : min=0 max=95 step=1 default=1 value=1
saturation 0x00980902 (int) : min=0 max=100 step=1 default=64 value=64
hue 0x00980903 (int) : min=-2000 max=2000 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=100 max=300 step=1 default=100 value=100
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
0: Disabled
1: 50 Hz
2: 60 Hz
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=1 max=7 step=1 default=2 value=2
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=1 value=1
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
1: Manual Mode
3: Aperture Priority Mode
exposure_absolute 0x009a0902 (int) : min=3 max=2047 step=1 default=166 value=166 flags=inactive
focus_absolute 0x009a090a (int) : min=0 max=1023 step=1 default=0 value=300 flags=inactive
focus_auto 0x009a090c (bool) : default=0 value=1
ここにある情報を書き換えることによって、カメラの設定を変えることができます。例えば、「contrast」に注目してみると、min=0 max=95 step=1 default=1 value=1 となっています。最小値が0,最大値が95で1段階づつ設定でき、デフォルトは1,現在の設定値は1となります。この設定値を買えることで、コントラストを変えることができるというわけです。
4,設定値を変えてみる
#カメラの設定を変えてみる
#以下の例ではコントラストの値を変更しています
v4l2-ctl -d /dev/video2 -C contrast # デバイスを指定してコントラストの値を表示
contrast: 1
v4l2-ctl -d /dev/video2 -c contrust=80 #デバイスを指定してコントラストの値を変更
v4l2-ctl -d /dev/video2 -C contrast #値が変更されているかチェックしてます
contrast: 80
#スイッチが大文字のCと小文字のcと分かり辛いですが、大文字のCはCheck、小文字のcはchangeなんですかね。
「Cheese」を使って動作を確認する
なんとなく分かったところで、「Cheese」を使ってUSB接続のWEBカメラで写真を撮影しました。特に問題はなさそうです。
変更した設定は、再起動、USBポート変更するとどうなるのか
設定を変更できることは分かりましたが、変更した値はシステムを再起動するとどうなるのでしょうか? USBポートを変更するとどうなるのでしょうか? あるいは、設定した値は他のアプリにも影響するのでしょうか。理解しきれていないのですが、簡単な実験をしてみました。
1,設定値を変更した例
2,設定値は再起動するとどうなるのか?
変更した値はPCの再起動でどうなるのか実際に試してみました。
#ブライトネスとコントラストの値をそれぞれ-30、3に変更してみます
v4l2-ctl -d /dev/video2 -c brightness=-30
v4l2-ctl -d /dev/video2 -c contrast=3
#ここでシステムの再起動
#再起動後v4l2-ctlで確認
#値は再起動前に変更した値を保持しています
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=-30
contrast 0x00980901 (int) : min=0 max=95 step=1 default=1 value=3
#デバイスの番号は変わってしまうことがあるようです。
3,設定値はUSBポートを変更するとどうなるのか?
変更した値はポートを変えるとどうなるのか実際にやってみました。Dynabookの右サイドにあるUSBポートから左側にあるUSBポートに挿し変えてみました。
「Cheese」を起動したまま挿し変えると、画面に「ウェブカムからビデオを再生する際にエラーが発生しました」と表示されますが、「Cheese」を再起動すると正常に画面に表示されるようになります。
#USBポートチェンジ後
#値は保持されています
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=-30
contrast 0x00980901 (int) : min=0 max=95 step=1 default=1 value=3
4,別のアプリ(Camoso)には影響するのか試してみる
設定は別のアプリにも反映(影響)するのでしょうか? 今回はCamosoというCheeseに似たアプリで試してみました。CamosoはCheeseのようにデバイスが複数接続されている場合、それを選択する機能がありません。実験するためにBIOSを起動して内臓カメラを一時的にOFF(使用しない設定)にして実験しました。
左右反転していますが、コントラストとブライトネスの設定値は反映されているようです。
アイキャッチ画像・トップ画像
Alexandr IvanovによるPixabayからの画像