微信扫一扫背后的秘密:基于运动估计的智能传图算法
一、項(xiàng)目背景
圖1.1 常見(jiàn)的圖像識(shí)別應(yīng)用
本項(xiàng)目提出的圖像算法主要解決如下問(wèn)題:在移動(dòng)設(shè)備實(shí)時(shí)獲取圖像的過(guò)程中,讓算法自動(dòng)決定何時(shí)進(jìn)行圖片發(fā)送請(qǐng)求、何時(shí)中斷發(fā)送請(qǐng)求,并將此策略用在實(shí)時(shí)的圖像檢索應(yīng)用中。
目前的移動(dòng)端圖像檢索應(yīng)用,在選擇發(fā)送圖像時(shí)機(jī)時(shí),多采用如下兩種策略:
1.將圖像不斷地發(fā)送至后臺(tái),根據(jù)服務(wù)器端反饋結(jié)果,來(lái)決定停止發(fā)送;
2.加入用戶(hù)交互,如拍照的方式,觸發(fā)傳送請(qǐng)求,如Google Goggles、百度識(shí)圖、SOSO慧眼等當(dāng)前主流視覺(jué)搜索引擎所做的那樣。
采用第一種方案,可以保證用戶(hù)較為方便地使用,由于傳圖密度較大,可以保證圖片的質(zhì)量比較好,但是缺點(diǎn)也是顯而易見(jiàn)的,該策略會(huì)造成較大的網(wǎng)絡(luò)傳輸量以及服務(wù)器端計(jì)算的壓力;采用第二種方案,缺點(diǎn)是需要加入用戶(hù)的交互,提高了操作的難度,且要考慮所在應(yīng)用(如微信掃一掃)已有交互習(xí)慣的搭配性,因此其關(guān)鍵點(diǎn)是如何在保證圖片質(zhì)量的情況下大幅減小網(wǎng)絡(luò)傳輸量和服務(wù)器運(yùn)算壓力。
二、技術(shù)介紹
(一)拍照識(shí)別與實(shí)時(shí)識(shí)別
圖像識(shí)別是需要大數(shù)據(jù)量和大計(jì)算量的,所以一定是要放在云端。圖像識(shí)別的方式有拍照識(shí)別,也有實(shí)時(shí)識(shí)別,但是我們看到市面上的所有產(chǎn)品幾乎都是用的拍照識(shí)別的方式。其實(shí)早在做SOSO慧眼的時(shí)候,模式識(shí)別團(tuán)隊(duì)的同學(xué)就在思考一個(gè)問(wèn)題,為什么一定要拍?我想拍照識(shí)別的最大好處就是用戶(hù)意圖明確,從而流量大幅減少。但是拍照識(shí)別的一個(gè)壞處就是用戶(hù)一定要主動(dòng)觸發(fā),而用戶(hù)主動(dòng)觸發(fā)的情況下,只會(huì)進(jìn)行一次識(shí)別嘗試,一旦沒(méi)有識(shí)別結(jié)果,用戶(hù)的感受就會(huì)很差。如前面所述,實(shí)時(shí)識(shí)別才是更好的用戶(hù)體驗(yàn),但是不停傳送圖片的方法會(huì)造成大量的流量浪費(fèi),也會(huì)造成服務(wù)器壓力過(guò)大。也正是因?yàn)榇宋覀冊(cè)谏衔闹兴岬降倪@些同類(lèi)產(chǎn)品都沒(méi)有實(shí)時(shí)識(shí)別的功能,而唯一有實(shí)時(shí)識(shí)別的 Goggles,經(jīng)過(guò)測(cè)試,其采用的方案基本上也是定時(shí)上傳的,只需用一會(huì)兒流量消耗就會(huì)很大。
那么我們的想法就是如何判斷用戶(hù)的意圖?也就是只有用戶(hù)確實(shí)在對(duì)準(zhǔn)一個(gè)物體的時(shí)候會(huì)自動(dòng)地上傳一張圖片進(jìn)行識(shí)別?而在用戶(hù)運(yùn)動(dòng)的過(guò)程中,或者圖像模糊的情況下,能夠不進(jìn)行傳輸。通過(guò)這樣的方式,實(shí)現(xiàn)了智能判斷上傳識(shí)別圖像的方法,傳輸?shù)臄?shù)據(jù)量大幅縮減。
(二)基于運(yùn)動(dòng)估計(jì)的智能傳圖算法
1) 運(yùn)動(dòng)估計(jì)
運(yùn)動(dòng)估計(jì)的英文名稱(chēng)是(Motion Estimation). 是視頻編碼和視頻處理(例如去交織)中廣泛使用的一種技術(shù)。我們這里將本來(lái)用于視頻編碼的運(yùn)動(dòng)估計(jì)思想移植到手機(jī)攝像頭來(lái),視頻與手機(jī)攝像頭的圖像序列均有共同的連續(xù)圖像相關(guān)性,因此運(yùn)動(dòng)估計(jì)算法是可以通用的。但是同時(shí)這二者又有很多不同點(diǎn),比如手機(jī)攝像頭獲取圖像分辨率往往較低,同時(shí)在用戶(hù)實(shí)際使用的時(shí)候手機(jī)不會(huì)有太大幅度的運(yùn)動(dòng)。更主要的是,視頻編碼中所用的全局運(yùn)動(dòng)估計(jì)算法是非常慢的,即使在PC上也往往不能達(dá)到實(shí)時(shí),因此我們進(jìn)行這些特性進(jìn)行了修改,來(lái)使得算法在各種低端手機(jī)上也能達(dá)到非常高效的性能。
圖2.1 塊匹配算法示意
我們采用的是最簡(jiǎn)單的基于塊匹配的運(yùn)動(dòng)估計(jì)算法,示意圖如圖2.1所示。根據(jù)傳入視頻圖像大小,對(duì)于視頻幀中間的特定區(qū)域在其周?chē)囊粋€(gè)有限鄰域內(nèi)采用由里到外的方式進(jìn)行搜索。找到最相似的塊后,根據(jù)二者位置獲取兩幀之間的運(yùn)動(dòng)矢量。搜索過(guò)程采用逼近算法,首先進(jìn)行大步長(zhǎng)的移動(dòng),找到相似度相對(duì)較小的區(qū)域,然后在區(qū)域內(nèi)減小步長(zhǎng),逐步逼近得到最終的搜索結(jié)果。為了保證算法的高速,對(duì)于超過(guò)一定閾值的過(guò)大的視頻幀圖像,我們首先進(jìn)行了降采樣的處理。獲取的運(yùn)動(dòng)矢量包含了方向和幅度兩個(gè)信息。在手機(jī)這種場(chǎng)景中,根據(jù)實(shí)際的需求,我們所需要判斷的運(yùn)動(dòng)主要有以下4種狀態(tài):運(yùn)動(dòng)、靜止、運(yùn)動(dòng)到靜止、靜止到運(yùn)動(dòng)。其中前兩個(gè)狀態(tài)是根據(jù)實(shí)際的運(yùn)動(dòng)幅度判斷出來(lái)的,后兩個(gè)狀態(tài)是根據(jù)前面的狀態(tài)生成的。而運(yùn)動(dòng)到靜止就是通常使我們認(rèn)為可以上傳圖片的時(shí)機(jī),而靜止過(guò)程中的圖片我們可以認(rèn)為其圖像區(qū)域沒(méi)有明顯的變化(或只有小幅移動(dòng)),因此只需要上傳其中一張就可以了。當(dāng)然,雖然有了運(yùn)動(dòng)矢量,但具體到實(shí)際問(wèn)題,更重要的是考慮防止抖動(dòng)的影響以及用戶(hù)慢速運(yùn)動(dòng)等很多情況,不能簡(jiǎn)單用閾值區(qū)分。運(yùn)動(dòng)估計(jì)算法整體流程圖如圖2.2所示。
?
圖2.2 運(yùn)動(dòng)估計(jì)算法流程圖
2) 圖像有效性判別
有了上面的運(yùn)動(dòng)估計(jì),我們已經(jīng)可以較好地預(yù)測(cè)用戶(hù)的意圖,從而在運(yùn)動(dòng)到靜止?fàn)顟B(tài)的時(shí)候啟動(dòng)傳圖到后臺(tái)的識(shí)別過(guò)程。但是用戶(hù)的手機(jī)存在對(duì)焦過(guò)程,并不是每一幀都是清晰的,即使是清晰的圖像也不一定適合進(jìn)行圖像或者文字識(shí)別。因此有必要對(duì)于需要上傳的圖像進(jìn)行有效性判斷。
為了提高識(shí)別率,以及根據(jù)圖像識(shí)別的特征,我們采用基于FAST特征點(diǎn)的清晰度判別算法。針對(duì)實(shí)際使用的圖片,修改訓(xùn)練了一套自己的FAST角點(diǎn)檢測(cè)引擎,能夠有較好的速度和角點(diǎn)檢測(cè)能力。我們對(duì)于有效圖片的定義是,第一清晰,第二具有較為豐富的紋理。這兩點(diǎn)正好符合FAST的特征,在圖片不清晰的時(shí)候,往往FAST點(diǎn)較少,在比如較多空白或者單一顏色的圖片中,FAST點(diǎn)同樣很少,因此只需要對(duì)于需要上傳圖片的FAST點(diǎn)進(jìn)行判斷,即可以獲得較為有效的上傳圖片。
在我們的實(shí)際應(yīng)用中,僅需要在檢測(cè)到運(yùn)動(dòng)到靜止?fàn)顟B(tài)時(shí),進(jìn)行FAST點(diǎn)判斷的過(guò)程,如果為清晰則直接上傳當(dāng)前幀,如果不清晰而后面仍然為靜止?fàn)顟B(tài),則在后面的幀中繼續(xù)進(jìn)行FAST角點(diǎn)檢測(cè),直到獲得符合上傳條件的幀圖像。
經(jīng)過(guò)優(yōu)化,我們的引擎在iOS主流機(jī)型上均具有很好的性能,在每秒處理10幀的情況下,通常1-2幀處理即可進(jìn)行運(yùn)動(dòng)和有效性估計(jì)。占用的CPU資源更是幾乎忽略不計(jì):
?
三、微信如何“掃”
用戶(hù)只需要打開(kāi)微信“掃一掃”界面,進(jìn)入“封面”或者“翻譯”模式,即可進(jìn)入識(shí)別狀態(tài),如下圖所示:
圖3.1 微信掃封面界面
其中客戶(hù)端的處理流程如下:
?
圖3.2 客戶(hù)端-后臺(tái)處理流程
?
“掃一掃”從攝像頭獲取實(shí)時(shí)的圖像,預(yù)判邏輯會(huì)以一定的時(shí)間間隔從實(shí)時(shí)視頻流當(dāng)中截取圖像進(jìn)行處理,在規(guī)定的狀態(tài)發(fā)生后,會(huì)自動(dòng)觸發(fā)圖片發(fā)送邏輯,將圖片發(fā)送至后臺(tái)進(jìn)行檢索。
四、后續(xù)改進(jìn)
雖然運(yùn)動(dòng)估計(jì)的算法已經(jīng)能夠比較簡(jiǎn)單而且快速地解決了智能上傳圖像識(shí)別的問(wèn)題,但是后續(xù)仍然可以有很多改進(jìn)的空間,比如可以區(qū)分圖像和文字特征的不同,采用不同的清晰度判別方法,比如可以加入跟蹤算法從而保持在已經(jīng)識(shí)別到的物體尚在視頻區(qū)域內(nèi)時(shí),不論其旋轉(zhuǎn)或者拉遠(yuǎn)拉近,均不會(huì)因?yàn)閳D像發(fā)生變化而再次啟動(dòng)識(shí)別,等等。
這種探索只是一個(gè)簡(jiǎn)單而初步的嘗試,但隨著研究的深入,相信實(shí)時(shí)識(shí)別的技術(shù)一定會(huì)成為圖像識(shí)別的主流。
附記:
感謝關(guān)注微信模式識(shí)別團(tuán)隊(duì)的最新技術(shù):
微信5.0:
http://weixin.qq.com/
SOSO慧眼:
http://huiyan.qq.com/?
總結(jié)
以上是生活随笔為你收集整理的微信扫一扫背后的秘密:基于运动估计的智能传图算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 六大Web负载均衡原理与实现
- 下一篇: 利用dns解析来实现网站的负载均衡