1,847
edits
m (→make check) |
m (Remove redundant Category:Packages.) |
||
(18 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
The {{Forge| | The {{Forge|image-acquisition}} package is part of the [[Octave Forge]] project. | ||
Build dependencies for Debian GNU/Linux are '''libv4l-dev''' and '''libfltk1.3-dev''' or '''libfltk1.1-dev'''. You can install it on GNU/Linux in octave with | |||
octave> pkg install -forge image-acquisition | |||
If you see complains about a missing mkoctfile: [[FAQ#I_cannot_install_a_package._Octave_complains_about_a_missing_mkoctfile.]] | |||
If you want to report a bug: [[Image_acquisition_package#Reporting_bugs]] | |||
'''image-acquisition will not work on Windows as far as there is not port of v4l2 (standing for ''Video for Linux 2'')''' | |||
== Example session == | == Example session == | ||
Lines starting with octave> are executed on the octave prompt. | 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:> pkg load image-acquisition | ||
octave> imaqhwinfo | 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:12.2-4 | ||
version = 3. | version = 3.16.7 | ||
capabilities = | capabilities = 2.2314e+09 | ||
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("v4l2", "/dev/video0") | |||
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 | ||
VideoFormat = YUYV | |||
=== Query which properties are available for the used device === | === Query which properties are available for the used device === | ||
The first | |||
octave> get(obj) | The first 8 ones, starting with an upper letter are fixed, the other specific to the used v4l2 device. | ||
octave:> get(obj) | |||
ans = | ans = | ||
{ | { | ||
[1,1] = SelectedSourceName | [1,1] = SelectedSourceName | ||
[2,1] = DeviceCapabilities | [2,1] = ReturnedColorSpace | ||
[ | [3,1] = BayerSensorAlignment | ||
[ | [4,1] = DeviceCapabilities | ||
[ | [5,1] = VideoInput | ||
[ | [6,1] = VideoResolution | ||
[ | [7,1] = VideoFrameInterval | ||
[ | [8,1] = VideoFormat | ||
[ | [9,1] = brightness | ||
[ | [10,1] = contrast | ||
[ | [11,1] = saturation | ||
[ | [12,1] = white_balance_temperature_auto | ||
[ | [13,1] = gain | ||
[ | [14,1] = power_line_frequency | ||
[ | [15,1] = white_balance_temperature | ||
[ | [16,1] = sharpness | ||
[ | [17,1] = backlight_compensation | ||
[ | [18,1] = exposure_auto | ||
[19,1] = exposure_absolute | |||
[20,1] = exposure_auto_priority | |||
} | } | ||
=== | === Set VideoFormat to RGB3 aka RGB24 === | ||
octave> | |||
octave:> set(obj, "VideoFormat", "RGB3"); | |||
=== List available video resolutions === | === List available video resolutions === | ||
octave> set(obj, "VideoResolution") | |||
octave:> set(obj, "VideoResolution") | |||
ans = | ans = | ||
Line 103: | Line 97: | ||
=== Set the video resolution to 320x240px === | === Set the video resolution to 320x240px === | ||
octave> set(obj, "VideoResolution", [320 240]) | octave:> set(obj, "VideoResolution", [320 240]) | ||
=== Get the current brightness value === | === Get the current brightness value === | ||
octave> get(obj, "brightness") | |||
octave:> get(obj, "brightness") | |||
ans = 100 | ans = 100 | ||
=== Query possible range for brightness === | === Query possible range for brightness === | ||
octave> set(obj, "brightness") | |||
octave:> set(obj, "brightness") | |||
ans = | ans = | ||
Line 121: | Line 117: | ||
=== Set a new value for brightness === | === Set a new value for brightness === | ||
octave> set(obj, "brightness", 100) | |||
octave:> set(obj, "brightness", 100) | |||
=== Start preview === | === Start preview === | ||
octave> preview(obj) | |||
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 === | === Use higher resolution and start streaming with 2 buffers === | ||
octave> set(obj, "VideoResolution", [640 480]); | |||
octave> start(obj, 2) | octave:> set(obj, "VideoResolution", [640 480]); | ||
octave:> start(obj, 2) | |||
=== 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> image(img) | octave:> img = getsnapshot(obj); | ||
octave> imwrite(img, "ex1_a.png") | octave:> image(img) | ||
octave> [img, seq, t] = getsnapshot(obj); | octave:> imwrite(img, "ex1_a.png") | ||
octave> seq | |||
octave:> [img, seq, t] = getsnapshot(obj); | |||
octave> t | octave:> seq | ||
seq = 1 | |||
octave:> t | |||
t = | |||
scalar structure containing the fields: | scalar structure containing the fields: | ||
tv_sec = | tv_sec = 10281 | ||
tv_usec = | tv_usec = 779303 | ||
=== Stop streaming === | === Stop streaming === | ||
octave> stop(obj) | |||
octave:> stop(obj) | |||
== Using v4l2loopback for tests == | == Using v4l2loopback for tests == | ||
If you don't have a v4l2 device but test the package you could create a loopback device: | If you don't have a v4l2 device but want to 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 173: | Line 176: | ||
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. The logfile libv4l2_debug.log is overwritten between open/close so you have to rename it if you run different scripts. | ||
Consider running the included tests: | Consider running the included tests: | ||
Line 181: | Line 184: | ||
octave> test @videoinput/set | octave> test @videoinput/set | ||
octave> test @videoinput/getsnapshot | octave> test @videoinput/getsnapshot | ||
Run the compliance check (perhaps also with -s) | |||
v4l2-compliance -d /dev/video0 | |||
== Build source from mercurial repository == | |||
'''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 and build it yourself. The build dependencies for Debian GNU/Linux jessie 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/ | |||
$ make install | |||
== 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 also run the test scripts to see if all works. | |||
$ 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 | |||
@videoinput/videoinput............................ PASS 1/1 | |||
../src/__v4l2_handler__.cc........................ PASS 3/3 | @videoinput/get................................... PASS 4/4 | ||
@videoinput/set................................... PASS 7/7 | |||
@videoinput/videoinput............................ PASS | @videoinput/getsnapshot........................... PASS 4/4 | ||
@videoinput/get................................... PASS 4/4 | imaqhwinfo........................................ PASS 1/1 | ||
@videoinput/set................................... PASS | |||
@videoinput/getsnapshot........................... PASS | |||
imaqhwinfo........................................ PASS 1/1 | |||
Summary: | Summary: | ||
PASS 20 | |||
PASS | |||
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. | |||
[[Category:Octave Forge]] |