智能门锁的响应速度直接影响用户体验,指纹识别慢、开锁延迟高都会让用户抓狂。我负责的智能门锁项目曾经响应时间超过2秒,用户投诉不断。经过一系列调优,我们把平均响应时间降到了400毫秒以内,降了80%。本文分享整个调优过程,包括问题定位、优化手段和最终效果。
一、问题背景
我们的智能门锁产品支持指纹、密码、NFC、蓝牙、APP远程开锁等多种开锁方式。上市之后,用户反馈最多的问题就是开锁慢:指纹按上去要等一两秒才开门,有时候甚至要等三四秒。尤其是冬天或者手指比较干的时候,识别率低,反复识别更慢。
我们的目标是把平均开锁响应时间降到500毫秒以内,最好能做到300毫秒。当时的平均响应时间是2秒左右,最差能到4秒,离目标差得很远。
响应时间的定义是:从用户触发开锁(按指纹、输密码、刷卡)到门锁电机启动、锁舌收回的时间。这个时间包含了传感器采集、特征提取、比对验证、权限检查、电机驱动等多个环节。
二、第一步:拆解响应时间,定位瓶颈
优化的第一步是搞清楚时间都花在哪里了。我们在门锁的固件里加了详细的日志打点,记录每个环节的耗时,然后收集了1000次开锁的数据分析。
拆解后的时间分布大概是这样的:
- 传感器采集和预处理:约300毫秒
- 指纹特征提取:约600毫秒
- 指纹比对:约500毫秒(平均比对15枚指纹)
- 权限和状态检查:约100毫秒
- 电机驱动和开锁:约200毫秒
- 其他(通信、日志等):约300毫秒
可以看到,最耗时的三个环节是指纹特征提取(600ms)、指纹比对(500ms)和传感器采集(300ms),这三个加起来就1.4秒了,占了总时间的70%。其他环节虽然单个耗时不大,但加起来也有600毫秒。
定位了瓶颈之后,我们就针对性地逐个优化。
三、优化1:指纹特征提取加速
指纹特征提取是最耗时的环节之一,我们用的是第三方的指纹算法库,源码不开放,只能从使用方式和硬件层面优化。
1. 优化图像预处理流程
原来的预处理流程是:采集图像→灰度化→去噪→增强→二值化→细化→特征提取。每一步都是对整幅图像做处理,计算量很大。
我们做了几个优化:
- 把去噪和增强合并成一个步骤,减少一次图像遍历
- 二值化用局部自适应阈值替代全局阈值,虽然计算量略增,但后续特征提取的准确率提升,减少了反复识别的次数
- 细化算法用了更快的并行细化算法,比原来的快了约30%
- 对图像做ROI(感兴趣区域)裁剪,只处理指纹区域而不是整幅图像,减少了约40%的计算量
这些优化加起来,特征提取时间从600毫秒降到了约350毫秒。
2. 硬件加速
我们的主控芯片有一个DSP核,原来没有利用起来。我们把部分计算密集的预处理操作(比如图像增强、滤波)移植到了DSP核上,和主核并行处理。虽然移植花了不少时间,但效果显著,特征提取又快了约100毫秒。
最终特征提取时间从600毫秒降到了约250毫秒,提升了约58%。
四、优化2:指纹比对加速
指纹比对是另一个耗时大户。原来的逻辑是用户按了指纹之后,逐个和存储的指纹模板比对,平均要比对15枚(最多30枚),每枚比对约33毫秒,总共500毫秒。
1. 指纹分组和快速筛选
我们给每枚指纹加了一个分类标签(根据指纹的中心点位置和方向),比对时先根据当前指纹的分类筛选出同组的指纹,只比对同组的,平均比对数量从15枚降到了5枚,比对时间直接降到了原来的三分之一。
分类的准确率很高,因为同一只手指的指纹分类基本一致,不同手指的分类有差异。偶尔分类错误导致漏比对的情况,我们加了一个兜底逻辑:如果同组比对都失败,再比对其他组的,这样既保证了速度又保证了识别率。
2. 比对算法优化
和算法供应商沟通后,他们提供了一个快速比对模式:先做粗略比对,相似度低于阈值的直接跳过,只有粗略比对通过的才做精细比对。粗略比对很快(约5毫秒),大部分指纹在粗略比对阶段就被淘汰了,只有少数几枚需要精细比对。
这个优化让平均比对时间又降了约40%。
3. 常用指纹优先
我们统计了用户的使用习惯,发现80%的开锁是用2-3枚常用手指(比如右手食指和拇指)。于是我们把指纹模板按使用频率排序,常用的排在前面,比对时先比对常用的,大部分情况下前2-3枚就能匹配成功,不需要比对后面的。
这个优化很简单但效果明显,平均比对次数进一步减少。
经过这三个优化,指纹比对时间从500毫秒降到了约100毫秒,提升了80%。
五、优化3:传感器采集优化
传感器采集时间原来约300毫秒,主要是因为传感器的帧率低,而且我们的采集逻辑是等手指完全放好之后才开始采集,需要多次采样取最优。
1. 提高传感器帧率
和传感器供应商沟通后,我们把传感器的采集帧率从原来的15fps提高到了30fps,采集时间直接减半。提高帧率需要更高的SPI时钟频率,我们确认了硬件支持后做了调整。
2. 预采集和缓存
我们加了一个低功耗的预采集模式:门锁处于待机状态时,传感器以低帧率持续扫描,检测到有手指接近时就开始预采集,等手指完全放好时已经有几帧图像了,直接取最优的一帧处理,不需要再等采集。
这个优化让用户感知到的采集时间几乎为零,因为手指放上去的时候图像已经采集好了。当然,预采集会增加一点待机功耗,但在可接受范围内。
3. 图像质量快速评估
原来的逻辑是采集固定帧数(比如5帧)然后选最优的,我们改成了实时评估图像质量,一旦采集到一帧质量达标的图像就停止采集,直接处理。大部分情况下第一帧或第二帧就达标了,不需要采集满5帧。
经过这些优化,传感器采集时间从300毫秒降到了约80毫秒(用户感知时间更短,因为有预采集)。
六、优化4:并行处理和流水线
前面的优化都是针对单个环节的,我们还做了整体架构的优化:把串行处理改成并行处理和流水线。
原来的流程是完全串行的:采集→预处理→特征提取→比对→权限检查→电机驱动,一步完成才做下一步。
我们改成了流水线模式:
- 传感器采集到第一帧图像后,预处理和特征提取就开始了,不需要等所有帧采集完
- 特征提取的同时,可以做一些权限检查的准备工作(比如读取用户权限表)
- 比对通过后,电机驱动和日志记录并行执行
流水线改造后,各个环节有重叠,总时间从各环节之和变成了最长环节的时间加上少量重叠开销。
我们还把一些不影响开锁的操作(比如写日志、上报云端、更新使用频率)放到了开锁之后异步执行,不占用开锁的响应时间。原来这些操作是同步的,加起来有约200毫秒,现在完全不影响响应时间了。
七、优化5:其他细节优化
除了上面的大优化,我们还做了很多细节优化:
1. 电机驱动优化
原来的电机驱动是先全速启动再减速,我们改成了PWM调速,启动更快更平稳,开锁时间从200毫秒降到了120毫秒。
2. 权限检查优化
原来的权限检查每次都从Flash读取权限表,我们把常用的权限数据缓存到内存中,检查时间从100毫秒降到了20毫秒。
3. 蓝牙和APP开锁优化
蓝牙开锁的瓶颈在通信上,我们优化了蓝牙通信协议,减少了握手和数据交换的次数,蓝牙开锁响应时间从1.5秒降到了600毫秒。APP远程开锁依赖网络,我们做了本地缓存和快速响应,网络好的情况下能做到800毫秒以内。
4. 减少Flash写入
原来每次开锁都要写Flash记录日志,Flash写入很慢(约50毫秒),我们改成了先写内存缓存,攒几条再批量写Flash,或者在空闲时写,不占用开锁时间。
八、优化效果
经过以上所有优化,我们的智能门锁响应时间有了显著提升:
- 指纹开锁平均响应时间:从2000毫秒降到了350毫秒,降了82.5%
- 密码开锁:从800毫秒降到了250毫秒
- 刷卡开锁:从600毫秒降到了200毫秒
- 蓝牙开锁:从1500毫秒降到了600毫秒
- 指纹识别率:从95%提升到了98%(因为图像质量更好了)
用户的投诉量大幅下降,好评率提升了很多。350毫秒的响应时间是什么概念呢?就是用户按上指纹,几乎是立刻就开门了,感觉不到明显的延迟,体验非常流畅。
九、调优过程中的经验和教训
回顾这次调优,有几点经验和教训。
1. 先测量再优化
优化之前一定要先拆解时间、定位瓶颈,不要凭感觉优化。我们最开始以为是比对慢,结果测量后发现特征提取也很慢,传感器采集也有优化空间。如果只优化比对,效果会大打折扣。
2. 不要忽视小优化
大的优化(比如算法加速、并行处理)效果明显,但小优化(比如缓存、减少Flash写入、异步处理)加起来也有很大贡献。我们的优化中,小优化贡献了约30%的提升。
3. 硬件和软件要协同优化
这次调优不只是软件优化,还包括了硬件层面的调整(提高传感器帧率、利用DSP核)。嵌入式系统的性能优化,硬件和软件协同往往能取得最好的效果。
4. 注意功耗和性能的平衡
预采集和高帧率会增加功耗,我们做了多次测试,在性能和功耗之间找到了平衡点。智能门锁是电池供电的,功耗是硬约束,不能为了性能把功耗搞上去,否则电池续航会出问题。
5. 充分利用供应商资源
指纹算法和传感器都是第三方的,我们主动和供应商沟通,拿到了快速比对模式和高帧率模式的支持。很多时候供应商有未公开的优化选项,主动问一问可能会有惊喜。
6. 测试要充分
优化过程中我们做了大量测试,包括不同年龄、不同性别、不同干湿程度的手指测试,不同温度环境下的测试,确保优化没有降低识别率和稳定性。性能优化不能以牺牲稳定性和识别率为代价。
十、写在最后
智能门锁的性能调优是一个系统工程,涉及传感器、算法、嵌入式软件、硬件等多个层面。我们通过拆解定位瓶颈、针对性优化、并行流水线改造、细节打磨,把响应时间降了80%,用户体验得到了质的提升。
嵌入式系统的性能优化和服务器端不太一样,资源受限、实时性要求高、硬件软件紧密耦合,需要更精细的分析和更全面的考虑。但核心思路是一样的:先测量定位瓶颈,再针对性优化,最后验证效果。
希望我们的调优经验能给做物联网和嵌入式开发的朋友一些参考。如果你也在做类似的性能优化,欢迎在评论区交流讨论。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录