微信扫一扫背后的秘密:基于运动估计的智能传图算法(转)

2023-11-23 13:30

本文主要是介绍微信扫一扫背后的秘密:基于运动估计的智能传图算法(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:valiant、jamy

一、项目背景

图1.1 常见的图像识别应用


  本项目提出的图像算法主要解决如下问题:在移动设备实时获取图像的过程中,让算法自动决定何时进行图片发送请求、何时中断发送请求,并将此策略用在实时的图像检索应用中。
目前的移动端图像检索应用,在选择发送图像时机时,多采用如下两种策略:


  1.将图像不断地发送至后台,根据服务器端反馈结果,来决定停止发送;


  2.加入用户交互,如拍照的方式,触发传送请求,如Google Goggles、百度识图、SOSO慧眼等当前主流视觉搜索引擎所做的那样。


  采用第一种方案,可以保证用户较为方便地使用,由于传图密度较大,可以保证图片的质量比较好,但是缺点也是显而易见的,该策略会造成较大的网络传输量以及服务器端计算的压力;采用第二种方案,缺点是需要加入用户的交互,提高了操作的难度,且要考虑所在应用(如微信扫一扫)已有交互习惯的搭配性,因此其关键点是如何在保证图片质量的情况下大幅减小网络传输量和服务器运算压力。


二、技术介绍


(一)拍照识别与实时识别


  图像识别是需要大数据量和大计算量的,所以一定是要放在云端。图像识别的方式有拍照识别,也有实时识别,但是我们看到市面上的所有产品几乎都是用的拍照识别的方式。其实早在做SOSO慧眼的时候,模式识别团队的同学就在思考一个问题,为什么一定要拍?我想拍照识别的最大好处就是用户意图明确,从而流量大幅减少。但是拍照识别的一个坏处就是用户一定要主动触发,而用户主动触发的情况下,只会进行一次识别尝试,一旦没有识别结果,用户的感受就会很差。如前面所述,实时识别才是更好的用户体验,但是不停传送图片的方法会造成大量的流量浪费,也会造成服务器压力过大。也正是因为此我们在上文中所提到的这些同类产品都没有实时识别的功能,而唯一有实时识别的 Goggles,经过测试,其采用的方案基本上也是定时上传的,只需用一会儿流量消耗就会很大。


  那么我们的想法就是如何判断用户的意图?也就是只有用户确实在对准一个物体的时候会自动地上传一张图片进行识别?而在用户运动的过程中,或者图像模糊的情况下,能够不进行传输。通过这样的方式,实现了智能判断上传识别图像的方法,传输的数据量大幅缩减。


(二)基于运动估计的智能传图算法


1) 运动估计


  运动估计的英文名称是(Motion Estimation). 是视频编码和视频处理(例如去交织)中广泛使用的一种技术。我们这里将本来用于视频编码的运动估计思想移植到手机摄像头来,视频与手机摄像头的图像序列均有共同的连续图像相关性,因此运动估计算法是可以通用的。但是同时这二者又有很多不同点,比如手机摄像头获取图像分辨率往往较低,同时在用户实际使用的时候手机不会有太大幅度的运动。更主要的是,视频编码中所用的全局运动估计算法是非常慢的,即使在PC上也往往不能达到实时,因此我们进行这些特性进行了修改,来使得算法在各种低端手机上也能达到非常高效的性能。

图2.1 块匹配算法示意


  我们采用的是最简单的基于块匹配的运动估计算法,示意图如图2.1所示。根据传入视频图像大小,对于视频帧中间的特定区域在其周围的一个有限邻域内采用由里到外的方式进行搜索。找到最相似的块后,根据二者位置获取两帧之间的运动矢量。搜索过程采用逼近算法,首先进行大步长的移动,找到相似度相对较小的区域,然后在区域内减小步长,逐步逼近得到最终的搜索结果。为了保证算法的高速,对于超过一定阈值的过大的视频帧图像,我们首先进行了降采样的处理。获取的运动矢量包含了方向和幅度两个信息。在手机这种场景中,根据实际的需求,我们所需要判断的运动主要有以下4种状态:运动、静止、运动到静止、静止到运动。其中前两个状态是根据实际的运动幅度判断出来的,后两个状态是根据前面的状态生成的。而运动到静止就是通常使我们认为可以上传图片的时机,而静止过程中的图片我们可以认为其图像区域没有明显的变化(或只有小幅移动),因此只需要上传其中一张就可以了。当然,虽然有了运动矢量,但具体到实际问题,更重要的是考虑防止抖动的影响以及用户慢速运动等很多情况,不能简单用阈值区分。运动估计算法整体流程图如图2.2所示。

 

图2.2 运动估计算法流程图


2) 图像有效性判别


有了上面的运动估计,我们已经可以较好地预测用户的意图,从而在运动到静止状态的时候启动传图到后台的识别过程。但是用户的手机存在对焦过程,并不是每一帧都是清晰的,即使是清晰的图像也不一定适合进行图像或者文字识别。因此有必要对于需要上传的图像进行有效性判断。
为了提高识别率,以及根据图像识别的特征,我们采用基于FAST特征点的清晰度判别算法。针对实际使用的图片,修改训练了一套自己的FAST角点检测引擎,能够有较好的速度和角点检测能力。我们对于有效图片的定义是,第一清晰,第二具有较为丰富的纹理。这两点正好符合FAST的特征,在图片不清晰的时候,往往FAST点较少,在比如较多空白或者单一颜色的图片中,FAST点同样很少,因此只需要对于需要上传图片的FAST点进行判断,即可以获得较为有效的上传图片。
在我们的实际应用中,仅需要在检测到运动到静止状态时,进行FAST点判断的过程,如果为清晰则直接上传当前帧,如果不清晰而后面仍然为静止状态,则在后面的帧中继续进行FAST角点检测,直到获得符合上传条件的帧图像。


经过优化,我们的引擎在iOS主流机型上均具有很好的性能,在每秒处理10帧的情况下,通常1-2帧处理即可进行运动和有效性估计。占用的CPU资源更是几乎忽略不计:

 

三、微信如何“扫”

用户只需要打开微信“扫一扫”界面,进入“封面”或者“翻译”模式,即可进入识别状态,如下图所示:

 

图3.1 微信扫封面界面


其中客户端的处理流程如下:

 

图3.2 客户端-后台处理流程

 

  “扫一扫”从摄像头获取实时的图像,预判逻辑会以一定的时间间隔从实时视频流当中截取图像进行处理,在规定的状态发生后,会自动触发图片发送逻辑,将图片发送至后台进行检索。


四、后续改进


  虽然运动估计的算法已经能够比较简单而且快速地解决了智能上传图像识别的问题,但是后续仍然可以有很多改进的空间,比如可以区分图像和文字特征的不同,采用不同的清晰度判别方法,比如可以加入跟踪算法从而保持在已经识别到的物体尚在视频区域内时,不论其旋转或者拉远拉近,均不会因为图像发生变化而再次启动识别,等等。


  这种探索只是一个简单而初步的尝试,但随着研究的深入,相信实时识别的技术一定会成为图像识别的主流。


附记:


感谢关注微信模式识别团队的最新技术:


微信5.0:


http://weixin.qq.com/

SOSO慧眼:


http://huiyan.qq.com/

转载于:https://www.cnblogs.com/yingkong1987/p/3268980.html

这篇关于微信扫一扫背后的秘密:基于运动估计的智能传图算法(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418265

相关文章

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设