屏下指纹介绍

一、光学指纹问题现状

光学指纹当前随着成本的下降,各大厂商都在低中高端旗舰用上了光学指纹。有别于传统的电容指纹,光学指纹在解锁性能上目前都进行了优化,性能接近电容指纹。

 

二、光学指纹电容指纹原理

两者原理都是对指纹的纹路脊谷进行信号采集,通过记录不同信号,实现指纹的录入比对。

图 1电容指纹示意图

电容式指纹模块是利用指纹与导电的皮下电解液形成电场,手指纹路的高低起伏会导致二者之间的压差出现不同的变化,因此可实现准确的指纹数据扫描。这种指纹识别方式比较通用,对环境要求比较弱,只要有指纹就能录入识别,更重要的是这种指纹识别的元器件对空间占用比较小。

图 2光学指纹原理

 

光学指纹识别则是通过光线反射,利用一个短焦镜头,在可透光的OLED屏幕下方获取到指纹的图像,从而记录和识别指纹信息。从原理上来看,光学指纹无论是指纹模组的设计,屏结构、指纹的软件交互设计、整机功耗控制、整机结构上相较于电容指纹,条件都变的相对苛刻,对项目开发的挑战也是大大增加。

 

三、屏下指纹指纹录入识别流程

  • 录入

用户手指按压->LCD高亮->指纹采图->指纹录入->存储模板->上报录入成功

图 3 指纹录入流程简化图

  • 解锁

用户指纹按压->LCD高亮->指纹采图->指纹识别->更新模板->上报解锁成功

图 4指纹识别流程简图

当前这种方式是各大厂商一套通用的逻辑,细节部分各大厂商均有不同程度的差异,但是大都是围绕着这几个点进行的性能优化。

 

四、指纹问题常见情况

由于光学指纹的屏下的特性,导致了指纹方面对一些场景下的指纹识别体验非常不好,具体常见的有以下几类(以下指纹样张来源于互联网,不涉及任何用户安全及三方保密协议,均为原图加噪声图拟合而成)

 

  • 按压不全:

图 5按压不全

 

  • LCD高亮失败:

完全不高亮

图 6完全不高亮

高亮不完全

图 7高亮不完全

 

  • 脱靶:

录入

图 8录入图

解锁

图 9解锁脱靶图

 

  • 贴软膜指纹:

图 10软膜图

 

  • 贴硬膜指纹:

图 11硬膜图

 

  • 脱皮指纹:

图 12脱皮指纹

 

  • 衣物误触:

图 13衣物误触

 

  • 异物指纹:

图 14异物指纹

 

  • 沾水指纹:

图 15沾水指纹

 

  • 掌纹误触:

图 16掌纹误触

 

  • 干手指脏污

图 17手指脏污

 

  • 强光漏光

图 18强光

 

  如果根据用户群体来分,新用户像从电容转到屏下指纹的绝大多数会出现按压面积不全的情况,因为电容指纹轻触一下就解锁开了,但是光学指纹需要等待LCD的高亮和器件曝光,如果轻触,指纹采图就是图5的这种图像,所以这类型用户就会出现这种解锁慢或者解锁不灵敏的反馈。针对这种情况,当前解决的方案基本都是通过用户界面引导来让用户适应。

  一些光学指纹的老用户绝大多数的不灵敏场景主要有以下几种,洗手、起床、强光,手指脱皮,干手指(主要是年龄稍微大些的用户,出现的一些指纹糙化的纹理)、贴膜,对应于我们上面的贴图大家可以看到,这类型的指纹纹路都出现了不同程度的纹理破坏或者糊化,导致有些指纹的特征和录入相差过大,最终识别失败,特别是贴的硬膜,对指纹纹路破坏极其强大,所以建议大家都用出产手机自带的膜,这样指纹一定程度能保证比较好的解锁体验。

  另外还有一类用户,应该大多数都碰到过,某个指纹解锁很灵敏,但是某个指纹解锁不灵敏,主要原因除了第二点里面叙述到的之外,最大的一个原因是脱靶,脱靶的意思,就是识别的指纹和录入的指纹相差过大。主要有两种情况,第一种,录入的时候手指状态很好(很差),但是因为季节的变化手指和之前的状态差别很大,比方说脱皮,裂纹。第二种,录入的时候录入的面积很局限,只有指纹的一小部分,但是解锁的时候,解锁的指纹区域和录入的区域不匹配,导致最后解锁不开,对应上面的贴图,主要就是脱靶部分,从这个脱靶的图看,录入的图和解锁的图纹路方向都不一致。通常解决这种问题,有两种方式,第一种是删除重录,这种对用户不太友好。另外一种是,要多使用录入的指纹,因为我们有模板学习的功能,在识别成功后,如果模板达到一定的条件,我们会把当前的指纹模板学习进去,以此来扩大录入的模板。

 

五、一种可用于指纹预处理的滤波算法

  对于上述的差手指,目前Gabor滤波,能够一定程度上进行图像的特征增强对指纹图像进行优化。

  • Gabor介绍

 Gabor是一个用于边缘提取的线性滤波器,其频率和方向表达与人类视觉系统类似,能够提供良好的方向选择和尺度选择特性,比较适合纹理分析。

 

  • Gabor滤波公式:

其中:

  • Gabor参数介绍

  λ:正弦函数波长

  θ:Gabor核函数的方向

  ψ:相位偏移

  σ:高斯函数的标准差

  γ:空间的宽高比

  这几个参数后面我们在代码中会先固定写好,看下实际的效果。

 

  • Gabor滤波流程

  开发语言:Python

  开源库  :Opencv, Matplotlib, Numpy

  • 示例代码:

  • 实验结果

从图像看,针对局部沾水和脏污导致的纹理不清晰,经过Gabor预处理后,可以一定程度上进行纹理增强。

 

六、后续指纹发展方向

目前来看,几种指纹识别各有优势,经典的电容式指纹解锁速度快、识别率高、成本低、安全性较高,但比较影响全面屏手机的外观。屏幕光学指纹的解锁速度、精度都还有所欠缺,不过更具有科技感,也有发展性。指纹组这边,会秉承用户至上的理念,吸纳各种不同方案的指纹种类来增加指纹的整体可选性,满足市场上来自不同人群的需求。在指纹的算法上,也会持续扎根,加大本模块的核心竞争力。

 

参考:

[1] https://blog.csdn.net/Ibelievesunshine/article/details/105101268

[2] http://biolab.csr.unibo.it/ResearchPages/SFinGe_Samples.asp

长按关注

内核工匠微信

Linux 内核黑科技 | 技术文章 | 精选教程


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 SAP 访问关键字的说明

SAP 为了保护标准程序和字典对象,对于标准代码的修改都设定了访问关键字控制,用户需要修改时必须输入正确的访问关键字才可以编辑标准程序和字典对象,这个关键字可以到 SAP 网站上申请。 地址为 http://service.sap.com,用你公司的…

ABAP Netweaver和Hybris里获得内存使用统计数据

ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟,Hybris Administration console会发起一个到Java后台的AJAX查询请求: 这个5秒的时间间隔定义在project.properties配置文件里, 然后使用JavaScript的setInterval建立定期轮询: Java后…

Linux中常用C/C++一些头文件的作用

<assert.h>&#xff1a;ANSI C。提供断言&#xff0c;assert(表达式) <glib.h>&#xff1a;GCC。GTK&#xff0c;GNOME的基础库&#xff0c;提供很多有用的函数&#xff0c;如有数据结构操作函数。使用glib只需要包含<glib.h> <dirent.h>&#xff1a;G…

CRecordset类

CRecordset类 https://blog.csdn.net/elcoteq983/article/details/7000745 CRecordset::Open virtual BOOL Open( UINT nOpenType AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL NULL, DWORD dwOptions none ); nOpenType 接受默认值AFX_DB_USE_DEFAULT_TYPE&#xff0…

STM32做平衡小车,代码,PCB都现成的,妈妈再也不用担心我的毕业设计了

▌一、硬件介绍主控芯片用的是100脚的STM32F103VET6&#xff0c;陀螺仪用的是MPU6050&#xff0c;电机驱动用的是TB6612&#xff0c;蓝牙是汇承的HC05邮票孔封装的&#xff0c;WIFI用的是济南有人科技的USR-WIFI232-S&#xff0c;小车底盘用的是平衡小车之家的某一款带编码器的…

Apache 配置:是否显示文件列表

Apache 配置&#xff1a;是否显示文件列表 进入虚拟主机配置文件 显示文件列表的话 options Indexes FollowSymLinks 不显示文件列表的话 options FollowSymLinks 文章来源&#xff1a;刘俊涛的博客 地址&#xff1a;http://www.cnblogs.com/lovebing 欢迎关注&#xff0c;有问…

升级到virtualbox-2.1.4

今天把virtualbox从1.6.6升级到2.1.4.启动系统时出现VERR_SUPDRV_COMPONENT_NOT_FOUND网上查了一下&#xff0c;桥接需要vboxnetfltmodprobe vboxnetflt后就可以了然后把vboxnetflt加入到/etc/config.d/modules里使每次系统启动都载入vboxnetflt遗憾的是&#xff0c;这次升级并…

C++ —— C++引用

C引用 一、普通引用 【变量名】 变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间 问题1&#xff1a;对一段连续的内存空间只能取一个别名吗&#xff1f;【不是】 1、引用是C的概念 // …

微信越滑越卡

这篇文章是我的朋友小二哥写的&#xff0c;他解决了一个问题并提交了一个补丁给google合入&#xff0c;当然了&#xff0c;这也是他第一次提交补丁被google采纳。我觉得这才是做技术的样子&#xff0c;二哥也很喜欢篮球&#xff0c;&#xff0c;为二哥吹一波。哈哈。关于这次补…

MFC中五个初始类的作用

MFC中五个初始类的作用 https://blog.csdn.net/thisispan/article/details/7393401

扁平化可伸展导航

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>扁平化可伸展导航[原创]</title><link rel"stylesheet" type"text/css" href"nav.css"><link rel"stylesheet" t…

重新整理了下mount/umount,免得老是不来新机忘记了

挂接就是将分离的文件系统附加到文件系统分成结构中。文件系统要附加到某个挂接点&#xff0c;也就是目录。 挂接和卸载文件系统发生在系统启动和关闭时。 系统启动时&#xff0c;将读取/etc/vfstab文件。这个文件记录系统要挂接的文件系统。因此/etc/vfstab文件中的文件系统…

C++ —— C++内联函数

C内联函数 一、内联函数 1、C中的const常量可以替代宏常数定义&#xff0c;如&#xff1a; const int A 3; #define A 3 C中是否有解决方案替代宏代码片段呢&#xff1f;&#xff08;替代宏代码片段就可以避免宏的副作用&#xff01;&#xff09; 2、C中推荐使用内联函数…

大佬为何可以把单片机描述得如此形象生动?

某年某日某产房&#xff0c;你诞生了&#xff08;power up , 上电运行&#xff09;&#xff0c;结果你不哭&#xff0c;医生把你提起来&#xff0c;屁股上狠狠一巴掌&#xff0c;你哇哇大哭&#xff08;reset, 复位成功&#xff09;&#xff0c;护士给你检查&#xff0c;看有没…

CWinThread

https://baike.baidu.com/item/CWinThread/5902501 https://blog.51cto.com/5412097/1643861 https://blog.csdn.net/thanklife/article/details/78677688 CWinThread&#xff1a;&#xff1a;SuspendThread https://blog.csdn.net/h315444352/article/details/22091361 工作者…

html总结:文本框填满表格

<style> input { width: 100%; }</style>转载于:https://www.cnblogs.com/iCheny/p/8798808.html

双硬盘奇怪问题...

今天下午打开文件夹....提示错误....指定的文件夹无法打开....汗...文件夹大小变成0KB..而有的文件夹又是正常的...可以打开,可以访问....一切正常...但是就是那么几个文件夹.里面放的东西比较的多....打不开...由于本人是双硬盘.上次出现了RAW 的错误...让我有一种一朝被蛇咬,…

51单片机温度控制系统报警器,不会做课程设计的就拿走

▌功能说明&#xff08;1&#xff09;单片机读取温度传感器当前的温度值并在LCD液晶显示屏上的第一行显示当前的温度值&#xff0c;如Temp&#xff1a;27.5℃。&#xff08;2&#xff09;单片机读取按键状态并通过人为手动按键部分来设置最低温度到最高温度的温度范围后&#x…

C++ —— C++数据类型

C—— C数据类型 1、数据类型分类 &#xff08;1&#xff09;基本数据类型 字符型&#xff08;char&#xff09;—— 1字节 整型&#xff08;int&#xff09; —— 4字节 浮点型&#xff08;实型&#xff09;—— 单精度float4字节&#xff1b;双精度&#xff08;double&a…

参加 CSDN 2009 英雄大会有感(一)

参加 CSDN 2009 英雄大会有感&#xff08;一&#xff09; 我作为 CSDN Blog 专家参加了本次盛会。今天可以算是本次大会的第一天。下午参观了 CSDN 的研发中心&#xff0c;感觉蛮不错&#xff0c;从个人工作环境布局到各会议室的空间布局上都很紧凑&#xff0c;合理、最大化地…