我想通过网络摄像头实时识别脸部。我一直在通过网络摄像头检测脸部,但我在使用Java(Netbeans)实现特征脸算法时遇到了麻烦。
我使用以下代码实现了面部检测: -
private DaemonThread myThread = null;
int count = 0;
VideoCapture webSource = null;
Mat frame = new Mat();
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector = new CascadeClassifier(ScannerGUI.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
MatOfRect faceDetections = new MatOfRect();
class DaemonThread implements Runnable
{
protected volatile boolean runnable = false;
@Override
public void run()
{
synchronized(this)
{
while(runnable)
{
if(webSource.grab())
{
try
{
webSource.retrieve(frame);
//Highgui.imencode(".bmp", frame, mem);
Graphics g=jPanel1.getGraphics();
faceDetector.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray())
{ Imgproc.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 255, 0),2);
}
Imgcodecs.imencode(".bmp", frame, mem);
Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage buff = (BufferedImage) im;
if (g.drawImage(buff, 0, 0, getWidth(), getHeight() -150 , 0, 0, buff.getWidth(), buff.getHeight(), null))
if(runnable == false)
{
System.out.println("Going to wait()");
this.wait();
}
}
catch(Exception ex)
{
System.out.println("Error");
}
}
}
}
}
}
现在我想首先在特征面上保存检测到的面部,然后识别这个面部。
有人可以帮助我解决这个问题吗?我已经在网上彻底搜索了Java中的Eigen face实现,但无法找到任何有用的东西。
请帮我解决这个问题,因为我是OpenCV的新手,也是我的大学项目。
答案 0 :(得分:0)
要使用contrib模块(包含Java的org.opencv.face包)从源构建OpenCV,请参阅this question and answer。
使用contrib模块构建JAR后,您可以像这样实例化一个EigenFaceRecognizer:
FaceRecognizer model = org.opencv.face.Face.createEigenFaceRecognizer();