这位少侠我看你百会穴发绿啊

https://github.com/mlxy/FacePlusPlusDemo

 

一个超良心的人脸识别接口,完全免费,开发者版给三个并发,个人用足够。

开发者中心里建个应用就可以用了。

官网在这:http://www.faceplusplus.com.cn/

 

API简洁易懂,有两个概念。

一个是人(Person),一个是脸(Face)。

还有人群Group和脸集合FaceSet。

Demo用到了人脸识别接口Detect,用Post方式提交图片数据或者Get提交图片URL都行,结果包括年龄、性别、是否戴眼镜和眼镜类型、人种和笑容值,还包括误差和可信度。

还用到了相似度比对接口Verify,返回两张脸的相似度。不过提交的是脸的ID,所以需要先行识别两张脸获取返回的FaceID。

只识别不保存到人(Person)的脸(Face)只给保存72小时,如果不需要保存只做一次性识别的话无所谓。

 

Demo的界面就很简单了,用了一个图片选择器来选照片,然后调用系统相机拍照,只上传一个或两个都上传,最后简单显示结果。

 

选择照片:

用隐式意图开一个文件选择器,Action用自带的图片类型。

Intent intent = new Intent("android.intent.action.PICK", MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 2);

返回的结果是一个URI,用网上找到的工具类转成具体路径。

public static String getRealFilePath(final Context context, final Uri uri) {
    if (null == uri)
        return null;
    final String scheme = uri.getScheme();
    String data = null;
    if (scheme == null)
        data = uri.getPath();
    else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
        data = uri.getPath();
    } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
        Cursor cursor = context.getContentResolver().query(uri, new String[] { ImageColumns.DATA }, null, null, null);
        if (null != cursor) {
            if (cursor.moveToFirst()) {
                int index = cursor.getColumnIndex(ImageColumns.DATA);
                if (index > -1) {
                    data = cursor.getString(index);
                }
            }
            cursor.close();
        }
    }
    return data;
}

把图片解码出来。

BitmapFactory.decodeFile(path);

压缩成字节数组上传就行了。

public byte[] bitmap2Bytes(Bitmap bm) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
    return baos.toByteArray();
}

 

 

拍照的Action用这个

MediaStore.ACTION_IMAGE_CAPTURE

返回的结果键名是data,内容就是Bitmap,强转一下就行了。

posted @ 2015-05-11 10:28  Chihane  阅读(239)  评论(0编辑  收藏  举报