20
15

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 3 years have passed since last update.

ラズパイにUSB接続のWebカメラを接続し画像出力/ストリーミングする設定

Posted at

はじめに

ラズパイにUSB接続のWebカメラを接続し、画像出力やストリーミング配信するまでの設定メモ

image.png

参考

参考にしたサイト

環境

ラズパイ情報
$ 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接続したことを認識できるか確認

Webカメラ接続前
$ 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
Webカメラ接続後
$ 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*コマンドでビデオデバイスが接続されているか確認する

Webカメラ接続前
$ ls /dev/video*
/dev/video10  /dev/video11  /dev/video12  /dev/video13  /dev/video14  /dev/video15  /dev/video16
Webカメラ接続後
$ 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カメラのデバイスを指定してるようです。

start_server.sh
#!/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カメラの映像が表示されれば成功です。

20
15
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
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?