USB摄像头使用

内核选项

插入USB摄像头,lsusb 可见:(摄像头PID:VID视你插入的USB摄像头型号而定)

Bus 001 Device 003: ID 1908:2311 GEMBIRD

在dev下可见 video0 设备。

fswebcam

fswebcam可以用来抓取摄像头图片。可以通过apt-get直接安装。

fswebcam -d /dev/video0 --no-banner -r 320x240 capture.jpg

抓取一帧图片。

root@LicheePi:~# fswebcam --help
Usage: fswebcam [<options>] <filename> [[<options>] <filename> --- ]

Options:

-?, --help                   Display this help page and exit.
-c, --config <filename>      Load configuration from file.
-q, --quiet                  Hides all messages except for errors.
-v, --verbose                Displays extra messages while capturing
    --version                Displays the version and exits.
-l, --loop <seconds>         Run in loop mode.
-b, --background             Run in the background.
-o, --output <filename>      Output the log to a file.
-d, --device <name>          Sets the source to use.
-i, --input <number/name>    Selects the input to use.
-t, --tuner <number>         Selects the tuner to use.
-f, --frequency <number>     Selects the frequency use.
-p, --palette <name>         Selects the palette format to use.
-D, --delay <number>         Sets the pre-capture delay time. (seconds)
-r, --resolution <size>      Sets the capture resolution.
    --fps <framerate>        Sets the capture frame rate.
-F, --frames <number>        Sets the number of frames to capture.
-S, --skip <number>          Sets the number of frames to skip.
    --dumpframe <filename>   Dump a raw frame to file.
-s, --set <name>=<value>     Sets a control value.
    --revert                 Restores original captured image.
    --flip <direction>       Flips the image. (h, v)
    --crop <size>[,<offset>] Crop a part of the image.
    --scale <size>           Scales the image.
    --rotate <angle>         Rotates the image in right angles.
    --deinterlace            Reduces interlace artifacts.
    --invert                 Inverts the images colours.
    --greyscale              Removes colour from the image.
    --swapchannels <c1c2>    Swap channels c1 and c2.
    --no-banner              Hides the banner.
    --top-banner             Puts the banner at the top.
    --bottom-banner          Puts the banner at the bottom. (Default)
    --banner-colour <colour> Sets the banner colour. (#AARRGGBB)
    --line-colour <colour>   Sets the banner line colour.
    --text-colour <colour>   Sets the text colour.
    --font <[name][:size]>   Sets the font and/or size.
    --no-shadow              Disables the text shadow.
    --shadow                 Enables the text shadow.
    --title <text>           Sets the main title. (top left)
    --no-title               Clears the main title.
    --subtitle <text>        Sets the sub-title. (bottom left)
    --no-subtitle            Clears the sub-title.
    --timestamp <format>     Sets the timestamp format. (top right)
    --no-timestamp           Clears the timestamp.
    --gmt                    Use GMT instead of local timezone.
    --info <text>            Sets the info text. (bottom right)
    --no-info                Clears the info text.
    --underlay <PNG image>   Sets the underlay image.
    --no-underlay            Clears the underlay.
    --overlay <PNG image>    Sets the overlay image.
    --no-overlay             Clears the overlay.
    --jpeg <factor>          Outputs a JPEG image. (-1, 0 - 95)
    --png <factor>           Outputs a PNG image. (-1, 0 - 10)
    --save <filename>        Save image to file.
    --exec <command>         Execute a command and wait for it to complete.

mjpeg-streamer

前置软件:

sudo apt-get update
sudo apt-get install g++ libjpeg62-turbo-dev imagemagick libv4l-dev cmake git
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make all
sudo make install

设置环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/mjpg-streamer

开启web服务器

mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480" -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

然后在同个局域网内的电脑的浏览器上访问 zero ip:8080即可看到图像。

mjpg_streamer -i "input_uvc.so -f 10 -r 320*240 -y" -o "output_http.so -c "ruoyun:liufeng" -w www -p 8888" -o "output_file.so -d 1000 -f /mnt "  
-i 输入
"input_uvc.so -f 10 -r 320*240 -y"
input_uvc.so:UVC输入组件
-f  10             :表示10帧
-r 320*240     :分辨率
-y                   :YUV格式输入(有卡顿),不加表示MJPG输入(需要摄像头支持)

-o输出
    "output_http.so -c "ruoyun:liufeng" -w www -p 8888" 
    output_http.so          :网页输出组件
    -c "ruoyun:liufeng"       :用户名:ruoyun        密码:liufeng
    -w www                                  : 网页输出
    -p 8888                                   :端口   8888

    "output_file.so -d 1000 -f /mnt "   
    output_file.so                  :图片输出组件
    -d 1000                                   : 时间1S
    -f /mnt                                       :输出图片放在哪,我是开机直接把/mnu挂载到本地文件夹了

总体帮助

root@LicheePi:~# mjpg_streamer --help
-----------------------------------------------------------------------
Usage: mjpg_streamer
-i | --input "<input-plugin.so> [parameters]"
-o | --output "<output-plugin.so> [parameters]"
[-h | --help ]------..: display this help
[-v | --version ]---..: display version information
[-b | --background]---: fork to the background, daemon mode
-----------------------------------------------------------------------
Example #1:
To open an UVC webcam "/dev/video1" and stream it via HTTP:
mjpg_streamer -i "input_uvc.so -d /dev/video1" -o "output_http.so"
-----------------------------------------------------------------------
Example #2:
To open an UVC webcam and stream via HTTP port 8090:
mjpg_streamer -i "input_uvc.so" -o "output_http.so -p 8090"
-----------------------------------------------------------------------
Example #3:
To get help for a certain input plugin:
mjpg_streamer -i "input_uvc.so --help"
-----------------------------------------------------------------------
In case the modules (=plugins) can not be found:
* Set the default search path for the modules with:
export LD_LIBRARY_PATH=/path/to/plugins,
* or put the plugins into the "/lib/" or "/usr/lib" folder,
* or instead of just providing the plugin file name, use a complete
path and filename:
mjpg_streamer -i "/path/to/modules/input_uvc.so"
-----------------------------------------------------------------------

输入插件帮助

root@LicheePi:~# mjpg_streamer -i "input_uvc.so --help"
MJPG Streamer Version.: 2.0
---------------------------------------------------------------
Help for input plugin..: UVC webcam grabber
---------------------------------------------------------------
The following parameters can be passed to this plugin:

[-d | --device ]------.: video device to open (your camera)
[-r | --resolution ]---: the resolution of the video device,
                        can be one of the following strings:
                        QQVGA QCIF CGA QVGA CIF PAL 
                        VGA SVGA XGA HD SXGA UXGA 
                        FHD 
                        or a custom value like the following
                        example: 640x480
[-f | --fps ]---------.: frames per second
                        (activates YUYV format, disables MJPEG)
[-q | --quality ] ---..: set quality of JPEG encoding
[-m | --minimum_size ].: drop frames smaller then this limit, useful
                        if the webcam produces small-sized garbage frames
                        may happen under low light conditions
[-e | --every_frame ]..: drop all frames except numbered
[-n | --no_dynctrl ]---: do not initalize dynctrls of Linux-UVC driver
[-l | --led ]---------.: switch the LED "on", "off", let it "blink" or leave
                        it up to the driver using the value "auto"
[-t | --tvnorm ] ------: set TV-Norm pal, ntsc or secam
[-u | --uyvy ] ------..: Use UYVY format, default: MJPEG (uses more cpu power)
[-y | --yuv  ] ------..: Use YUV format, default: MJPEG (uses more cpu power)
[-fourcc ] ------------: Use FOURCC codec 'argopt', 
                        currently supported codecs are: RGBP 
---------------------------------------------------------------

Optional parameters (may not be supported by all cameras):

[-br ]---------------..: Set image brightness (auto or integer)
[-co ]---------------..: Set image contrast (integer)
[-sh ]---------------..: Set image sharpness (integer)
[-sa ]---------------..: Set image saturation (integer)
[-cb ]---------------..: Set color balance (auto or integer)
[-wb ]---------------..: Set white balance (auto or integer)
[-ex ]---------------..: Set exposure (auto, shutter-priority, aperature-priority, or integer)
[-bk ]---------------..: Set backlight compensation (integer)
[-rot ]---------------.: Set image rotation (0-359)
[-hf ]---------------..: Set horizontal flip (true/false)
[-vf ]---------------..: Set vertical flip (true/false)
[-pl ]---------------..: Set power line filter (disabled, 50hz, 60hz, auto)
[-gain ]---------------: Set gain (auto or integer)
[-cagc ]---------------: Set chroma gain control (auto or integer)
---------------------------------------------------------------

input_init() return value signals to exit

输出插件帮助

root@LicheePi:~# mjpg_streamer -o "output_http.so --help"
MJPG Streamer Version.: 2.0
---------------------------------------------------------------
Help for output plugin..: HTTP output plugin
---------------------------------------------------------------
The following parameters can be passed to this plugin:

[-w | --www ]---------..: folder that contains webpages in 
                        flat hierarchy (no subfolders)
[-p | --port ]---------.: TCP port for this HTTP server
[-l ] --listen ]------..: Listen on Hostname / IP
[-c | --credentials ]---: ask for "username:password" on connect
[-n | --nocommands ]---.: disable execution of commands
---------------------------------------------------------------
output_init() return value signals to exit