Editing Image acquisition package
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
The {{Forge|image-acquisition}} package is part of the [[Octave Forge]] project. | The {{Forge|image-acquisition}} package is part of the [[Octave Forge]] project. | ||
Build dependencies for Debian GNU/Linux are '''libv4l-dev''' and '''libfltk1.3 | Build dependencies for Debian GNU/Linux are '''libv4l-dev''' and '''libfltk1.3-dev'''. You can installed it on GNU/Linux in octave with | ||
octave> pkg install -forge image-acquisition | octave> pkg install -forge image-acquisition | ||
If you want to report a bug see [[Image_acquisition_package#Reporting_bugs]] | |||
If you want to report a bug | |||
== 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 | octave> pkg load image-acquisition | ||
octave | octave> imaqhwinfo | ||
ans = | ans = | ||
scalar structure containing the fields: | scalar structure containing the fields: | ||
driver = uvcvideo | driver = uvcvideo | ||
card = UVC Camera (046d:0825) | card = UVC Camera (046d:0825) | ||
bus_info = usb-0000:00: | bus_info = usb-0000:00:16.2-2 | ||
version = 3. | version = 3.2.51 | ||
capabilities = | capabilities = 83886081 | ||
device = /dev/video0 | device = /dev/video0 | ||
=== Open the v4l2 device and output the result === | === Open the v4l2 device and output the result === | ||
octave> obj = videoinput("v4l2", "/dev/video0") | |||
octave | |||
obj = videoinput for v4l2 | obj = videoinput for v4l2 | ||
device | device = /dev/video0 | ||
driver | driver = uvcvideo | ||
card | card = UVC Camera (046d:0825) | ||
VideoInput | VideoInput = 0 | ||
VideoResolution | VideoResolution = 320 x 240 px | ||
VideoFrameInterval = 1/30 s (30.0 fps) | |||
=== 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 | octave> get(obj) | ||
octave | |||
ans = | ans = | ||
{ | { | ||
[1,1] = SelectedSourceName | [1,1] = SelectedSourceName | ||
[2,1] = | [2,1] = DeviceCapabilities | ||
[3,1] = | [3,1] = VideoInput | ||
[4,1] = | [4,1] = VideoResolution | ||
[5,1] = | [5,1] = VideoFrameInterval | ||
[6,1] = | [6,1] = VideoFormat | ||
[7,1] = | [7,1] = brightness | ||
[8,1] = | [8,1] = contrast | ||
[9,1] = | [9,1] = saturation | ||
[10,1] = | [10,1] = white_balance_temperature_auto | ||
[11,1] = | [11,1] = gain | ||
[12,1] = | [12,1] = power_line_frequency | ||
[13,1] = | [13,1] = white_balance_temperature | ||
[14,1] = | [14,1] = sharpness | ||
[15,1] = | [15,1] = backlight_compensation | ||
[16,1] = | [16,1] = exposure_auto | ||
[17,1] = | [17,1] = exposure_absolute | ||
[18 | [18,1] = exposure_auto_priority | ||
} | } | ||
=== | === Get device capabilities === | ||
octave> get(obj, "DeviceCapabilities") | |||
octave | 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 === | === List available video resolutions === | ||
octave> set(obj, "VideoResolution") | |||
octave | |||
ans = | ans = | ||
Line 97: | Line 98: | ||
=== Set the video resolution to 320x240px === | === Set the video resolution to 320x240px === | ||
octave | octave> set(obj, "VideoResolution", [320 240]) | ||
=== Get the current brightness value === | === Get the current brightness value === | ||
octave> get(obj, "brightness") | |||
octave | |||
ans = 100 | ans = 100 | ||
=== Query possible range for brightness === | === Query possible range for brightness === | ||
octave> set(obj, "brightness") | |||
octave | |||
ans = | ans = | ||
Line 117: | Line 116: | ||
=== Set a new value for brightness === | === Set a new value for brightness === | ||
octave> set(obj, "brightness", 100) | |||
octave | |||
=== Start preview === | === Start preview === | ||
octave> preview(obj) | |||
octave | |||
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 === | === Use higher resolution and start streaming with 2 buffers === | ||
octave> set(obj, "VideoResolution", [640 480]); | |||
octave | octave> start(obj, 2) | ||
octave | |||
=== Get an image from the buffers, view and save it === | === Get an image from the buffers, view and save it === | ||
octave> img = getsnapshot(obj); | |||
octave | octave> image(img) | ||
octave | octave> imwrite(img, "ex1_a.png") | ||
octave | octave> [img, seq, t] = getsnapshot(obj); | ||
octave> seq | |||
octave | seq = 1 | ||
octave | octave> t | ||
t = | |||
octave | |||
scalar structure containing the fields: | scalar structure containing the fields: | ||
tv_sec = | tv_sec = 19618 | ||
tv_usec = | tv_usec = 346553 | ||
=== Stop streaming === | === Stop streaming === | ||
octave> stop(obj) | |||
octave | |||
== Using v4l2loopback for tests == | == Using v4l2loopback for tests == | ||
If you don't have a v4l2 device but | If you don't have a v4l2 device but test the package you could create a loopback device: | ||
modprobe v4l2loopback | modprobe v4l2loopback | ||
gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video0 | gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video0 | ||
Line 176: | Line 168: | ||
There might be some warnings like "warning: function xyz shadows a built-in function" at start. | 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 | Exit octave and add libv4l2_debug.log to your bug report | ||
Consider running the included tests: | Consider running the included tests: | ||
Line 184: | Line 176: | ||
octave> test @videoinput/set | octave> test @videoinput/set | ||
octave> test @videoinput/getsnapshot | octave> test @videoinput/getsnapshot | ||
== make check == | == make check == | ||
If you have cloned the hg repo you can run the test scripts to see if all works. | |||
If you have cloned the hg repo you can | |||
$ cd octave-image-acquisition/devel | $ cd octave-image-acquisition/devel | ||
$ make check | $ make check | ||
octave -q run_tests.m | octave -q run_tests.m | ||
../src/__v4l2_handler__.cc........................ PASS 3/3 | libv4l2: error setting pixformat: Device or resource busy | ||
@videoinput/videoinput............................ PASS | INFO: this error is expected because /dev/video0 is still streaming | ||
@videoinput/get................................... PASS 4/4 | ../src/__v4l2_handler__.cc........................ PASS 3/3 | ||
@videoinput/set................................... PASS | libv4l2: error getting capabilities: Inappropriate ioctl for device | ||
@videoinput/getsnapshot........................... PASS | @videoinput/videoinput............................ PASS 3/3 | ||
imaqhwinfo........................................ PASS 1/1 | @videoinput/get................................... PASS 4/4 | ||
@videoinput/set................................... PASS 6/6 | |||
@videoinput/getsnapshot........................... PASS 1/1 | |||
imaqhwinfo........................................ PASS 1/1 | |||
Summary: | Summary: | ||
PASS | |||
PASS 18 | |||
FAIL 0 | FAIL 0 | ||
If there are tests which FAIL, then please have a look at the generated fntest.log and add it to your bug report. | The two errors are expected, see test scripts. If there are tests which FAIL, then please have a look at the generated fntest.log and add it to your bug report. | ||
== Build src from hg repo == | |||
[ | '''Warning: You really should use the <pkg install -forge> method described above if you are not sure what you are doing here.''' | ||
Get the source here [http://sourceforge.net/p/octave/image-acquisition/ci/default/tree/] and build it yourself. The build dependencies for Debian GNU/Linux wheezy are '''libv4l-dev''' and '''libfltk1.3-dev''' or '''libfltk1.1-dev'''. You also need the GNU autotools to generate the configure script. | |||
$ hg clone http://hg.code.sf.net/p/octave/image-acquisition octave-image-acquisition | |||
$ cd octave-image-acquisition/src/ && ./bootstrap | |||
$ cd ../.. | |||
$ tar czf image-acquisition.tar.gz octave-image-acquisition | |||
octave:>> pkg install -verbose image-acquisition.tar.gz |