【CO团队】日常杂记-猴子优化法

重庆工商大学CO团队-CHNhawk(小熊)转载请注明出处

今天在做项目的系统优化时,突然顺手就写了一行代码可以优化到提升50%以上的性能,Emmm。

一行代码提升50%以上性能哦,了解一下!

先说背景,最近在参加比赛,做一个人脸识别的门禁系统项目。当然作为本科生,识别引擎使用的是第三方的。我们主要工作是做一套完整的客户端-门禁端-管理端应用解决方案。项目设计时,考虑到如果人脸识别失败,还可以通过扫描二维码的方式进入。二维码使用的当然是Zxing包。门禁端使用的是Android系统,用的rk3399开发板。

门禁端实现功能后发现,如果需要同时扫描二维码和人脸的话,性能比较吃紧,表现出来的是人脸的追踪框会有卡顿(PS.我这边使用了两层SurfaceView,一层直接预览相机,另外一层画各种HUD框框,相机预览层是不会卡的)。识别其实还好,1s内识别还能接受。经过排查,发现是二维码扫描时做的一系列图像处理有点费时,先转YUV格式再转jpeg,再转二值图进行识别。

yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 30, baos);            // JPG图片的质量[0-100],100最高

其中这行代码中第二个参数是jpeg质量,做PS经常接触到。我一开始是对这里进行优化,想到降低图片质量是否会提高性能。经过测试,发现如果调到10以下,对性能的影响会较小,但是识别率惨不忍睹.......

正当我纠结之际,突然想到这个二维码扫描是对每一帧的图像进行的处理,但是实际应用中,完全用不着每一帧都去扫描一下。因为在你拿着二维码到摄像头前面去的时候,有很多帧基本上都是相同的,因此我在识别二维码的地方加了这么一句。

if(!detected && Math.random() > 0.5f) {
    // 进行二维码识别操作

PS.detected是指是否已识别,识别到了就向服务器发送数据,这个等待过程中就没必要做扫描操作了。

只是使用一个随机数进行判断,也就是说如果每秒帧数为30,仅对其中15帧进行较为耗时的扫描处理 ,性能就这么提升了,并且对二维码的识别也没有什么太大的影响。当然后面我调整了参数,取得了最优的值。感觉基本上所有的实时性图像识别都可以这样优化吧,如果硬件平台性能确实吃紧的话。

个人觉得这种方法可能并不是特别优雅,毕竟我只是每天搬砖的穷大学生,但是确实简单粗暴地满足了需求。

至于为什么叫猴子优化法,当然是借鉴大名鼎鼎的猴子排序了23333

以上,记录一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值