2014-09-24 4 views
2

Я работаю над приложением openCV. С помощью некоторого кода я могу обнаружить фронтальные поверхности. Я хочу обнаружить и просто следить за тем, как пользователь улыбается. Моя идея заключалась в обнаружении лица, я рисую вокруг него прямоугольник, и в этот момент я бы назвал обнаружение улыбки. До сих пор мой результат был менее успешным. Я отправляю свой код для обнаружения лиц, может ли кто-нибудь дать мне какие-либо указания, как начать с цикла for внутри обнаружения лица. Спасибо.Обнаружение улыбки внутри лица с использованием openCV в Java

public Mat detect(Mat inputframe) { 
     Mat mRgba = new Mat(); 
    Mat mGrey = new Mat(); 
    MatOfRect faces = new MatOfRect(); 
    inputframe.copyTo(mRgba); 
    inputframe.copyTo(mGrey); 
    Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_BGR2GRAY); 
    Imgproc.equalizeHist(mGrey, mGrey); 
    face_cascade.detectMultiScale(mGrey, faces); 
    System.out.println(String.format("Detected %s face", 
      faces.toArray().length)); 
    MatOfRect smileDetections = new MatOfRect(); 
    face_cascade1.detectMultiScale(mGrey,smileDetections); 
    System.out.println(String.format("Detected %s smiles",smileDetections.toArray().length)); 
    for (Rect rect : faces.toArray()) { 
     Point center = new Point(rect.x + rect.width * 0.5, rect.y 
       + rect.height * 0.5); 
     Core.ellipse(mRgba, center, new Size(rect.width * 0.5, 
       rect.height * 0.5), 0, 0, 360, new Scalar(255, 0, 255), 4, 
       8, 0); 
    } 
    return mRgba; 
} 
    } 
+0

какой каскад вы загрузили на 'face_cascade1'? – Micka

+0

Я думаю, что лучшим решением является использование ASM-модели для распознавания выражения лица, как улыбка. что-то вроде этого: http://www.youtube.com/watch?v=v8ipupeMwgo – dervish

+0

Вы также проверили образец opencv: /opencv-2.4.xx/samples/c/smiledetect.cpp? – dervish

ответ

2

Во всяком случае, у вас есть несколько вариантов:

  1. с использованием Active Shape Model (ASM) и активный Appearance Model (AAM), вы можете легко найти некоторые бесплатные библиотеки с открытым исходным кодом.
  2. с использованием некоторых классификаторов статистики: я думаю, вам может понадобиться проверить это полезное paper, они используют классификаторы Tree-Augmented-Naive Bayes (TAN) для распознавания мимических выражений.
  3. Или вы можете использовать распознавание лица opencv api, но не распознавать лица, вы можете определить свои смайлинные лица или даже только муфты с разными случаями, распознаватель opencv будет классифицировать их в соответствии с указанными вами метками класса. Here вы найдете тоталью opencv, рассказывающую вам, как обновлять данные и обучать их.
+0

Спасибо, дервиш, я рассматриваю это как последнее средство для интеграции некоторого кода на C++ в код Java. Это единственный вариант, который у меня есть. –

+0

Итак, вы можете знать применение jni для этой задачи? – dervish

+0

Спасибо. То, что я планирую делать. –

Смежные вопросы