bokumin.org

Github

Wyse3040+FreeBSD+Logicool Webcamで監視カメラを自作する

Creating CCTV with Wyse3040 + FreeBSD + Webcam

 

はじめに

 

Wyse3040を自宅で遊ばせていたので、そろそろなにかしたいなと思っていたところ、余っていたWebカメラをみつけたので、即席の監視カメラを作成してみました。

 

実行環境
機器名:Wyse3040
OS:FreeBSD 14.3
Logicool Webcam C270
※画像の一番右は外付けHDDとなっていて、ここからFreeBSDを起動しています

 

 

パッケージのインストール

 

Logicool WebcamをFreeBSDで認識できるように、webcamdをインストールしていきます。
webcamdはcuseカーネルモジュールをロードする必要があるので、まずそれを行っていきます。

 

# 手動の場合
kldload cuse

# 自動でロードする場合
tail /boot/loader.conf
cuse_load="YES"

 

次にwebcamdをインストールしていきます。

 

pkg install webcamd

 

今後、自動でwebcamdを有効にしたい場合はrc.confにwebcamd_enable=”YES”と追加します。

 

cat /etc/rc.conf
.
.
.
webcamd_enable="YES"

 

手動で毎回webcamdを有効にしたい場合は以下のコマンドで行うことが可能です。

 

# 起動
service webcamd onestart

# 停止
service webcamd onestop

# 状態確認
service webcamd status

 

webcamdが稼働していると、USBデバイスのカメラが/dev/video0という形で認識・操作が可能になります。USBデバイスで無事に認識されたか確認するためのコマンドを載せておきますので、うまくいかない時などに参考にしてください。

 

usbconfig
ugen0.2: <Webcam C270 Logitech, Inc.> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

# もしくはdmesgでシステムログを確認する
dmesg 

 

写真の撮影

 

/dev/video0と認識しているので、そこを指定してコマンドを実行していきます。今回はfswebcamとffmpegを使って写真を撮影しました。

 

pkg install fswebcam

fswebcam -d /dev/video0 -r 640x480 photo.jpg

# バナーなし
fswebcam -d /dev/video0 -r 640x480 --no-banner photo.jpg

# ffmpeg
ffmpeg -f v4l2 -i /dev/video0 -frames:v 1 photo.

 

実際にlogicoolのC270で撮れた写真が以下のものです。

 

fswebcamで撮影

 

 

ffmpegで撮影

 

 

動画の撮影

 

同じように動画の撮影を行っていきます。今回はffmpeg、vlcを使って行いました。

 

# 基本(Ctrl+Cで停止)
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 video.mp4

# 時間指定(10秒)
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -t 10 video.mp4

# 音声も録音
ffmpeg -f v4l2 -i /dev/video0 -f oss -i /dev/dsp0 \
  -c:v libx264 -c:a aac video.mp4
  

 

実際に撮影したものがこちらです。

 

 

vlcを使って行うことも可能です。

 

pkg install vlc

# GUI起動
vlc v4l2:///dev/video0

# コマンドライン録画
cvlc v4l2:///dev/video0 --sout file/mp4:video.mp4

 

HTTPストリーミング

 

次にHTTPストリーミングを行っていきます。今回はmotionを使いました。

 

$ pkg install motion

$ vim motion.conf 

daemon off
videodevice /dev/video0
v4l2_palette 0
emulate_motion off

# movie_filename webcam # ファイル名を指定したい場合
# movie_max_time 3600 # デフォルト120、0だと無制限
movie_codec mp4
width 640
height 480
framerate 15
stream_port 8081
stream_localhost off
stream_maxrate 15
output_pictures off




$ motion -c motion.conf

 

motion稼働後、http://IPアドレス:8081にアクセスをしてもらうと、以下のようにストリーミングされている様子がわかると思います。

 

 

実際にストリーミングしたものはこちらです。

 

 

motionはデフォルトで動きが検知されなくなってから一定時間経過すると録画を停止するようになっていますので、もし常時録画などにしたい場合はemulate_motiononに変更してください

 

emulate_motion on

 

その他設定はmotionのmanページを参考にしてくださいませ

 

https://man.freebsd.org/cgi/man.cgi?query=motion&sektion=1&manpath=freebsd-ports

 

カメラ明るさ調整・その他設定など

 

カメラの明るさ調整・その他設定を変更したい場合はv4l-utilを使用します。

 

$ pkg install v4l-utils

# 利用可能な設定を確認
$ v4l2-ctl -d /dev/video0 --list-ctrls

# フォーマット確認
$ v4l2-ctl -d /dev/video0 --list-format-ext

# 全設定表示
$ v4l2-ctl -d /dev/video0 --all
出力例:
brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
contrast 0x00980901 (int)      : min=0 max=255 step=1 default=32 value=32
saturation 0x00980902 (int)    : min=0 max=255 step=1 default=32 value=32
white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
gain 0x00980913 (int)          : min=0 max=255 step=1 default=0 value=0
power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2
white_balance_temperature 0x0098091a (int)    : min=2000 max=6500 step=1 default=4000 value=4000 flags=inactive
sharpness 0x0098091b (int)     : min=0 max=255 step=1 default=22 value=22
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
exposure_absolute 0x009a0902 (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive

 

以下、コマンド例を載せておきます。

 

# 明るさUP
v4l2-ctl -d /dev/video0 --set-ctrl=brightness=200

# ゲイン(感度)UP
v4l2-ctl -d /dev/video0 --set-ctrl=gain=200

# 露出を手動にして長めに
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto=1
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_absolute=500

# コントラスト
v4l2-ctl -d /dev/video0 --set-ctrl=contrast=50

 

まとめ

 

以上、監視カメラの作成方法についてでした。Wyse3040とLogicoolのWebカメラだけだと大体7W前後の消費電力になりました。外付けHDD込みでも10W前後というところですね。
1時間稼働させたものを確認しましたが、安定して動作しているみたいです。

 

$ top
.
.
CPU:  9.1% user,  0.0% nice,  0.2% system,  0.8% interrupt, 89.9% idle
Mem: 97M Active, 572M Inact, 788K Laundry, 743M Wired, 56K Buf, 451M Free
ARC: 432M Total, 152M MFU, 268M MRU, 768K Anon, 1763K Header, 9182K Other
     384M Compressed, 578M Uncompressed, 1.51:1 Ratio
Swap: 2048M Total, 2048M Free
.
.

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
 9789 hoge      11  20    0   185M    51M nanslp   3   60:17  38.10% motion
  976 root         14 -44   r8    65M    20M cuse-s   1   60:49   1.19% webcamd
 9809 hoge       1  20    0    15M  3632K CPU1     1   0:00   0.13% top

 

おわりに

 

Wyse3040は中古で3000円弱とRaspberry piよりも安価に手に入ります。Logicool Webcamのこの型番もAmazonで2000円弱で買うことが可能です。色々遊べますので是非皆さんもやってみてください。

 

参考

 

webcamdのmanページ:https://man.freebsd.org/cgi/man.cgi?query=webcamd&sektion=8&n=1
motionのmanページ:https://man.freebsd.org/cgi/man.cgi?query=motion&sektion=1&manpath=freebsd-ports
v4l2のmanページ:https://man.freebsd.org/cgi/man.cgi?query=v4l2-ctl&apropos=0&sektion=1