vision library - mintforpeople/robobo-programming GitHub Wiki
The vision library provides an easy interface for using the smartphone camera and a series of different computer vision algorithms. The library is composed by three ROBOBO modules:
This module is the base of all the vision modules, it manages the capture of camare frames, and and provides a method to access those camera frames from applications and other modules.
The interface of this module is shown below:
public interface ICameraModule extends IModule {
public void suscribe(ICameraListener listener);
public void unsuscribe(ICameraListener listener);
public void signalInit();
public void passOCVthings(CameraBridgeViewBase bridgebase);
public void changeCamera();
}The suscribe() and unsuscribe() methods are used to subscribe to the frame feed.
signalInit() is used to signal the camera nodule to start capturing frames.
passOCVthings() is required only for the OpenCv implementation of the module,
and is used to pass the module the preview surface where the images are captured, this will be further explained at the OpenCv basic camera module section.
The last one is changeCamera(), and is used to switch between the cameras of the smartphone.
The classes which want to have access to the image feed need to implement the following interface:
public interface ICameraListener {
void onNewFrame(Frame frame);
void onNewMat(Mat mat);
}onNewFrame() notifies the listener when a frame is available and returns a
Frame object.
onNewMat() notifies the listener when a frame is available and returns an OpenCv
Mat object.
Some parameters of the module can be configured via a vision.properties file located at the
assets folder of the Android project.
resolution_height = 240
resolution_width = 160
ICameraModule cameraModule = roboboManager.getModuleInstance(ICameraModule.class);OpenCv basic camera module
This module is implemented using the OpenCV library.
To use this module on your Robobo project you must declare it on the modules.properties file of the project as follows:
robobo.module.XX = com.mytechia.robobo.framework.hri.vision.basicCamera.opencv.OpenCVCameraModuleThis module provides the functionality of detecting faces on captured images.
The interface of the module only contains methods to manage the subscription of the listeners:
public interface IFaceDetectionModule extends IModule{
public void suscribe(IFaceListener listener);
public void unsuscribe(IFaceListener listener);
}The listener interface is the following:
public interface IFaceListener {
void onFaceDetected(PointF faceCoords, float eyesDistance);
void onFaceAppear(PointF faceCoords, float eyesDistance);
void onFaceDissapear();
}onFaceDetected() returns the coordinates of the detected face and the distance between eyes, measured in pixels, onFaceAppear() is called when a face is detected for
the first time and onFaceDissapear() when a face is lost for five frames.
Note: Only one face detection per image is supported at this moment
This module depends on the basicCameraModule
IFaceDetectionModule faceModule = roboboManager.getModuleInstance(IFaceDetectionModule.class);Android face detection module:
This implementation was developed using the FaceDetector class provided by the Android API.
To use this module on your ROBOBO project you must declare it on the modules.properties file of the project.
robobo.module.0 = com.mytechia.robobo.framework.hri.vision.faceDetection.android.AndroidFaceDetectionModuleThis module allows to detect the main color of the scene, spliting it in the three RGB channels.
The interface of the module only allows the developer to suscribe and unsuscribe to the feed of color notifications. If we want to receive those notifications, the interface 'IColorMesauredListener' must be implemented.
public interface IColorMesauredListener {
void onColorMesaured(int r, int g, int b);
}onColorMesaured() returns the main color of the scene splitted in the three
RGB channels.
IColorMeasurementModule colorMeasurementModule = roboboManager.getModuleInstance(IColorMeasurementModule.class);OpenCvColorMeasurementModule:
To use this module on your ROBOBO project you must declare it on the modules.properties file of the project.
robobo.module.0 = com.mytechia.robobo.framework.hri.vision.colorMesaurement.opencv.OpenCVColorMesaurementModule
This module allows to track color blobs the scene, spliting it in the three RGB channels.
public interface IBlobTrackingModule extends IModule{
void configureDetection(boolean detectRed, boolean detectGreen, boolean detectBlue, boolean detectCustom);
void suscribe(IBlobListener listener);
void unsuscribe(IBlobListener listener);
void setThreshold(int th);
}The interface of the module only allows the developer to suscribe and unsuscribe to the feed of color blob notifications ad configurate the behavior of the module. If we want to receive those notifications, the interface 'IBlobListener' must be implemented.
public interface IBlobListener {
void onTrackingBlob(Blob blob);
void onBlobDisappear(Blobcolor c);
}onTrackingBlob() returns a Blob object, with the information of the currently tracked blob. onBlobDisappear() is used to notify the user when a tracked blob is lost.
IBlobTrackinModule blobTrackingModule = roboboManager.getModuleInstance(IBlobTrackingModule.class);OpenCvBlobTrackingModule:
To use this module on your ROBOBO project you must declare it on the modules.properties file of the project.
robobo.module.0 = com.mytechia.robobo.framework.hri.vision.blobTracking.opencv.OpenCVBlobTrackingModuleThe javadoc documentation of this module can be found here