我制作了一个程序,用于检测图像中的面部:
>>> x = "22.0;2016-01-16 00:16:18"
>>> x.strip().split(';')
['22.0', '2016-01-16 00:16:18']
>>> y = [word.split(' ') for word in x.split(';')]
>>> y
[['22.0'], ['2016-01-16', '00:16:18']]
>>> [item for sublist in y for item in sublist]
['22.0', '2016-01-16', '00:16:18']
我得到了这个: John lennon picture
想要通过该计划识别出Image中的人并在之后显示他的名字。
类似的东西:电脑:这个人是约翰。
答案 0 :(得分:2)
package com.test8;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
class FaceDetection {
// Load the native library.
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
public static void main(String[] args) {
System.out.println("\nRunning DetectFaceDemo");
CascadeClassifier faceDetector = new CascadeClassifier("D:\\AntonKONG\\OpenCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
Mat image = Imgcodecs.imread("src//data//hkid2.png");
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Faces detected: %s ", faceDetections.toArray().length));
for (Rect rect : faceDetections.toArray()) {
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0), 3);
}
String filename = "detcSuccessful.png";
Imgcodecs.imwrite(filename, image);
}
}
答案 1 :(得分:1)
以下是我之前在C ++的opencv 2.4中编写的代码。正如我所看到的,您正在使用JAVA-OpenCV包装器,因此您可以轻松找到JAVA等价物。在以下代码中,图像是图像矢量,标签是标签矢量。对于实际情况,请考虑您的搜索空间仅限三人:
0 : John Lenon
john1.png // 100x90 px
john2.png // 100x90 px
john3.png // 100x90 px
1 : Robert DeNiro
robert1.png // 100x90 px
robert2.png // 100x90 px
robert3.png // 100x90 px
2 : AlPacino
al1.png // 100x90 px
al2.png // 100x90 px
al3.png // 100x90 px
0,1,2是标签,你可以看到有3个面对应每个标签。读取每个图像并将其存储在Mat对象中。如下:
Mat j1,j2,j3; // John Lennon's faces :: label 0
Mat r1,r2,r3; // Robert Deniro's faces :: label 1
Mat a1,a2,a3; // Al Pacino's faces :: label 2
创建图像矢量和标签矢量,如下所示:
images:{j1,j2,j3,r1,r2,r3,a1,a2,a3}
labels:{0,0,0,1,1,1,2,2,2}
然后,将它们传递给下面的代码。
cv::Ptr<cv::FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
int prediction;
double confidence;
model->predict(Frame,prediction,confidence);
很抱歉用C ++回答,但我确信有类似的回答。此外,请确保您使用的是哪个版本的opencv。