OpenCV Android: wait for user input? [closed]
I am implementing a facial expression recognition (FER) in openCV, entirely on C++.
Now that my program is up and ready, I am planning to implement this in Android using JNI so that I do not have to change my code.
I have three stages in my program, which is as follows:
Face-detection using cascade classifier Local Binary Pattern to determine feature Vector Expression Classification using Support Vector Machine I have two 'modes' which are:
Training mode, where the program asks user to mimic different expressions, process them to determine feature vectors, then train the SVM 'Live' Mode, where the program determines the predicted expression on given expression. My problem lies on the training mode. In executable program, I use getchar to wait for user (so that they can change their expression and then press Enter to mimic the next expression) and then take 100 face images, etc so on until I get images for all expressions. In this way user can 'get ready' for the next expression.
Now, I do not know how to do this in android programming , since I am really not used to it.
I want to maybe, take the first 100 face images for one expression, wait for user to touch the screen, then take another 100 face images expression, and so on.
So generally what I am asking is, how to program in such a way that I can wait for user input before proceeding to the next step ?
Sorry for my bad english, not my first language so hope you guys don't mind.
Here is a snippet of my code (only the Java part) so you guys have some idea.
public class Tutorial2Activity extends Activity implements CvCameraViewListener2 {
private static final String TAG = "OCVSample::Activity";
private static final int VIEW_MODE_LIVE_MODE = 0;
private static final int VIEW_MODE_TRAINING_MODE = 1;
private int mViewMode;
private Mat mRgba;
private Mat mIntermediateMat;
private Mat mGray;
private File mCascadeFileEyes;
private File mCascadeFileClassifier;
private MenuItem mItemLiveMode;
private MenuItem mItemTrainingMode;
private int mCameraId;
private CameraBridgeViewBase mOpenCvCameraView;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
// Load native library after(!) OpenCV initialization
System.loadLibrary("mixed_sample");
mCameraId = 1;
mOpenCvCameraView.setCameraIndex(mCameraId);
InputStream is, isClassifier;
FileOutputStream os, osClassifier;
try {
is = getResources().getAssets().open("lbpcascade_frontalface.xml");
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFileEyes = new File(cascadeDir, "lbpcascade_frontalface.xml");
//FileOutputStream os;
os = new FileOutputStream(mCascadeFileEyes);
byte[] buffer = new byte[16384];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.close();
Log.i(TAG, "face cascade found");
} catch (IOException e) {
Log.i(TAG, "face cascade not found");
}
try {
isClassifier = getResources().getAssets().open("svmClassifier.yml");
File cascadeDirClassifier = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFileClassifier = new File(cascadeDirClassifier, "svmClassifier.yml");
//FileOutputStream os;
osClassifier = new FileOutputStream(mCascadeFileClassifier);
byte[] bufferClassifier = new byte[16384];
int bytesReadClassifer;
while ((bytesReadClassifer = isClassifier.read(bufferClassifier)) != -1) {
osClassifier.write(bufferClassifier, 0, bytesReadClassifer);
}
isClassifier.close();
osClassifier.close();
Log.i(TAG, "svmClassifier found");
} catch (IOException e) {
Log.i(TAG, "svmClassifier not ...