JeVois  1.8
JeVois Smart Embedded Machine Vision Toolkit
Share this page:
The jevois-daemon executable

The main executable that is created when compiling the JeVois framework is jevois-daemon, which basically implements a jevois::Engine that will orchestrate the flow of data from camera sensor to machine vision processing to video streaming over USB.

Note
jevois-deamon can run on host (when compiling jevois for host), in which case all machine vision algorithms will run on your host computer. In this mode, you would usually use a regular USB camera, or you might want to use the JeVois smart camera configured with only pass-through video mappings (so that the JeVois camera does not do any processing on its own). See User guide to video modes and mappings and the PassThrough module. Running jevois-daemon on the host with the JeVois camera in pass-through mode is often useful to collect training data (for example, pictures of objects to recognize later) as they are seen by the JeVois camera.
jevois-daemon also runs on the JeVois smart camera hardware, immediately as soon as it is plugged in and has booted up. In such case, the smart camera hardware is doing all the machine vision processing. When operating in this mode, normally you would not want to run jevois-daemon again on the host computer, as this would amount to running jevois-daemon twice, back to back. One exception is for the collection of training data as described above. Instead, you would usually want to run a plain video viewer on your host, such as guvcview, or some custom machine vision code which you have developed, which will grab video frames from the JeVois camera and will then process them further on your host computer.

Running jevois-daemon on host

To run it on your host computer, just run rebuild-host.sh both in jevois and in jevoisbase, plug in any USB camera, and type

jevois-daemon

You should see the saliency demo in a window. Note that the JeVois core software does not provide any module, so make sure you proceed to compiling and installing jevoisbase before you try to use jevois-daemon.

jevois-daemon accepts a number of command-line arguments, try

jevois-daemon --help

to see them. Note that some of these will disappear once jevois-daemon starts, such as cameradev which specifies the camera (or video input file) to use. Once jevois-daemon is running, that parameter cannot be changed anymore.

Once jevois-daemon is running, you can interact with the JeVois system by typing commands in the terminal in which you started jevois-daemon. For example, try:

info
help
listmappings

To start jevois-daemon in a specific mode, find its number in the listmapping list, then CTRL-C to quit jevois-daemon, and finally

jevois-daemon --videomapping=19

to start it again in using that new video mapping (here, mapping 19 was for Demo QR-code according to listmappings). See Command-line interface user guide for more info about commands, and http://jevois.org/start/start.html for a list of video mappings that correspond to the default collection of modules in jevoisbase.

jevois-daemon options

As of this writing, jevois-daemon –help returns (reproduced here mostly to help people searching this doc by keywords):

General Options:  
  --tracelevel (unsigned int) default=[0]
    Set the minimum trace level to display

  --loglevel (jevois::manager::LogLevel) default=[info] List:[fatal|error|info]
    Set the minimum log level to display

  --help (bool) default=[false]
    Print this help message


Engine Options:  
  --usbserialdev (string) default=[]
    Over-the-USB serial device name, or empty

  --cameradev (string) default=[/dev/video0]
    Camera device name (if starting with /dev/v...), or movie file name (e.g., movie.mpg) or image sequence (e.g., im%02d.jpg, to read frames im00.jpg, im01.jpg, etc).

  --cameranbuf (unsigned int) default=[0]
    Number of video input (camera) buffers, or 0 for automatic.

  --serout (jevois::engine::SerPort) default=[None] List:[None|All|Hard|USB]
    Send module serial messages to selected serial port(s)

  --cpumax (unsigned int) default=[1344] List:[120|240|312|408|480|504|600|648|720|816|912|1008|1044|1056|1080|1104|1116|1152|1200|1224|1248|1296|1344]
    CPU maximum frequency in MHz

  --videomapping (int) default=[-1]
    Index of Video Mapping to use, or -1 to use the default mapping

  --camreg (bool) default=[false]
    Enable raw access to camera registers through setcamreg and getcamreg

  --cpumode (jevois::engine::CPUmode) default=[Performance] List:[PowerSave|Conservative|OnDemand|Interactive|Performance]
    CPU frequency modulation mode

  --gadgetdev (string) default=[]
    Gadget device name. This is used on platform hardware only. On host hardware, a display window will be used unless gadgetdev is None (useful for benchmarking) or is a file stem for a movie file that does not start with /dev/ (and which should contain a printf-style directive for a single int argument, the movie number).

  --camturbo (bool) default=[false]
    Enable camera turbo mode by relaxing the need for DMA-coherent video buffer memory. This can accelerate severalfolds access to the captured image data, but it may also yield stripe artifacts with some modules, such as PassThrough. The stripes are pieces of incorrect data in the cache. You should experiment with each particular module. Turbo mode is not recommended for any production-grade application.

  --gadgetnbuf (unsigned int) default=[0]
    Number of video output (USB video) buffers, or 0 for auto

  --serlog (jevois::engine::SerPort) default=[None] List:[None|All|Hard|USB]
    Show log and debug messages on selected serial port(s)

  --serialdev (string) default=[stdio]
    Hardware (4-pin connector) serial device name, or 'stdio' to use the console, or empty for no hardware serial port

jevois-daemon config files

jevois-daemon uses several config files, source is in jevois/Config/ and they get installed into /jevois/config/ on host and JEVOIS:/jevois/config/ on platform microSD.

  • videomappings.cfg Lits of available videomappings, see User guide to video modes and mappings
  • params.cfg Parameters that get set on startup, this is equivalent to specifying these parameters from the command-line
  • initscript.cfg Script that gets run on startup, you can put in this file any valid commands as you have typed them interactively, see Command-line interface user guide for more info.

Running jevois-daemon on platform

jevois-daemon starts automatically on the platform. The script that starts it is installed in LINUX:/usr/bin/jevois.sh on the microSD. Its source is in jevois/bin/jevois.sh and it gets installed to microSD staging as part of the rebuild-platform.sh process.

You can edit this script, for example if you wish to run jevois-daemon in the gdb debugger, just replace the line

/usr/bin/jevois-daemon ${opts}

by

gdb --args /usr/bin/jevois-daemon ${opts}

Note that since the addition of Python support in JeVois v1.1, libcrypto gets pulled in when jevois-daemon starts, and this causes problems with gdb on the platform. Thus, when gdb starts on the platform, issue a

handle SIGILL nostop noprint

before you give gdb the run command. See https://www.raspberrypi.org/forums/viewtopic.php?p=155085 for the same issue reported on the Raspberry Pi.