Desktop Java - попытка создать класс для распознавания лиц с помощью JavaCV

Может ли класс распознавания лиц распознавать лицо только с одним изображением в базе данных? Я использую только фронтальные лица, и я хотел бы использовать алгоритм fisherfaces.

В любом случае, я пытаюсь реализовать метод, основанный на образцах, которые я нашел в Интернете, он еще не завершен и не протестирован.

Метод будет использовать кадр из захвата видео, который возвращает Mat, кадр Mat преобразуется в bufferedImage, и я отправляю это bufferedImage в качестве параметра этому методу, который я собираюсь использовать для распознавания лиц. Как бы то ни было, когда я использую

IplImage getVCFrame = создать из (кадра)

он говорит, что createFrom(BufferedImage) не определен. Я хочу, чтобы это преобразовало буферизованное изображение в IplImage.

Вот мой оставшийся код до сих пор (имейте в виду, что он не завершен, я просто хочу понять, почему eclipse дает мне неопределенную ошибку)

package Function;

import com.googlecode.javacv.cpp.opencv_core;

import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_contrib.*;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;

import org.opencv.core.Mat;

public class FaceRecognition {

    public void checkFace(String imagePath, BufferedImage frame) {
        // Video Camera Frame       
        IplImage getVCFrame = new IplImage();
        getVCFrame = createFrom(frame);

        // Frame from Storage
        IplImage img;
        IplImage grayImg;
        int numberOfImages = 1;
        int label;

        MatVector images = new MatVector(numberOfImages);
        int[] labels = new int[numberOfImages];

        img = cvLoadImage(imagePath);
        label = 1;
        grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1);
        cvCvtColor(img, grayImg, CV_BGR2GRAY);

        images.put(0, img);
        labels[0] = label;

        IplImage GrayVCFrame = IplImage.create(getVCFrame.width(), getVCFrame.height(), IPL_DEPTH_8U, 1);


        FaceRecognizer fr = createFisherFaceRecognizer();
        //FaceRecognizer faceRecognizer = createEigenFaceRecognizer();
        // FaceRecognizer faceRecognizer = createLBPHFaceRecognizer();

        fr.train(images, labels);
        cvCvtColor(getVCFrame, GrayVCFrame, CV_BGR2GRAY);
    }
}

Сначала я использовал OpenCV для распознавания лиц, но когда дело дошло до распознавания лиц, я не смог найти никакой помощи и руководств, поэтому я импортировал JavaCV, чтобы попытаться использовать его для распознавания лиц.


person Joseph118    schedule 01.03.2014    source источник


Ответы (1)


Мне удалось исправить свою ошибку, у меня была синтаксическая ошибка с моей стороны...

getVCFrame = IplImage.createFrom(frame);

Это исправило мою ошибку, я проверю, возможно ли это с 1 изображением, как только мой код будет завершен.

person Joseph118    schedule 03.03.2014
comment
Вы когда-нибудь выясняли, можно ли распознать лицо после обучения только 1 изображению? Это было бы очень полезно для меня. Спасибо! - person dave823; 03.03.2015
comment
Привет, Дэйв, да, но очень маловероятно, что возвращенный пользователь был правильным. Порог всегда был выше 5000. Это было проверено с помощью моей веб-камеры на моем ноутбуке. Я предлагаю вам использовать более 1 изображения и в разных ракурсах. Если вы проведете небольшое исследование, вам будет предложено использовать набор изображений (чем их больше, тем лучше). - person Joseph118; 17.04.2015
comment
@ dave823 Извините за мой поздний ответ ... В последнее время я был занят и был неактивен в stackoverflow. Надеюсь, мой комментарий выше поможет вам :). - person Joseph118; 17.04.2015