如何在非摄像头应用程序中使用Android摄像头API?
我想在非摄像头应用程序中使用一些Android 4 API 该API包括一些非常好的人脸检测类,包括API 14以来提供的如何在非摄像头应用程序中使用Android摄像头API?,android,camera,android-image,face-detection,image,Android,Camera,Android Image,Face Detection,Image,我想在非摄像头应用程序中使用一些Android 4 API 该API包括一些非常好的人脸检测类,包括API 14以来提供的Camera.Face类。我想应用相同的人脸检测类,以便在设备上保存的图像上实现人脸检测。我更愿意使用它来处理存储在设备本身上的图片(例如:社交标签、人脸图像处理等) 我需要有关如何完成此重复使用任务的指导。FaceDetectionListener是您想要用来检测人脸的工具,但它只在相机上进行监听。这是它唯一的本机功能。如果您真的想在用户设备上的图片上使用它,我建议您只需下
Camera.Face
类。我想应用相同的人脸检测类,以便在设备上保存的图像上实现人脸检测。我更愿意使用它来处理存储在设备本身上的图片(例如:社交标签、人脸图像处理等)
我需要有关如何完成此重复使用任务的指导。FaceDetectionListener是您想要用来检测人脸的工具,但它只在相机上进行监听。这是它唯一的本机功能。如果您真的想在用户设备上的图片上使用它,我建议您只需下载摄像头API的源代码,并根据需要调整方法 您可以在此处找到所有股票android代码的源代码: 祝你好运 你知道上课吗?它从API v1开始就存在了,并且工作得很好。如果您需要更高级的东西,您可以始终使用一些专用框架,例如(还提供了一些Java绑定,以便轻松集成到Android应用程序中) 您可以查看我前几天与同事撰写的几篇文章(虽然没有什么过时,但仍然很有用):
如果你需要的是检测设备上存储的图像中的人脸,你完全可以做到这一点,而无需破解android的源代码 自API 1以来,android.media软件包中提供了一个API,它接受
位图作为输入(格式为565格式),并提供该图片中面的位置
以下是您需要的步骤:
1-加载位图
并将其转换为565格式
(假设您的可绘图资源下有facesPicture
文件)
2-定义人脸
数组以保存检测到的人脸信息并初始化人脸检测器
int MAX_FACES = 20; // assuming that the image will have maximum 20 faces
FaceDetector.Face[] faces = new FaceDetector.Face[MAX_FACES];
FaceDetector faceDetector =
new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), MAX_FACES);
3-搜索面和处理结果
int facesCount = faceDetector.findFaces(bitmap, faces);
for(int i=0; i<facesCount; i++) {
FaceDetector.Face face = faces[i];
float detectionConfidence = face.confidence(); // over 0.3 is OK
PointF eyesMidPoint = new PointF();
face.getMidPoint(eyesMidPoint);
float eyesDistance = face.eyesDistance();
float rotationX = face.pose(FaceDetector.Face.EULER_X);
float rotationY = face.pose(FaceDetector.Face.EULER_Y);
float rotationZ = face.pose(FaceDetector.Face.EULER_Z);
// Do something with these values
}
int facescont=faceDetector.findFaces(位图,面);
for(int i=0;iThanks,但是我还没有找到摄像头API的源代码(我搜索过)。感谢您的帮助。请尝试查看这里的代码:如果不在那里,很可能在硬件框架中。让我知道它是如何运行的。事实上,里面没有任何内容:谢谢。其他两个链接呢?嗨,Nathan,谢谢,到目前为止,其他链接都没有成功。我可能找错地方了。谢谢!我知道,人脸检测器
类,但您可能知道它只检测人脸、眼睛和眼睛中点。而不是鼻子和嘴巴。关于OpenCV,它实际上是我现在正在研究的!我明白了,您需要更强大的功能。OpenCV是最好的选择。请注意:您可以使用相同的级联分类器(基于Haar的是最精确的)以及一整套训练集,以识别不同的面部特征。谢谢!但正如您在上面的评论中所看到的,我也在研究检测鼻子和嘴巴,这是FaceDetector
无法提供的。您可以使用OpenCV
,或者尝试实现鼻子和嘴巴检测算法即使你知道眼睛的位置。你可以看到OpenCV的代码来获得我目前正在做的理想行为。谢谢!
int facesCount = faceDetector.findFaces(bitmap, faces);
for(int i=0; i<facesCount; i++) {
FaceDetector.Face face = faces[i];
float detectionConfidence = face.confidence(); // over 0.3 is OK
PointF eyesMidPoint = new PointF();
face.getMidPoint(eyesMidPoint);
float eyesDistance = face.eyesDistance();
float rotationX = face.pose(FaceDetector.Face.EULER_X);
float rotationY = face.pose(FaceDetector.Face.EULER_Y);
float rotationZ = face.pose(FaceDetector.Face.EULER_Z);
// Do something with these values
}