c 虹软 人脸识别人脸比对(1:1)和人脸检索(1:N)在接口、效果等方面有什么区别?

Android 实现人脸识别教程[运用虹软人脸识别SDK]
时间: 10:57:29
&&&& 阅读:1346
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&&基于虹软人脸识别引擎,在平台上实现人脸识别功能,即使在离线的情况下依旧运行,不被人采集个人照片的感觉,还是爽爽的。经过整个过来,虹软的人脸识别还是很强大的,人脸检测可以控制在20ms之内,人脸识别大概在200ms左右。今天就来分享一下开发经验
项目的目标
我们需要实现一个人脸识别功能。简单来说,就是机的后置摄像头,识别摄像头中实时拍到的人脸信息,如果人库注册过,则显示识别后的人脸信息,如登记的名字;如果不在,提示未注册。&这个功能具有多个应用场景,比如,火车站或者打卡和门禁系统中。
人脸识别的过程
人脸识别包括两个必备的过程,人脸注册和实时识别。&人脸注册是指把人脸的特征信息注册到人脸信息库中。人脸注册的来源可以有很多种,比如
国家身份证库
企业自建人脸识别库
人脸特征提取是一个不可逆的过程,你无法从人脸特征信息还原一个人的脸部照片。
在线库在使用时,需要传递照片信息,或者提取图像特征值,
离线的SDK相对安全,但是,在线的SDK通常提供更多的接入和调用方式,这个要结合实际情况来选择。
人脸注册和识别的过程可以用下面的图来表示。&
在开发之前需要到虹软的官网&&下载用到的库,下载的压缩包中有3个压缩包,如下图:&
其中,第一个Face Detection,人脸检测。&人脸检测是人脸技术的基础,使用虹软人脸引擎,能够帮助您检测并且定位到影像(图片或者视频)中的人脸。
第二个Face Recognition,
人脸识别。引擎可独立运行在终端设备或者独立服务器中,应用端可独立完成运行,能保证用户数据的私密性,自主运营与保护用户敏感信息。&第三个Face Tracking,
人脸跟踪。精确定位并追踪面部区域位置,随着人物脸部位置的变化能够快速定位人脸位置,并且适用于不同表情、性别、年龄、姿态、光照等条件。
这三包的结构基本相同,我们需要把它们解压。
doc 此目录中存放GUIDE文档,是说明文档,里面介绍了公开发布的一些API,并提供了示例代码。
libs 开发中需要用到的库,需要把它们目录结构不变的全部引用到你的项目项目中。
sampleCode 示例代码
版本与环境要求
根据SDK的说明,我们使用的版本为android arm32,版本为5.0.我们使用的IDE为android studio,你也可以使用eclipse,不过依然建议你使用android studio,因为它现在已经是事实上的标准。
一步一步实现人脸识别功能
本文将以这三个库为基础,从人脸注册开始,到人脸识别结束。全程演示人脸识别的流程。如果你不想从头开始,你可以到&下载完整的示例程序
打开android studio,建立项目,API兼容性选择4.0。
导入依赖包
虹软人脸SDK的包是so包,你可以在下载的压缩包中把这些文件找到并导入。&导入后的工程文件夹如下所示。
定义并实现人脸库的相关功能
如前面所述,我们希望定义自己 的人脸库,人脸库在程序中使用List存储,在系统中保存为txt文件。
通过查询引擎,可以知道人脸信息是保存在AFR_FSDKFace类中的。这的主要结构为
public static final int FEATURE_SIZE = <span class="hljs-number" style="color: #020;
byte[] mFeatureD
我们需要定义另外一个类来把人脸信息和姓名关联起来。
class FaceRegist {
List&AFR_FSDKFace& mFaceL
public FaceRegist(String name) {
mFaceList = new ArrayList&&();
包含特征信息的长度和内容的byte数组。&我们把这些功能定义在类FaceDB中。FaceDB需要包含引擎定义,初始化,把人脸信息保存在版本库和从版本库中读出人脸信息这些功能
初始化引擎
为了程序结构性考虑,我们将人脸识别相关的代码独立出来一个类FaceDB,并定义必要的变量
public static String appid = "bCx99etK9Ns4Saou1EbFdC18xHdY9817EKw****";
public static String ft_key = "CopwZarSihp1VBu5AyGxfuLQdRMPyoGV2C2opc****";
public static String fd_key = "CopwZarSihp1VBu5AyGxfuLXnpccQbWAjd86S8****";
public static String fr_key = "CopwZarSihp1VBu5AyGxfuLexDsi8yyELdgsj4****";
String mDBP
List&FaceRegist& mR
AFR_FSDKEngine mFRE
AFR_FSDKVersion mFRV
定义有参数的构造函数来初始化引擎
public FaceDB(String path) {
mRegister = new ArrayList&&();
mFRVersion = new AFR_FSDKVersion();
mUpgrade = false;
mFREngine = new AFR_FSDKEngine();
AFR_FSDKError error = mFREngine.AFR_FSDK_InitialEngine(FaceDB.appid, FaceDB.fr_key);
if (error.getCode() != AFR_FSDKError.MOK) {
Log.e(TAG, "AFR_FSDK_InitialEngine fail! error code :" + error.getCode());
mFREngine.AFR_FSDK_GetVersion(mFRVersion);
Log.d(TAG, "AFR_FSDK_GetVersion=" + mFRVersion.toString());
定义析构函数释放引擎占用的系统资源
public void destroy() {
if (mFREngine != null) {
mFREngine.AFR_FSDK_UninitialEngine();
实现人脸增加和读取功能
通常人脸库会存放在数据库中,本次我们使用List来进行简单的模拟,并将其保存在文本文件中,需要时从文本中读取,保存时写入到文件中。
我们使用addFace方法将待注册的人脸信息添加到人脸库中
void addFace(String name, AFR_FSDKFace face) {
boolean add = true;
for (FaceRegist frface : mRegister) {
if (frface.mName.equals(name)) {
frface.mFaceList.add(face);
add = false;
if (add) {
FaceRegist frface = new FaceRegist(name);
frface.mFaceList.add(face);
mRegister.add(frface);
if (!new File(mDBPath + "/face.txt").exists()) {
if (!saveInfo()) {
Log.e(TAG, "save fail!");
FileOutputStream fs = new FileOutputStream(mDBPath + "/face.txt", true);
ExtOutputStream bos = new ExtOutputStream(fs);
bos.writeString(name);
bos.close();
fs.close();
fs = new FileOutputStream(mDBPath + "/" + name + ".data", true);
bos = new ExtOutputStream(fs);
bos.writeBytes(face.getFeatureData());
bos.close();
fs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
使用loadFaces从文件中读取人脸
public boolean loadFaces(){
if (loadInfo()) {
for (FaceRegist face : mRegister) {
Log.d(TAG, "load name:" + face.mName + "‘s face feature data.");
FileInputStream fs = new FileInputStream(mDBPath + "/" + face.mName + ".data");
ExtInputStream bos = new ExtInputStream(fs);
AFR_FSDKFace afr = null;
if (afr != null) {
if (mUpgrade) {
face.mFaceList.add(afr);
afr = new AFR_FSDKFace();
} while (bos.readBytes(afr.getFeatureData()));
bos.close();
fs.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
if (!saveInfo()) {
Log.e(TAG, "save fail!");
return false;
实现业务逻辑
实现人脸注册功能
人脸识别的前提条件就是人脸信息要先注册到人脸库中,注册人脸库
第一步当然是获取待注册的照片,我们可以可以使用摄像头,也可以使用照片。我们使用AlertDialog弹出选择框
new AlertDialog.Builder(this)
.setTitle("请选择注册方式")
.setIcon(android.R.drawable.ic_dialog_info)
.setItems(new String[]{"打开图片", "拍摄照片"}, this)
在对应的事件处理函数中进行处理
switch (which){
case <span class="hljs-number" style="color: #://摄像头
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE")
ContentValues values = new ContentValues(<span class="hljs-number" style="color: #)
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
mPath = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, mPath)
startActivityForResult(getImageByCamera, REQUEST_CODE_IMAGE_CAMERA)
case <span class="hljs-number" style="color: #://图片
Intent getImageByalbum = new Intent(Intent.ACTION_GET_CONTENT)
getImageByalbum.addCategory(Intent.CATEGORY_OPENABLE)
getImageByalbum.setType("image/jpeg")
startActivityForResult(getImageByalbum, REQUEST_CODE_IMAGE_OP)
获取一张照片后,后续我们就需要实现人脸检测功能。
if (requestCode == REQUEST_CODE_IMAGE_OP && resultCode == RESULT_OK) {
mPath = data.getData();
String file = getPath(mPath);
在上面的代码中,我们获取到了我们需要的图像数据bmp,把图片取出来&我们在Application类用函数 decodeImage中实现这段代码
public static Bitmap decodeImage(String path) {
Bitmap res
ExifInterface exif = new ExifInterface(path)
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
BitmapFactory.Options op = new BitmapFactory.Options()
op.inSampleSize = <span class="hljs-number" style="color: #
op.inJustDecodeBounds = false
//op.inMutable = true
res = BitmapFactory.decodeFile(path, op)
//rotate and scale.
Matrix matrix = new Matrix()
if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
matrix.postRotate(<span class="hljs-number" style="color: #)
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
matrix.postRotate(<span class="hljs-number" style="color: #0)
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
matrix.postRotate(<span class="hljs-number" style="color: #0)
Bitmap temp = Bitmap.createBitmap(res, <span class="hljs-number" style="color: #, <span class="hljs-number" style="color: #, res.getWidth(), res.getHeight(), matrix, true)
Log.d("com.arcsoft", "check target Image:" + temp.getWidth() + "X" + temp.getHeight())
if (!temp.equals(res)) {
res.recycle()
return temp
} catch (Exception e) {
e.printStackTrace()
return null
调用AFD_FSDK_StillImageFaceDetection返回检测到的人脸信息
人脸注册 ,首先要先检测出来人脸,对于静态图片,虹软人脸SDK中对应的是FD,提供了一个方法名称,叫AFD_FSDK_StillImageFaceDetection 。&我们来看一下参数列表
类型 名称 说明&byte[] data 输入的图像数据&int width 图像宽度&int height 图像高度&int format 图像格式&List list 检测到的人脸会放到到该列表里。
注意AFD_FSDKFace对象引擎内部重复使用,如需保存,请clone一份AFD_FSDKFace对象或另外保存
AFD_FSDKFace是人脸识别的结果,定义如下
public class AFD_FSDKFace {
mRect定义一个了一个矩形框Rect
在此之前我们需要注意虹软人脸SDK使用的图像格式是NV21的格式,所以我们需要将获取到的图像转化为对应的格式。在Android_extend.jar中提供了对应的转换函数
byte[] data = new byte[mBitmap.getWidth() * mBitmap.getHeight() * 3 / 2];
ImageConverter convert = new ImageConverter();
convert.initial(mBitmap.getWidth(), mBitmap.getHeight(), ImageConverter.CP_PAF_NV21);
if (convert.convert(mBitmap, data)) {
Log.d(TAG, "convert ok!");
convert.destroy();
现在我们就可以调用AFD_FSDK_StillImageFaceDetection方法了
= engine.AFD_FSDK_StillImageFaceDetection(data, mBitmap.getWidth(), mBitmap.getHeight(), AFD_FSDKEngine.CP_PAF_NV21, result);
绘出人脸框
在List中保存了检测到的人脸的位置信息和深度信息。&我们可以将检测到的人脸位置信息在图片上用一个矩形框绘制出来表示检测到的人脸信息。
Canvas canvas = mSurfaceHolder.lockCanvas()
if (canvas != null) {
Paint mPaint = new Paint()
boolean fit_horizontal = canvas.getWidth() / (float)src.width() & canvas.getHeight() / (float)src.height() ? true : false
float scale = <span class="hljs-number" style="color: #.0f
if (fit_horizontal) {
scale = canvas.getWidth() / (float)src.width()
dst.left = <span class="hljs-number" style="color: #
dst.top = (canvas.getHeight() - (int)(src.height() * scale)) / <span class="hljs-number" style="color: #
dst.right = dst.left + canvas.getWidth()
dst.bottom = dst.top + (int)(src.height() * scale)
scale = canvas.getHeight() / (float)src.height()
dst.left = (canvas.getWidth() - (int)(src.width() * scale)) / <span class="hljs-number" style="color: #
dst.top = <span class="hljs-number" style="color: #
dst.right = dst.left + (int)(src.width() * scale)
dst.bottom = dst.top + canvas.getHeight()
canvas.drawBitmap(mBitmap, src, dst, mPaint)
canvas.save()
canvas.scale((float) dst.width() / (float) src.width(), (float) dst.height() / (float) src.height())
canvas.translate(dst.left / scale, dst.top / scale)
for (AFD_FSDKFace face : result) {
mPaint.setColor(Color.RED)
mPaint.setStrokeWidth(<span class="hljs-number" style="color: #.0f)
mPaint.setStyle(Paint.Style.STROKE)
canvas.drawRect(face.getRect(), mPaint)
canvas.restore()
mSurfaceHolder.unlockCanvasAndPost(canvas)
将人脸注册到人脸库
检测到了人脸,我们可以输入相应的描述信息,加入到人脸库中。
为了提高识别的准确性,我们可以对一个人多次注册人脸信息。
void addFace(String name, AFR_FSDKFace face) {
boolean add = true;
for (FaceRegist frface : mRegister) {
if (frface.mName.equals(name)) {
frface.mFaceList.add(face);
add = false;
if (add) {
FaceRegist frface = new FaceRegist(name);
frface.mFaceList.add(face);
mRegister.add(frface);
if (!new File(mDBPath + "/face.txt").exists()) {
if (!saveInfo()) {
Log.e(TAG, "save fail!");
FileOutputStream fs = new FileOutputStream(mDBPath + "/face.txt", true);
ExtOutputStream bos = new ExtOutputStream(fs);
bos.writeString(name);
bos.close();
fs.close();
fs = new FileOutputStream(mDBPath + "/" + name + ".data", true);
bos = new ExtOutputStream(fs);
bos.writeBytes(face.getFeatureData());
bos.close();
fs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
最后,别忘记了销毁人脸检测引擎哦
err = engine.AFD_FSDK_UninitialFaceEngine()
Log.d("com.arcsoft", "AFD_FSDK_UninitialFaceEngine =" + err.getCode())
实现人脸识别
上面的代码准备完毕后,就可以开始我们的人脸识别的功能了。我们使用一个第三方的扩展库,ExtGLSurfaceView的扩展 库CameraGLSurfaceView,用ImageView和TextView显示检测到的人脸和相应的描述信息。
首先是定义layout。
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" &
android:id="@+id/surfaceView"
android:layout_width="1dp"
android:layout_height="1dp"/&
android:id="@+id/glsurfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"/&
android:id="@+id/imageView"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/&
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imageView"
android:layout_alignRight="@+id/imageView"
android:layout_below="@+id/imageView"
android:layout_marginTop="10dp"
android:text="@string/app_name"
android:textAlignment="center"/&
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imageView"
android:layout_alignRight="@+id/imageView"
android:layout_below="@+id/textView"
android:layout_marginTop="10dp"
android:text="@string/app_name"
android:textAlignment="center"/&
因为引擎需要的图像格式是NV21的,所以需要将摄像头中的图像格式预设置为NV21
public Camera setupCamera() {
// TODO Auto-generated method stub
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK)
Camera.Parameters parameters = mCamera.getParameters()
parameters.setPreviewSize(mWidth, mHeight)
parameters.setPreviewFormat(ImageFormat.NV21)
for( Camera.Size size : parameters.getSupportedPreviewSizes()) {
Log.d(TAG, "SIZE:" + size.width + "x" + size.height)
for( Integer format : parameters.getSupportedPreviewFormats()) {
Log.d(TAG, "FORMAT:" + format)
List&int[]& fps = parameters.getSupportedPreviewFpsRange()
for(int[] count : fps) {
Log.d(TAG, "T:")
for (int data : count) {
Log.d(TAG, "V=" + data)
mCamera.setParameters(parameters)
} catch (Exception e) {
e.printStackTrace()
if (mCamera != null) {
mWidth = mCamera.getParameters().getPreviewSize().width
mHeight = mCamera.getParameters().getPreviewSize().height
return mCamera
从摄像头识别人脸,需要使用FT库,FT库在人脸跟踪算法上对人脸检测部分进行了优化,是专门为视频处理而优化的库。
初始化人脸检测引擎(FT)
和FD一样,我们需要初始化人脸识别FT引擎。
Log.d(TAG, "AFT_FSDK_InitialFaceEngine =" + err.getCode())
err = engine.AFT_FSDK_GetVersion(version)
Log.d(TAG, "AFT_FSDK_GetVersion:" + version.toString() + "," + err.getCode())
在摄像头的预览事件处理函数中,先调用FT的人脸识函数函数,然后再调用FR中的人脸信息特征提取数函数。
AFT_FSDKError err = engine.AFT_FSDK_FaceFeatureDetect(data, width, height, AFT_FSDKEngine.CP_PAF_NV21, result)
AFR_FSDKError error = engine.AFR_FSDK_ExtractFRFeature(mImageNV21, mWidth, mHeight, AFR_FSDKEngine.CP_PAF_NV21,mAFT_FSDKFace.getRect(), mAFT_FSDKFace.getDegree(), result)
这里面的result中保存了人脸特征信息。我们可以将其保存下来或下来并与系统中的其它信息进行对比。
AFR_FSDKMatching score = new AFR_FSDKMatching()
float max = <span class="hljs-number" style="color: #.0f
String name = null
for (FaceDB.FaceRegist fr : mResgist) {
for (AFR_FSDKFace face : fr.mFaceList) {
error = engine.AFR_FSDK_FacePairMatching(result, face, score)
Log.d(TAG,
"Score:" + score.getScore() + ", AFR_FSDK_FacePairMatching=" + error.getCode())
if (max & score.getScore()) {
max = score.getScore()
name = fr.mName
当score的特征信息大于0.6时,我们就可以认为匹配到了人脸。显示人脸匹配信息。
上面的循环中,可以看到,是遍历了真个库进行寻找。我们的目的是为了演示,实际情况下,我们可以在找到一个匹配值比较高的人脸后,就跳出循环。
我们来看一下运行的结果。&效果还不错吧。钟汉良帅哥一枚。
本文档中所有的代码都可以在&下载。如果你需要寻找更多的人脸识别的demo,也可以到虹软的论坛中去寻找。&
附录:会遇到的问题及解决方案
如果你使用的是github中的示例,你可能会遇到下面的问题。
Plugin with id ‘com.android.application’ not found
直接从github上下载的源代码会有这个问题。
解决方案:打开 [项目文件夹]\app\build.gradle 文件
在文件末尾添加
buildscript {
repositories {
mavenCentral()
dependencies {
classpath ‘com.android.tools.build:gradle:1.0.0‘
Failed to find build tools revision 25.0.0.2
这个主要是build 的版本和gradle中指定的版本不一致,按照提示下载或者修改版本指定就可以了。
compileSdkVersion <span class="hljs-number" style="color: #
buildToolsVersion "25.0.2"
install_failed_no_maching_abis
下载的代码在gradle编译完成后,直接默认运行会出现这个错误。原因是由于使用了native libraries 。该native libraries 不支持当前的cpu的体系结构。&首先请检查是否导入了必要的so文件。一共需要导入四个.so文件。&另外,请确认使用是的真机调试。因为调用了摄像头,请使用真机调试。
人脸识别是当前的热点技术,使用范围广,用户体验良好,对硬件的依赖低,不需要昂贵的传感器芯片。一个高清的摄像头就可以完成。以前的成本是人脸识别的SDK比较贵,但现在虹软的SDK免费之后,集成的成本就大大降低了。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/alitaba/p/7456903.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!Android 虹软SDK人脸识别图文使用详细
虹软在人脸认识方面在国内可以说是先驱了,而且关于这个部分的功能大部分都是免费的人脸比对(1:1) 免费主要用来分析两张脸的相似度,多用于用户认证及身份验证。您会得到一个相似度的分数以及相应的阈值。人脸检索(1:N)针对一张输入的人脸,在已建立的人脸数据库中检索相似的人脸。小型网络:免费人脸集合100范围内达到最优适用于识别家庭成员的智能家居、机器人、人脸考勤等应用。中型网络:免费人脸集合1000范围内达到最优适用于身份识别、人脸门禁、人脸关卡等应用, 如医院、学校、社区、商铺、商场等各种场景。大型网络:联系我们适用应用场景更为复杂,需要更多的数据处理,诸如公共安全、大型组织或机构。若有此类需求,请联系虹软商务然后细化功能有五个:人脸检测、人脸跟踪 、人脸识别、性别与年龄识别说正题,如何使用这些功能呢首先在虹软开发者网站上注册http://www.arcsoft.com.cn/ai/arcface.html然后点击立刻免费下载开发,填写创建的应用信息,其实随便填都可以,只是平台要好好写然后提交完就会得到很多key,这些key都会在工程里用到,点击下载ArcFace v1.1,下载相应的SDK,然后点击Demo,进入论坛我们下载别人使用这些SDK做出的Demo我下载的demo地址是这个https://github.com/asdfqwrasdf/ArcFaceDemo我这里直接把他说如何使用这个工程代码的说明文字贴出来下载代码:git clone
或者直接下载压缩包前往申请appid和sdkkey。修改 ArcFaceDemo-master\src\main\java\com\arcsoft\sdk_demo\FaceDB.java 下面的对应的值:public static String appid = "xxxx";
public static String fd_key = "xxxx";
public static String ft_key = "xxxx";
public static String fr_key = "xxxx";下载sdk包之后,解压各个包里libs中的文件到 ArcFaceDemo-master\libs 下,同名so直接覆盖。Android Studio3.0 中直接打开或者导入Project,编译运行即可。这里说的SDK包,就是我们之前下载的压缩包,解压后有五个文件夹,分别对应着五个细化功能。我按照上面所说构建工程,安装app打开app,允许一些权限,然后点击注册人脸注册人脸不外乎是图片或者拍照,来张我的自拍,他这里的注册就用到了人脸检测,判断图片里是否有人脸,它一开始居然不承认我是人。。。。。。。输入注册名字然后点击手机自带返回键,再点击检测识别,测试人脸识别功能他这是一直在预览Camera,检测人脸是否存在,如果检测到了,在检测相似度,这个检测是1:1,也就是说人脸库只有一个,五个功能都是很细化的,到底我们如何使用,基本需要将这个五个功能组合使用结束
没有更多推荐了,
不良信息举报
举报内容:
Android 虹软SDK人脸识别图文使用详细
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!对人脸识别技术的详细剖析-电子发烧友网触屏版
2017年苹果新品手机iPhone X采用Face ID人脸识别解锁,此前小米Note3、Vivo V7+也推出具备人脸识别功能的智能手机。这标志着人脸识别技术加速迈入消费级领域。
手机设备以外的众多领域也同样在发生重大变革。武汉火车站宣布全面刷脸进站;百度宣布与首都国际机场签署战略合作协议打造刷脸登机的智慧机场;支付宝宣布商用刷脸支付;杭州大量宾馆免身份证,刷脸即可入住;京东苏宁开启刷脸支付;农业银行总行在自动取款机试点&刷脸取款&,目前已下发通知要求全国推广刷脸取款,将为全国24064家分支机构、30089台柜员机、10万个ATM机安装人脸识别系统;招商银行也已于近期在全国重点城市的ATM取款机系统上线了&刷脸取款&选项,用户可不带银行卡、身份证,不用输入银行账户,靠&刷脸&就能取款。由此可见,人脸识别技术加速渗透进入安防、银行、支付等众多领域,并且已经从政府级别应用、商业级别应用开始进入到消费级别的爆发时期,验证了人脸识别技术巨大的市场需求与广阔的应用前景。
据Yole数据显示,全球人脸识别市场规模预计将从2017年的40.5亿美元增长至2022年的77.6亿美元,这期间的复合年增长率可达13.9%。推动市场增长的主要因素包括:iPhone X带动更多智能手机集成3D人脸识别,公共场所日益增长的监控需求,以及政府部门等各个产业对人脸识别技术的应用增长。
人脸识别技术的优势
人脸识别的工程应用始于20世纪60年代,经过50多年的发展,人脸识别技术已经取得了重大突破,很多经典算法和人脸库相继出现。目前人脸识别系统最高的正确率可以达到99.5%,而人眼在同等条件下识别的正确率仅为97.52%,人脸识别的准确率已经做到了比肉眼更精准。
人脸识别大致分为两种应用模式四步流程。两种模式包括1:1比对和1: N识别,1:1是比对两个人脸的相似度,只需要确定是否授权人;1:N是识别对象是否在人脸数据库中。四部流程依次是人脸检测、活体检测、人脸特征提取和人脸匹配识别。
与其他生物特征识别技术相比,人脸识别技术在实用性方面具有独到的技术优势,主要体现在以下方面:
1、非接触:人脸图像的采集不同于指纹、掌纹需要接触指掌纹专用采集设备,指掌纹的采集除了对设备有一定的磨损外,也不卫生,容易引起被采集者的反感,而人脸图像采集的设备是摄像头,无须接触。
2、非侵扰:人脸照片的采集可使用摄像头自动拍照,无须工作人员干预,也无 须被采集者配合,只需以正常状态经过摄像头前即可。
3、友好:人脸是一个人出生之后暴露在外的生物特征,因此它的隐私性并不像指掌纹、虹膜那样强,因此人脸的采集并不像指掌纹采集那样难以让人接受。
4、直观:我们判断一个人是谁,通过看这个人的脸就是最直观的方式,不像指掌纹、虹膜等需要相关领域专家才可以判别。
5、快速:从摄像头监控区域进行人脸的采集是非常快速的,因为它的非干预性和非接触性,让人脸采集的时间大大缩短。
6、简便:人脸采集前端设备&&摄像头随处可见,它不是专用设备,因此简单易操作。
7、可扩展性好:它的采集端完全可以采用现有视频监控系统的摄像设备,后端应用的扩展性决定了人脸识别可以应用在出入控制、黑名单监控、人脸照片搜索等多领域。
人脸识别行业前景广阔
人脸识别市场热度高涨,其应用场景得到跨越式发展的根本原因在于技术革新。深度学习将人脸识别的精确度提高到肉眼级别,极大丰富了人脸识别的应用场景。互联网银行远程开户的刚需将人脸识别带进了金融级应用场景;巨头频繁布局人脸识别赋予其更大的应用场景想像空间,同时培养用户&刷脸&习惯以及对技术的认可度,有利于产业进一步发展。多方的推动使得人脸识别应用得到爆发式发展。
人脸识别发展的推动因素
从原因来看,&技术革新&+&身份识别线上化&是人脸识别大规模推广的基础,&完善的基础设施&和&非接触式的主动数据获取&是人脸识别的先天优势。
人脸识别行业发展趋势
第一,基于大数据的大规模人脸搜索是人脸识别技术未来发展的重要方向。例如,在公安领域已经跨入大数据时代,一些传统技术瓶颈显现,因此,利用人脸识别技术将这些海量照片数据利用起来,提升整个公安信息化的管理水平,是未来人脸识别技术发展的重要方向。
第二,深度学习将人脸识别的准确度提升至肉眼级别,大大拓展了2D人脸识别的应用场景,并借助互联网金融爆发的东风,步入金融级应用并作为基础设施迅速普及。此外,随着互联网金融等业务身份认证的需求爆发,第三方认证服务平台将会出现,基于提供服务的平台型盈利模式发展空间巨大。
第三,随着三维测量技术的发展,基于3D的人脸识别算法能够弥补2D投影造成有效识别信息丢失的问题,对于人脸旋转、遮挡、极度相似的传统难点具有很好的解决方式,也逐渐成为人脸识别技术的另一重要发展路线,随着3D人脸库的完善以及设备成本的降低,3D技术将有很大发展空间。
第四,随着我国城市化进程的加速,社会稳定、城市安全等问题逐渐显现,而人脸识别技术是实现安全、安心城市的关键技术。因此,随着智慧城市的大规模建设,人脸识别技术的应用将是未来新趋势。
第五,安防行业的迅速发展,为人脸识别应用提供了可以发挥的舞台;另一方面,随着人脸识别技术的进一步发展,为安防行业开拓了新的市场。分析认为,智能视频分析将是大安防市场未来的方向之一,而人脸识别是其中非常重要的技术和应用。
第六,人脸识别技术由于其便利性、安全性,可在智能家居中用作门禁系统以及鉴权系统,因此智能家居与人脸识别技术的融合是未来发展的重点方向。智能家居中的人脸识别系统是结合嵌入式操作系统和嵌入式硬件平台建立的,加强了人脸识别技术与智能家居应用的结合度,具有概念新、实用性强等特点。
文章来源栏目
加载更多评论
后参与评论

我要回帖

更多关于 虹软 人脸识别demo 的文章

 

随机推荐