如何在非摄像头应用程序中使用Android摄像头API?

如何在非摄像头应用程序中使用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是您想要用来检测人脸的工具,但它只在相机上进行监听。这是它唯一的本机功能。如果您真的想在用户设备上的图片上使用它,我建议您只需下

我想在非摄像头应用程序中使用一些Android 4 API

该API包括一些非常好的人脸检测类,包括API 14以来提供的
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
    
    }