はじめに
ラズパイにUSB接続のWebカメラを接続し、画像出力やストリーミング配信するまでの設定メモ
参考
参考にしたサイト
- USB接続のWebカメラの設定方法
- https://hellobreak.net/raspberrypi-webcamera-0511/
- (丁寧な説明で大変分かりやすく助かりました)
- USB接続のWebカメラでストリーミング配信
環境
- Webカメラ
- BUFFALOの
BSW500M
- https://www.buffalo.jp/product/detail/bsw500mbk.html
- BUFFALOの
- ラズパイ
- Raspberry Pi 4 Model B / 4GB
$ cat /proc/cpuinfo | grep Model
Model : Raspberry Pi 4 Model B Rev 1.2
$ cat /proc/meminfo | grep MemTotal
MemTotal: 3866512 kB
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
$ python -V
Python 3.7.3
$ pip list | grep opencv
opencv-contrib-python 4.1.0.25
opencv-python 4.5.3.56
設定していく
lsusbコマンドでWebカメラをUSB接続したことを認識できるか確認
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0411:02da BUFFALO INC. (formerly MelCo., Inc.)
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
1つデバイス情報が増えているので、USB接続は認識している様子
次に、ls /dev/video*
コマンドでビデオデバイスが接続されているか確認する
$ ls /dev/video*
/dev/video10 /dev/video11 /dev/video12 /dev/video13 /dev/video14 /dev/video15 /dev/video16
$ ls /dev/video*
/dev/video0 /dev/video10 /dev/video12 /dev/video14 /dev/video16
/dev/video1 /dev/video11 /dev/video13 /dev/video15
Webカメラを接続するとビデオデバイスも増えているので認識できている様子
次に、webカメラを制御するドライバをインストールします。(コマンド実行後、念のためラズパイOSを再起動しました)
$ sudo apt-get install fswebcam
これで、Webカメラが使用できる状態になったはず。
動作確認
以下のコマンドで、Webカメラの映像が画像出力できれば成功です。
fswebcam image.jpg
OpenCVでキャプチャしてみる
OpenCVでWebカメラの映像をキャプチャします。
まずはOpenCVをインストールします。
$ sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6
$ sudo pip3 install opencv-python
OpenCVでWebカメラの映像を画像出力してみます。以下を実行後にWebカメラの映像がtest.jpgとして出力されれば成功です。
$ python
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cap = cv2.VideoCapture(0)
>>> ret, frame = cap.read()
>>> cv2.imwrite('test.jpg', frame)
True
>>>
MJPEG-Streamerでストリーミング配信してみる
Webカメラの映像を、MJPEG-Streamerでストリーミング配信します。
(MJPEG-Streamerのインストールは ここ を参照)
※ -d /dev/video0
で、Webカメラのデバイスを指定してるようです。
#!/bin/sh
PORT="8080" #ポート番号
ID="1000" #IDは好きなもの
PW="1000" #パスワード
SIZE="320x240" #画面サイズ
FRAMERATE="20" #フレームレート
export LD_LIBRARY_PATH=/usr/local/lib
/usr/local/bin/mjpg_streamer \
-i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n" \
-o "output_http.so -w /usr/local/share/mjpg-streamer/www -p $PORT -c $ID:$PW"
shell実行時の標準出力
$ ./start_server.sh
MJPG Streamer Version: git rev: 000000000000000000000000000000
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 320 x 240
i: Frames Per Second.: 20
i: Format............: YUYV
i: JPEG Quality......: 80
i: TV-Norm...........: DEFAULT
o: www-folder-path......: /usr/local/share/mjpg-streamer/www/
o: HTTP TCP port........: 8080
o: HTTP Listen Address..: (null)
o: username:password....: 1000:1000
o: commands.............: enabled
shell start_server.sh
を実行した状態で、ブラウザで URL http://{{ラズパイのIPアドレス}}:8080/
にアクセスし、MJPEG-Streamerの画面が表示され、Webカメラの映像が表示されれば成功です。