人脸识别——FACE++服务评测

测试点评

Face++服务是一款致力于人脸识别的技术服务,提供免费的API和SDK供企业和开发者调用:

1. Face++是一款免费的跨安卓,IOS,MAC,PC等多平台支持的人面识别服务。

2. FACE++具备检测,关键点,识别三项技术强项

3. FACE++支持多种语言,包括python,object-c,java,matlab,php,c#,javascript。

4. 提供Android,IOS,WindowsPhone,PC,web等多平台的SDK集成,参考例子和DEMO。

 

经过笔者在2G和3G网络下对Face++的评测: 

1.人脸检测能在不同光线条件下,图像不同灰度值下快速的检测出来

2.对方向性有要求,对多种人脸姿态识别率相对较低

3.支持离线检测

开发建议

经过笔者对Face++的使用,从开发者的角度,给想使用该服务的开发者几个建议:

1. Face++的API采用的面向服务的调用模型,对于开发者而言,只要掌握基本的服务调用方法,就很容易掌握一系列开发的技巧。

2. 集成到客户端时,需要仔细阅读FACE++的相应语言文档。

评测环境

 

测试对象

FACE++

测试手机

三星Galaxy S I9000

系统版本

4.2.1

手机网络

WIFI

测试方法

客户端运行DEMO+手机自带摄像头识别

测试时间

2014-2-25 21:13-21:43

光线环境

室内自然光线

摄像头角度

分为正面,侧面,倾斜测试

 

基本参数:

是否免费

免费

支持平台

Android、iOS、Linux、windows和Mac OS等

支持语言

Python ,Objective-C,Java ,Matlab ,C#,javascript,php

安装包大小

1.4M

支持人脸检测

支持

支持人脸分析

支持

支持人脸识别

支持

集成过程

一 如何嵌入客户端SDK

1. 从http://www.faceplusplus.com.cn/下载SDK

2. 建立一个java工程。

3. 在AndroidManifest.xml中添加权限,此处代码详见测试DEMO 1

4. 根据需求选择离线SDK中依赖库以及libs/faceapi.jar拷入工程内的libs文件夹内,例如若  APP的运行环境为armeabi架构,如下图所示:

5. 接着,在程序中初始化一个    com.faceplusplus.api.FaceDetector类。注意类初始化时需要使用到当前   context以及使用者对应的    API_Key,这个API_Key必须与下载离线检测器的  App对应的  API_Key一致才可以正确调用这个库。下面是一个调用示例:

初始化:

detecter = new FaceDetecter();

//初始化

detecter.init(this"a986f2e7b07928316d92ca4fb8b5a769");    

检测,并获取检测结果:

Face[] faceinfo = detecter.findFaces(curBitmap);// 进行人脸检测

若图像由摄像头采集,则原始数据将以YUV格式存储,可以先将图像旋转到正确的方向后使用灰度图的形式传入检测器

此处代码详见测试DEMO 2

 

6. 离线检测器与线上   API的协同功能:如果需要用到线上  API的更多功能,可以将本地的检测结果直接上传(从而节省传输的数据量,仅会上传脸部图像)。使用离线 SDK中 HttpRequest的新方法  offlineDetect,可将离线结果直接同步至线上,并获取 face_id进行后续操作,如下图所示:

二 测试截图

三 遇到的问题

 

笔者只测试了人脸检测模块,人面识别无法评测。原因是要使用人面识别功能必须申请上线,通过FACE++官方审核,审核通过后才能在站点上管理人和组,有人和组的相关信息后才可以使用识别模块。

四  上手难易

 1.Face++使用基于服务的调用方式来管理所有的API,极大降低了编写人面识别程序的难度,这种基于云服务的架构非常优秀,将很难理解的识别技术用方便快捷的服务调用来封装,非常有利于开发者学习!

 2.上手难度为中等。

五  花费时间

取决于开发者基于HTTP的服务调用的熟练程度以及对识别技术的一些原理了解情况,如果上述都达标,可以边看文档边写代码;如果不清楚人面识别原理,需要多花费时间进行补习相关知识。

六  开发支持和文档

Face++提供多平台和语言的支持:

测试日志

测试日志如下截图:

测试DEMO

测试DEMO 1    

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.megvii.apitest"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="10"

        android:targetSdkVersion="18" />

 

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

 

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.faceplusplus.apitest.MainActivity"

            android:label="@string/app_name2" >

              <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity

            android:name="com.faceplusplus.apitest.CameraPreview"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

测试DEMO 2

    public void onPreviewFrame(final byte[] data, Camera camera) {

        camera.setPreviewCallback(null);

        detectHandler.post(new Runnable() {

 

            @Override

            public void run() {

                byte[] ori = new byte[width * height];

                int is = 0;

                for (int x = width - 1; x >= 0; x--) {

 

                    for (int y = height - 1; y >= 0; y--) {

 

                        ori[is] = data[y * width + x];

 

                        is++;

                    }

 

                }

                final Face[] faceinfo = facedetecter.findFaces( ori, height,

                        width);

                runOnUiThread(new Runnable() {

 

                    @Override

                    public void run() {

                        mask.setFaceInfo(faceinfo);

                    }

                });

                CameraPreview.this.camera.setPreviewCallback(CameraPreview.this);

            }

        });

    }

 

离线检测器与线上API的协同功能

        //在线api交互

        try {

            request.offlineDetect(detecter.getImageByteArray(),detecter.

getResultJsonString(), new PostParameters());

        } catch (FaceppParseException e) {

            // TODO 自动生成的 catch 块

            e.printStackTrace();

        }

主要功能

人脸检测:Face++人脸检测与跟踪技术提供快速、高准确率的人像检测功能。普遍适用于图片与实时视频流,能够应对复杂的光照并支持多种人脸姿态。可检出不小于16*16像素的人脸,并可在移动设备上实时跟踪人脸(20帧/秒),其中检测中的关键点检测,精确定位面部的关键区域位置,包括眉毛、眼睛、鼻子、嘴巴,脸部轮廓等。支持一定程度遮挡以及多角度人脸。使用关键点检测技术,可以精确定位人脸美化局部,还可以实现表情交互。

静态检测:检测静态的图片,得到关键点信息。

左右上无法识别

检测对于方向性有要求

想要了解更多测试内容,请登录:

http://www.devstore.cn/test/testInfo?tc=e9daa1d7a1cec66d84b34fe0c44170bd&id=eb79024e0245fc1eda53e60c04223fbe查看

猜你喜欢

转载自devstore.iteye.com/blog/2058677