KUSONEKOの見る世界

リモート飲み会用にWebカメラを購入したが結局ねこ監視カメラになった

リモート飲み会をするため、Webカメラを購入しました。
買ったWebカメラは、店頭でフルHDで安かった『UB-UCAM200』です。

Webカメラを手に入れたので、リモート飲み会を開けばいいものを面倒臭くて、そのまま1年が経過してしまいました。

このままでは勿体ないので、ATOM CAMに続き、2台目のペット監視用カメラとして余生を過ごしてもらうことにしました。

■物理サーバ環境
CPU:Intel Celeron N3150
メモリ:8GB
CentOS 8.4.2105
docker-ce:20.10.7

USBカメラの注意点

事前にWindowsで動作を確認しましたが、映像にチラつきがありました。

結局の所、カメラが悪い訳では無く、USBハブの問題でした。
ディスプレイに付いているUSBハブ経由で、PCのUSBポートに接続していましたが、これが原因でした。

別のUSBハブで経由したところ、チラつきが無くなりました。
出来る限り、USBハブや延長ケーブルを使用せず、直接接続した方がいいのかもしれません。

Webカメラ

認識確認

サーバに接続して、認識するかを確認します。

# dmesg
[1640904.139091] usb 1-5.1: USB disconnect, device number 3
[1640926.917106] usb 1-5.1: new high-speed USB device number 6 using xhci_hcd
[1640926.995697] usb 1-5.1: config 1 interface 0 altsetting 0 endpoint 0x83 has an invalid bInterval 32, changing to 9
[1640926.996382] usb 1-5.1: New USB device found, idVendor=1b3f, idProduct=2247, bcdDevice= 1.00
[1640926.996386] usb 1-5.1: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[1640926.996388] usb 1-5.1: Product: GENERAL WEBCAM
[1640926.996390] usb 1-5.1: Manufacturer: GENERAL
[1640926.996392] usb 1-5.1: SerialNumber: JH0319_20200710_v012
[1640926.997404] uvcvideo: Found UVC 1.00 device GENERAL WEBCAM (1b3f:2247)
[1640926.997560] uvcvideo: Failed to query (GET_INFO) UVC control 2 on unit 1: -32 (exp. 1).
[1640927.007186] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
[1640927.007577] input: GENERAL WEBCAM: GENERAL WEBCAM as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/input/input12
[1640927.009670] usb 1-5.1: Warning! Unlikely big volume range (=5120), cval->res is probably wrong.
[1640927.009676] usb 1-5.1: [5] FU [Mic Capture Volume] ch = 1, val = 7680/12800/1

認識しました。

仕様確認

v4l-utilsを使用して仕様を確認します。

v4l-utilsは、ビルドして実行しました。

# wget https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.20.0.tar.bz2
# tar xf v4l-utils-1.20.0.tar.bz2
# cd v4l-utils-1.20.0
# ./congfigure
# make
# ./utils/v4l2-ctl/v4l2-ctl --list-devices
GENERAL WEBCAM: GENERAL WEBCAM (usb-0000:00:14.0-5.1):
	/dev/video0
	/dev/video1
# ./utils/v4l2-ctl/v4l2-ctl -d /dev/video0 --info
Driver Info:
	Driver name      : uvcvideo
	Card type        : GENERAL WEBCAM: GENERAL WEBCAM
	Bus info         : usb-0000:00:14.0-5.1
	Driver version   : 4.18.0
	Capabilities     : 0x84a00001
		Video Capture
		Metadata Capture
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x04200001
		Video Capture
		Streaming
		Extended Pix Format
# ./utils/v4l2-ctl/v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
        [1]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)

フルHDに対応しているようです。

Docker

監視を行うには、色々とソフトウェアを入れる必要がありますが、ホストの環境を汚したくないので、Docker上で使うことにしました。
Docker HubにMotionがありましたので、それを使用します。

設定ファイルなどの準備

設定ファイルを一応落としておきます。(あとで上書きしてしまうのですが…)
作成したディレクトリは、設定ファイルを置くディレクトリと、動画ファイルを保存するディレクトリです。

# mkdir /home/docker/motion
# cd /home/docker/motion/
# wget https://github.com/Motion-Project/motion/raw/master/data/motion-dist.conf.in
# mv motion-dist.conf.in motion.conf
# mkdir /home/samba/atomcam/WebCAM

Docker起動

ポート8080はMotionの管理画面、8081はカメラのストリーミング用です。

# docker run -d --name=motion \
  --device=/dev/video0:/dev/video0 \
  -p 8080:8080 \
  -p 8081:8081 \
  -e TZ="Asia/Tokyo" \
  -v /home/docker/motion:/usr/local/etc/motion \
  -v /home/samba/atomcam/WebCAM:/var/lib/motion \
  --restart=always \
  motionproject/motion:latest

管理画面にアクセス

これで、以下のURLでアクセスできるようになるはずです。
http://サーバのIP:8080/

Motion管理画面

私は、ここでWrite Configurationを押したため、motion.confが書き換わってしまいました。

カメラの設定もmotion.conf内にあります。

motion.confを編集

#vi /home/docker/motion/motion.conf

以下に変更。
# Parameters to control video device.  See motion_guide.html
; video_params value
v4l2_palette 8

# Image width in pixels.
width 1920

# Image height in pixels.
height 1080

# Maximum number of frames to be captured per second.
framerate 30
# docker restart motion

v4l2_paletteで、MJPG(8)を指定します。
これを入れないと、YUYV(14)になってしまい、640x480になります。

動体が検知されると、以下にmkvファイルが保存されていきます。

/home/samba/atomcam/WebCAM

最後に

ペットを監視できるようになりました。

カメラ自体は、安く良い物ではありませんでしたが、ペット監視としては、まあまあ使えると思います。

良い画質で、暗い所でも撮れるカメラが良いのなら、AtomCAMを買った方がコスパが高いです。

ATOM Camが旅行・出張時のペット監視に良かった

格安ネットワークカメラATOM Camで猫を撮影してみました。色々な使い方が出来そうで面白いです。

参考