This module finds objects by matching keypoint descriptors between the current image and a set of training images. Here we use SURF keypoints and descriptors as provided by OpenCV.
The algorithm consists of 4 phases:
The algorithm comes by default with one training image, for the Priority Mail logo of the U.S. Postal Service. Search for "USPS priority mail" on the web and point JeVois to a picture of the logo on your screen to recognize it. See the screenshots of this module for examples of how that logo looks.
Simply add images of the objects you want to detect in JEVOIS:/modules/JeVois/ObjectDetect/images/ on your JeVois microSD card. Those will be processed when the module starts. The names of recognized objects returned by this module are simply the file names of the pictures you have added in that directory. No additional training procedure is needed. Beware that the more images you add, the slower the algorithm will run, and the higher your chances of confusions among several of your objects.
With JeVois v1.1 or later, you do not need to eject the microSD from JeVois, and you can instead add images live by exporting the microSD inside JeVois using the
With JeVois v1.2 and later you can train this algorithm live by telling JeVois to capture and save an image of an object, which can be used later to identify this object again.
First, enable display of a training window using:
setpar showwin true
You should now see a gray rectangle. You can adjust the window size and aspect ratio using the
Point your JeVois camera to a clean view of an object you want to learn (if possible, with a blank, featureless background, as this algorithm does not attempt to segment objects and would otherwise also learn features of the background as part of the object). Make sure the objects fits inside the gray rectangle and fills as much of it as possible. You should adjust the distance between the object and the camera, and the grey rectangle, to roughly match the distance at which you want to detect that object in the future. Then issue the command:
over a serial connection to JeVois, where somename is the name you want to give to this object. This will grab the current camera image, crop it using the gray rectangle, and save the crop as a new training image somename.png for immediate use. The algorithm will immediately re-train on all objects, including the new one. You should see the object being detected shortly after you send your save command. Note that we save the image as grayscale since this algorithm does not use color anyway.
You can see the list of current images by using command:
Finally, you can delete an image using command:
where somename is the object name without extension, and a .png extension will be added. The image will immediately be deleted and that object will not be recognized anymore.
For more information, see JeVois tutorial Live training of the Object Detection module and the associated video:
This module can send standardized serial messages as described in Standardized serial messages formatting. One message is issued on every video frame for the best detected object (highest score).
See Standardized serial messages formatting for more on standardized serial messages, and Helper functions to convert coordinates from camera resolution to standardized for more info on standardized coordinates.
This algorithm is quite slow. So, here, we alternate between computing keypoints and descriptors on one frame (or more, depending on how slow that gets), and doing the matching on the next frame. This module also provides an example of letting some computation happen even after we exit the