Image acquisition package: Difference between revisions
No edit summary |
(replaced $ with octave>, added start & stop streaming, getsnapshot) |
||
Line 8: | Line 8: | ||
$ tar czf image-acquisition.tar.gz octave-image-acquisition | $ tar czf image-acquisition.tar.gz octave-image-acquisition | ||
octave:>> pkg install image-acquisition.tar.gz | octave:>> pkg install image-acquisition.tar.gz | ||
If you want to report a bug see [[Image_acquisition_package#Reporting_bugs]] | |||
== Example session == | == Example session == | ||
Lines starting with | Lines starting with octave> are executed on the octave prompt. | ||
=== Load the package and list available hardware === | === Load the package and list available hardware === | ||
octave> pkg load image-acquisition | |||
octave> imaqhwinfo | |||
ans = | ans = | ||
Line 29: | Line 31: | ||
=== Open the v4l2 device and output the result === | === Open the v4l2 device and output the result === | ||
octave> obj = videoinput("v4l2", "/dev/video0") | |||
obj = videoinput for v4l2 | obj = videoinput for v4l2 | ||
device = /dev/video0 | device = /dev/video0 | ||
Line 39: | Line 41: | ||
=== Query which properties are available for the used device === | === Query which properties are available for the used device === | ||
The first 6 ones starting with an upper letter are fixed, the other specific to the used v4l2 device. | The first 6 ones, starting with an upper letter are fixed, the other specific to the used v4l2 device. | ||
octave> get(obj) | |||
ans = | ans = | ||
{ | { | ||
Line 64: | Line 66: | ||
=== Get device capabilities === | === Get device capabilities === | ||
octave> get(obj, "DeviceCapabilities") | |||
ans = | ans = | ||
Line 76: | Line 78: | ||
=== List available video resolutions === | === List available video resolutions === | ||
octave> set(obj, "VideoResolution") | |||
ans = | ans = | ||
Line 101: | Line 103: | ||
=== Set the video resolution to 320x240px === | === Set the video resolution to 320x240px === | ||
octave> set(obj, "VideoResolution", [320 240]) | |||
=== Get the current brightness value === | === Get the current brightness value === | ||
octave> get(obj, "brightness") | |||
ans = 100 | ans = 100 | ||
=== Query possible range for brightness === | === Query possible range for brightness === | ||
octave> set(obj, "brightness") | |||
ans = | ans = | ||
Line 119: | Line 121: | ||
=== Set a new value for brightness === | === Set a new value for brightness === | ||
octave> set(obj, "brightness", 100) | |||
=== Start preview === | === Start preview === | ||
octave> preview(obj) | |||
Close it with CTRL+C or with [X] on the preview window | Close it with CTRL+C or with [X] on the preview window | ||
=== Use higher resolution and start streaming with 2 buffers === | |||
octave> set(obj, "VideoResolution", [640 480]); | |||
octave> start(obj, 2) | |||
=== Get an image from the buffers, view and save it === | |||
octave> img = getsnapshot(obj); | |||
octave> image(img) | |||
octave> imwrite(img, "ex1_a.png") | |||
octave> [img, seq, t] = getsnapshot(obj); | |||
octave> seq | |||
seq = 1 | |||
octave> t | |||
t = | |||
scalar structure containing the fields: | |||
tv_sec = 19618 | |||
tv_usec = 346553 | |||
=== Stop streaming === | |||
octave> stop(obj) | |||
== Using v4l2loopback for tests == | == Using v4l2loopback for tests == | ||
Line 154: | Line 177: | ||
Consider running the included tests: | Consider running the included tests: | ||
test @videoinput/videoinput | octave> test @videoinput/videoinput | ||
test @videoinput/get | octave> test @videoinput/get | ||
test @videoinput/set | octave> test @videoinput/set | ||
test @videoinput/getsnapshot | octave> test @videoinput/getsnapshot |
Revision as of 13:40, 18 January 2014
The image_acquisition package is part of the Octave Forge project.
There is not release package yet but you can get the source here [1]
Simply do
$ hg clone http://hg.code.sf.net/p/octave/image-acquisition octave-image-acquisition $ tar czf image-acquisition.tar.gz octave-image-acquisition octave:>> pkg install image-acquisition.tar.gz
If you want to report a bug see Image_acquisition_package#Reporting_bugs
Example session
Lines starting with octave> are executed on the octave prompt.
Load the package and list available hardware
octave> pkg load image-acquisition octave> imaqhwinfo ans = scalar structure containing the fields: driver = uvcvideo card = UVC Camera (046d:0825) bus_info = usb-0000:00:16.2-2 version = 3.2.51 capabilities = 83886081 device = /dev/video0
Open the v4l2 device and output the result
octave> obj = videoinput("v4l2", "/dev/video0") obj = videoinput for v4l2 device = /dev/video0 driver = uvcvideo card = UVC Camera (046d:0825) VideoInput = 0 VideoResolution = 320 x 240 px VideoFrameInterval = 1/30 s (30.0 fps)
Query which properties are available for the used device
The first 6 ones, starting with an upper letter are fixed, the other specific to the used v4l2 device.
octave> get(obj) ans = { [1,1] = SelectedSourceName [2,1] = DeviceCapabilities [3,1] = VideoInput [4,1] = VideoResolution [5,1] = VideoFrameInterval [6,1] = VideoFormat [7,1] = brightness [8,1] = contrast [9,1] = saturation [10,1] = white_balance_temperature_auto [11,1] = gain [12,1] = power_line_frequency [13,1] = white_balance_temperature [14,1] = sharpness [15,1] = backlight_compensation [16,1] = exposure_auto [17,1] = exposure_absolute [18,1] = exposure_auto_priority }
Get device capabilities
octave> get(obj, "DeviceCapabilities") ans = scalar structure containing the fields: driver = uvcvideo card = UVC Camera (046d:0825) bus_info = usb-0000:00:16.2-2 version = 3.2.51 capabilities = 83886081
List available video resolutions
octave> set(obj, "VideoResolution") ans = 640 480 160 120 176 144 320 176 320 240 352 288 432 240 544 288 640 360 752 416 800 448 800 600 864 480 960 544 960 720 1024 576 1184 656 1280 720 1280 960
Set the video resolution to 320x240px
octave> set(obj, "VideoResolution", [320 240])
Get the current brightness value
octave> get(obj, "brightness") ans = 100
Query possible range for brightness
octave> set(obj, "brightness") ans = scalar structure containing the fields: min = 0 max = 255 step = 1 default = 128
Set a new value for brightness
octave> set(obj, "brightness", 100)
Start preview
octave> preview(obj)
Close it with CTRL+C or with [X] on the preview window
Use higher resolution and start streaming with 2 buffers
octave> set(obj, "VideoResolution", [640 480]); octave> start(obj, 2)
Get an image from the buffers, view and save it
octave> img = getsnapshot(obj); octave> image(img) octave> imwrite(img, "ex1_a.png") octave> [img, seq, t] = getsnapshot(obj); octave> seq seq = 1 octave> t t = scalar structure containing the fields: tv_sec = 19618 tv_usec = 346553
Stop streaming
octave> stop(obj)
Using v4l2loopback for tests
If you don't have a v4l2 device but test the package you could create a loopback device:
modprobe v4l2loopback gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video0
Reporting bugs
Please install v4l2-ctl (for example from Debian package v4l-utils), run the following commands and attach the output.
$ v4l2-ctl -w --list-devices $ v4l2-ctl -w -D $ v4l2-ctl -w -L $ v4l2-ctl -w -n $ v4l2-ctl -w --list-formats
Enable libv4l2 logging:
$ export LIBV4L2_LOG_FILENAME=libv4l2_debug.log
Start octave and execute your commands/scripts which show the problem.
Please include the whole octave session beginning with the start of octave. There might be some warnings like "warning: function xyz shadows a built-in function" at start.
Exit octave and add libv4l2_debug.log to your bug report
Consider running the included tests:
octave> test @videoinput/videoinput octave> test @videoinput/get octave> test @videoinput/set octave> test @videoinput/getsnapshot