Image acquisition package: Difference between revisions

From Octave
Jump to navigation Jump to search
(Remove whitespace)
m (Remove redundant Category:Packages.)
 
(6 intermediate revisions by 3 users not shown)
Line 7: Line 7:


If you want to report a bug: [[Image_acquisition_package#Reporting_bugs]]
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 ==
Line 72: Line 74:
  octave:> set(obj, "VideoResolution")
  octave:> set(obj, "VideoResolution")
  ans =
  ans =
     640    480
     640    480
     160    120
     160    120
Line 105: Line 108:
  octave:> set(obj, "brightness")
  octave:> set(obj, "brightness")
  ans =
  ans =
 
   scalar structure containing the fields:
   scalar structure containing the fields:
 
     min = 0
     min = 0
     max =  255
     max =  255
Line 133: Line 136:
  octave:> image(img)
  octave:> image(img)
  octave:> imwrite(img, "ex1_a.png")
  octave:> imwrite(img, "ex1_a.png")
 
  octave:> [img, seq, t] = getsnapshot(obj);
  octave:> [img, seq, t] = getsnapshot(obj);
  octave:> seq
  octave:> seq
Line 139: Line 142:
  octave:> t
  octave:> t
  t =
  t =
 
   scalar structure containing the fields:
   scalar structure containing the fields:
 
     tv_sec =  10281
     tv_sec =  10281
     tv_usec =  779303
     tv_usec =  779303
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 ==
== Build source from mercurial repository ==
Line 186: Line 193:
'''Warning: You really should use the <pkg install -forge> method described above if you are not sure what you are doing here.'''
'''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.
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
  $ hg clone http://hg.code.sf.net/p/octave/image-acquisition octave-image-acquisition
  $ cd octave-image-acquisition/src/ && ./bootstrap
  $ cd octave-image-acquisition/
  $ cd ../..
  $ make install
$ tar czf image-acquisition.tar.gz octave-image-acquisition
octave:>> pkg install -verbose image-acquisition.tar.gz


== make check ==
== make check ==
Line 200: Line 205:
  $ 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
  ../src/__v4l2_handler__.cc........................ PASS 3/3
Line 208: Line 213:
  @videoinput/getsnapshot........................... PASS 4/4
  @videoinput/getsnapshot........................... PASS 4/4
  imaqhwinfo........................................ PASS 1/1
  imaqhwinfo........................................ PASS 1/1
 
  Summary:
  Summary:
   PASS  20
   PASS  20
   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.
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]]

Latest revision as of 11:13, 10 June 2019

The 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[edit]

Lines starting with "octave:>" are executed on the octave prompt.

Load the package and list available hardware[edit]

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:12.2-4
   version = 3.16.7
   capabilities =    2.2314e+09
   device = /dev/video0

Open the v4l2 device and output the result[edit]

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
     VideoFormat          = YUYV

Query which properties are available for the used device[edit]

The first 8 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] = 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[edit]

octave:> set(obj, "VideoFormat", "RGB3");

List available video resolutions[edit]

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[edit]

octave:> set(obj, "VideoResolution", [320 240])

Get the current brightness value[edit]

octave:> get(obj, "brightness")
ans =  100

Query possible range for brightness[edit]

octave:> set(obj, "brightness")
ans =

 scalar structure containing the fields:

   min = 0
   max =  255
   step =  1
   default =  128

Set a new value for brightness[edit]

octave:> set(obj, "brightness", 100)

Start preview[edit]

octave:> preview(obj)

Close it with CTRL+C or with [X] on the preview window

Use higher resolution and start streaming with 2 buffers[edit]

octave:> set(obj, "VideoResolution", [640 480]);
octave:> start(obj, 2)

Get an image from the buffers, view and save it[edit]

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 =  10281
   tv_usec =  779303

Stop streaming[edit]

octave:> stop(obj)

Using v4l2loopback for tests[edit]

If you don't have a v4l2 device but want to test the package you could create a loopback device:

modprobe v4l2loopback
gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video0

Reporting bugs[edit]

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. 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:

octave> test @videoinput/videoinput
octave> test @videoinput/get
octave> test @videoinput/set
octave> test @videoinput/getsnapshot

Run the compliance check (perhaps also with -s)

v4l2-compliance -d /dev/video0

Build source from mercurial repository[edit]

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[edit]

If you have cloned the hg repo you can also run the test scripts to see if all works.

$ cd octave-image-acquisition/devel
$ make check

octave -q run_tests.m
../src/__v4l2_handler__.cc........................ PASS 3/3
@videoinput/videoinput............................ PASS 1/1
@videoinput/get................................... PASS 4/4
@videoinput/set................................... PASS 7/7
@videoinput/getsnapshot........................... PASS 4/4
imaqhwinfo........................................ PASS 1/1

Summary:
  PASS  20
  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.