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,强转一下就行了。