3Dプリンターのプリントを ラズベリーパイで制御させるため、OctoPrint を使ってます。
USB カメラを使ってストリーミング表示と保存をして、プリントの進捗確認や失敗時の原因確認に使っています。これの覚書。
ストリーミングはmjpg_streamer 利用。下記コマンドで実行。
mjpg_streamer -b -o "output_http.so -n" -i "input_uvc.so -f 1"
ただし、ピントがあわないのが悩みの種だった。プリントヘッドがあちこち動いてそのたびにAutofocusでピントが背景のほうにあってしまう。
mjpg_streamer の output_http.so ではサンプルでAutofocus無効にして手動focusが設定できる。サンプルは output_http.so のオプションとして -w でフォルダ指定して実行。
mjpg_streamer -i "input_uvc.so -f 1" -o "output_http.so -w /usr/local/share/mjpg-streamer/www/"
但し起動のたびにピント変更も面倒だし、セキュリティ上もサンプル出しておくのも微妙。
そもそもどうやっているのかとみていると、USBカメラの規格でUVCがあり、これは v4l2-ctl コマンドで制御できることが判明。
フォーカスを手動にして、手前に固定するコマンドをmjpg_streamer起動前に記載して解決。
#!/bin/sh v4l2-ctl -d /dev/video0 -c focus_auto=0 v4l2-ctl -d /dev/video0 -c focus_absolute=29 mjpg_streamer -b -o "output_http.so -n" -i "input_uvc.so -f 1"
v4l2-ctl は mjpg_streamer インストール時に導入済みだが、単体はv4l-utils でインストールできる。
sudo apt-get install v4l-utils
USBカメラの対応コマンドは 下記で確認できる。
v4l2-ctl -d /dev/video0 --list-ctrls-menu
USBカメラの情報は下記。autofocus が無効になっているのが分かる。
v4l2-ctl -d /dev/video0 --all Driver Info: Driver name : uvcvideo Card type : Microsoft LifeCam Studio(TM): Bus info : usb-3f980000.usb-1.3.1 Driver version : 4.19.97 Capabilities : 0x84a00001 Video Capture Metadata Capture Streaming Extended Pix Format Device Capabilities Device Caps : 0x04200001 Video Capture Streaming Extended Pix Format Media Driver Info: Driver name : uvcvideo Model : Microsoft LifeCam Studio(TM): Serial : Bus info : usb-3f980000.usb-1.3.1 Media version : 4.19.97 Hardware revision: 0x00000113 (275) Driver version : 4.19.97 Interface Info: ID : 0x03000002 Type : V4L Video Entity Info: ID : 0x00000001 (1) Name : Microsoft LifeCam Studio(TM): Function : V4L2 I/O Flags : default Pad 0x01000007 : 0: Sink Link 0x02000013: from remote pad 0x100000a of entity 'Extension 5': Data, Enabled, Immutable Priority: 2 Video input : 0 (Camera 1: ok) Format Video Capture: Width/Height : 640/480 Pixel Format : 'MJPG' (Motion-JPEG) Field : None Bytes per Line : 0 Size Image : 614400 Colorspace : sRGB Transfer Function : Default (maps to sRGB) YCbCr/HSV Encoding: Default (maps to ITU-R 601) Quantization : Default (maps to Full Range) Flags : Crop Capability Video Capture: Bounds : Left 0, Top 0, Width 640, Height 480 Default : Left 0, Top 0, Width 640, Height 480 Pixel Aspect: 1/1 Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags: Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags: Streaming Parameters Video Capture: Capabilities : timeperframe Frames per second: 7.500 (15/2) Read buffers : 0 brightness 0x00980900 (int) : min=30 max=255 step=1 default=133 value=82 contrast 0x00980901 (int) : min=0 max=10 step=1 default=5 value=5 saturation 0x00980902 (int) : min=0 max=200 step=1 default=103 value=103 white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1 power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=1 white_balance_temperature 0x0098091a (int) : min=2500 max=10000 step=1 default=4500 value=4898 flags=inactive sharpness 0x0098091b (int) : min=0 max=50 step=1 default=25 value=25 backlight_compensation 0x0098091c (int) : min=0 max=10 step=1 default=0 value=0 exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3 exposure_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=156 value=156 flags=inactive pan_absolute 0x009a0908 (int) : min=-529200 max=529200 step=3600 default=0 value=0 tilt_absolute 0x009a0909 (int) : min=-432000 max=432000 step=3600 default=0 value=0 focus_absolute 0x009a090a (int) : min=0 max=40 step=1 default=0 value=29 focus_auto 0x009a090c (bool) : default=1 value=0 zoom_absolute 0x009a090d (int) : min=0 max=317 step=1 default=0 value=0
ラズパイでUSBカメラ使う時は、セルフパワータイプのUSBハブ利用の事。