AOE工程實踐-銀行卡OCR裡的圖像處理

2020-12-18 AI科技大本營

近期我們開發了一個銀行卡 OCR 項目。需求是用手機對著銀行卡拍攝以後,通過推理,可以識別出卡片上的卡號。

工程開發過程中,我們發現手機拍攝以後的圖像,並不能滿足模型的輸入要求。以 Android 為例,從攝像頭獲取到的預覽圖像是帶 90 度旋轉的 NV21 格式的圖片,而我們的模型要求的輸入,只需要卡片區域這一塊的圖像,並且需要轉成固定尺寸的 BGR 格式。所以在圖像輸入到模型之前,我們需要對採集到的圖像做圖像處理,如下圖所示:

在開發的過程中,我們對 YUV 圖像格式和 libyuv 進行了研究,也積累了一些經驗。

下文我們結合銀行卡 OCR 項目,講一講裡面涉及到的一些基礎知識:

什麼是YUV格式如何對YUV圖像進行裁剪如何對YUV圖像進行旋轉圖像處理中的Stride如何進行縮放和格式轉換libyuv的使用想要對採集到的YUV格式的圖像進行處理,首先我們需要了解什麼是 YUV 格式。

什麼是YUV格式

YUV 是一種顏色編碼方法,YUV,分為三個分量:

「Y」 表示明亮度(Luminance或Luma),也就是灰度值;

「U」和「V」 表示的則是色度(Chrominance或Chroma)。

主流的採樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0。

這部分專業的知識,網絡上有詳細的解釋。我們簡單理解一下,RGB 和 YUV 都使用三個值來描述一個像素點,只是這三個值的意義不同。通過固定的公式,我們可以對 RGB 和 YUV 進行相互轉換。

工程裡常見的I420,NV21,NV12,都是屬於YUV420,每四個Y共用一組UV分量。YUV420主要包含兩種格式,YUV420SP 和YUV420P。

YUV420SP,先排列Y分量,UV分量交替排列,例如:NV12: YYYYYYYY UVUV 和 NV21: YYYYYYYY VUVU (上文中我們在安卓上採集到的圖像就是這種格式)。YUV420P,先排列U(或者V)分量,再排列V(或者U)分量。例如:I420: YYYYYYYY UU VV 和 YV12: YYYYYYYY VV UU。

了解了YUV的圖像格式以後,我們就可以嘗試對圖片進行裁剪和旋轉了。

我們的想法是先在圖片上裁剪出銀行卡的區域,再進行一次旋轉。

如何對YUV圖像進行裁剪

YUV420SP 和 YUV420P 裁剪的過程類似,以 YUV420SP 為例,我們要裁剪圖中的這塊區域:

在圖上看起來就非常明顯了,只要找到裁剪區域對應的Y分量和UV分量,按行拷貝到目標空間裡就可以了。

我們再來看一張圖,是否可以用上面的方法來裁剪圖中的這塊區域呢?

答案是否定的,如果你按照上面說的方法來操作,最後你會發現你保存出來的圖,顏色基本是不對的,甚至會有內存錯誤。原因很簡單,仔細觀察一下,當 ClipLeft 或者 ClipTop 是奇數的時候,會導致拷貝的時候UV分量錯亂。

如果把錯誤的圖像數據輸入到模型裡面,肯定是得不到我們期望的結果的。所以我們在做裁剪的時候,需要規避掉奇數的場景,否則你會遇到意想不到的結果。

如何對 YUV 圖像進行旋轉

對上文裁剪後的圖像做順時針90度旋轉,相比裁剪,轉換要稍微複雜一些。

基本方法是一樣的,拷貝對應的 Y 分量和 UV 分量到目標空間裡。

在了解了裁剪和旋轉的方法以後,我們發現在學習的過程中不可避免地遇到了 Stride 這個詞。

那它在圖像中的作用是什麼呢?

圖像處理中的Stride

Stride是非常重要的一個概念,Stride 指在內存中每行像素所佔的空間,它是一個大於等於圖像寬度的內存對齊的長度。如下圖所示:

回過頭來看我們上面說到的裁剪和旋轉,是否有什麼問題?

以 Android 上的YV12為例,Google Doc 裡是這樣描述的:

YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed by (W/2) x (H/2) Cr and Cb planes.This format assumes an even width an even height a horizontal stride multiple of 16 pixels a vertical stride equal to the heighty_size = stride * heightc_stride = ALIGN(stride / 2, 16)c_size = c_stride * height / 2size = y_size + c_size * 2cr_offset = y_sizecb_offize = y_size + c_size複製代碼所以在不同的平臺和設備上,需要按照文檔和 stride 來進行計算。例如計算 Buffer 的大小,很多文章都是簡單的 「*3/2」 ,仔細考慮一下,這其實是有問題的。

如果不考慮 stride ,會有帶來什麼後果?如果 「運氣」 足夠好,一切看起來很正常。「運氣」不夠好,你會發現很多奇怪的問題,例如花屏,綠條紋,內存錯誤等等。這和我們平常工作中遇到的很多的奇怪問題一樣,實際上背後都是有深層次的原因的。

經過裁剪和旋轉,我們只需要把圖像縮放成模型需要的尺寸,轉成模型需要的BGR格式就可以了。

如何進行縮放和格式轉換

以縮放為例,有臨近插值,線性插值,立方插值,蘭索斯插值等算法。YUV 和 RGB 之間的轉換,轉換的公式也有很多種,例如量化和非量化。這些涉及到專業的知識,需要大量的時間去學習和理解。

這麼多的轉換,我們是否都要自己去實現?

很多優秀的開源項目已經提供了完善的 API 給我們調用,例如 OpenCV,libyuv 等。我們需要做的是理解基本的原理,站在別人的肩膀上,做到心裡有數,這樣即使遇到問題,也能很快地定位解決。

經過調查和比較,我們選擇了 libyuv 來做圖像處理的庫。libyuv 是 Google 開源的實現各種 YUV 與 RGB 之間相互轉換、旋轉、縮放的庫。它是跨平臺的,可在 Windows、Linux、Mac、Android 等作業系統,x86、x64、arm 架構上進行編譯運行,支持 SSE、AVX、NEON等SIMD 指令加速。

libyuv的使用

引入libyuv以後,我們只需要調用libyuv提供的相關API就可以了。

在銀行卡OCR工程使用的過程中,我們主要遇到了2個問題:

1,在Android開發的初期,我們發現識別率和我們的期望存在一定的差距。

我們懷疑是模型的輸入數據有問題,通過排查發現是使用libyuv的時候,沒注意到它是little endian。例如這個方法:int BGRAToARGB(...),BGRA little endian,在內存裡順序實際是ARGB。所以在使用的時候需要弄清楚你的數據在內存裡是什麼順序的,修改這個問題後識別率達到了我們的預期。

2,在大部分機型上運行正常,但在部分機型上出現了 Native 層的內存異常。

通過多次定位,最後發現是 stride 和 buffersize 的計算錯誤引起的。

通過銀行卡 OCR 項目,我們積累了相關的經驗。另外,由於 libyuv 是 C/C++ 實現的,使用的時候不是那麼的便捷。為了提高開發效率,我們提取了一個 Vision 組件,對libyuv封裝了一層 JNI 接口,包括了一些基礎的轉換和一些 sample,這樣使用起來更加簡單方便了。作為AOE SDK 裡的圖像處理組件,還在不斷開發和完善中。

項目地址:github.com/didi/aoe

相關焦點

  • 遙感圖像處理與分析系統
    1.通用遙感圖像處理系統  (1)遙感圖像處理系統GeoImager  GeoImager是在國家863計劃支持下,由武漢吉奧信息工程有限公司、武漢大學和中國地質大學聯合組織開發的具有自主智慧財產權的遙感數據處理平臺。該系統除具有常規的遙感圖像處理功能之外,具有高光譜數據處理、遙感影像融合、雷達數據處理、基於衛星遙感影像的DEM生成等功能。
  • 常用的十大 python 圖像處理工具
    但無論是用於何種用途,這些圖像都需要進行處理。圖像處理就是分析和處理數字圖像的過程,主要旨在提高其質量或從中提取一些信息,然後可以將其用於某種用途。圖像處理中的常見任務包括顯示圖像,基本操作如裁剪、翻轉、旋轉等,圖像分割,分類和特徵提取,圖像恢復和圖像識別。
  • 2017上半年 Stackoverflow上排名前30位的圖像處理書籍
    Chan, Jianhong (Jackie) Shen本書介紹了現代圖像處理和低級計算機視覺的數學基礎,並從圖像結構和模式的分析中提出了一個總體框架,研究了幾個重要的圖像處理任務,介紹了其核心的數學和計算成分。在理論和計算的基礎上,對模型的建立和性能進行了堅實的理論分析,並給出了計算的實現和數值範例。
  • 圖像處理算法有哪些_圖像處理十大經典算法
    其中很大一部分是圖像,圖像可以把事物生動地呈現在我們面前,讓我們更直觀地接受信息。同時,計算機已經作為一種人們普遍使用的工具為人們的生產生活服務。圖像處理概況圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。
  • PhotoShop圖像處理:修改圖像的大小
    在平面處理過程中,任何圖像都具有高度和寬度,它決定了圖像大小和畫布大小1、圖像:可以理解為附在畫板上的繪畫紙2、畫布:可以理解為繪畫時使用的畫板修改圖像大小勾選「重新採樣」:就等於賦予了PS改變圖像像素數量的權利三:「重新採樣」方式1、自動:PS根據文檔類型,是放大或縮小文檔來選取重新採樣的方法2、保留細節(擴大):在放大圖像時,使用「減少雜色」滑塊來消除雜色3、保留細節 2.0:可在調整圖像大小時保留重要的細節和紋理
  • 銀行卡裡還剩幾元或幾十元,長期不用的話,銀行會怎麼處理?
    隨著銀行卡的普及,現在人均手中就有1-2張銀行卡。而這些銀行卡可能都會有自己各自的用途。有的是用來發工資的、個人日常消費的、經營產生的費用的等等。而有時候在消費的過程中,銀行卡裡的錢越來越少,有時候只會剩下幾元或者幾十元。
  • 使用Python OpenCV處理圖像之圖像感興趣的區域(ROI)獲取
    上幾篇的內容我們學習了Python使用OpenCV處理圖像滑鼠及鍵盤事件的基礎方法使用Python OpenCV處理圖像之詳解使用OpenCV處理鍵盤滑鼠事件及圖像像素點內容的獲取和設置使用Python OpenCV處理圖像之使用OpenCV獲取並修改圖像的像素值。
  • 最終幻想14:E9SP4階段雲媽分身半場AOE解法與推導過程
    因為推導過程在群裡所以碼字比較慢,結論最後上,各位稍安勿躁。 條件1:雲媽的三個aoe讓場地只有1/8個安全區; 條件2:雲媽的三個aoe之間互相沒有無效範圍 (什麼叫無效範圍) 即:如果boss面朝12點釋放左側半場aoe入上圖所示,那麼在boss正後方也就是C點的分身的aoe範圍同樣是左側半場, 則互為無效aoe範圍;
  • FileWave推出免費圖像處理工具
    10.8 Mountain Lion 系統推出「Lightning」 舊金山2012年8月15日電 /美通社亞洲/ -- FileWave 的 Lightning 是一款可配合蘋果(Apple) 最新的 Thunderbolt™ 技術使用的免費圖像處理工具
  • 加拿大公司Cedar Lane起訴華為侵犯其圖像處理專利
    據外媒LAW STREET Media報導,近日一家名為Cedar Lane Technologies的加拿大公司,在美國德克薩斯州東區對華為提起了專利侵權訴訟,聲稱華為侵犯了其圖像相關的專利,在他們的系統和設備中使用這些專利方法。
  • 七牛雲圖片處理實踐|帶你認識WebP
    在此,七牛雲全新策劃圖片處理系列實踐,探尋雲服務之上的圖片之路。WebP格式的優勢WebP 格式是Google於2010年發布的一種支持有損壓縮和無損壓縮的圖片文件格式,派生自圖像編碼格式 VP8。它具有較優的圖像數據壓縮算法,能帶來更小的圖片體積,而且擁有肉眼識別無差異的圖像質量,同時具備了無損和有損的壓縮模式、Alpha 透明以及動畫的特性,在 JPEG 和 PNG 上的轉化效果都非常優秀、穩定和統一。目前,知名網站 Youtube 、Facebook、Ebay 等均有使用 WebP 格式。
  • 廢棄不用的銀行卡,要怎麼處理?別不用還欠費了
    在行動支付越來越便捷的今天,相信存摺本已經淡出大部分人的視野了,就連現金和銀行卡,都越來越沒有存在感。一部手機,多個APP,便可將各大銀行的大部分櫃檯業務攬收到一起,資金流動轉移到線上,安全又方便。當銀行卡以手機銀行的方式存在於我們的生活,那些不用的小卡片要如何處理呢?
  • 圖像增強領域大突破!1.66ms處理4K圖像,港理工提出圖像自適應的3DLUT
    所提方法採用端到端的方式同時學習3DLUT以及一個小網絡,小網絡用於根據輸入圖像學習查找表的融合權值,將融合後的3DLUT作用於輸入圖像即可得到期望的輸出。所提方法僅僅包含不到600K參數,能夠以不超過2ms的速度處理4K解析度圖像(硬體平臺:Titan RTX GPU)。在具有超快的推理速度同時,所提方法同樣以極大的優勢(PSNR,SSIM以及顏色差異度量指標)超越其他圖像增強方法。
  • 攝影后期-11款專業圖像處理軟體
    二、Adobe Photoshop簡稱PS,是最常用的的圖像處理軟體,在處理圖片時有非常強大的功能。其作用主要是用於對照品的精修和製作,不太適用於批量處理前期拍攝的圖片。它雖然功能上沒有photoshop強大,但是它的圖像處理能力一點也不遜色。儘管他只支持八位的處理。如果主要以JPG照片為主的攝影師,它也是一個很不錯的後期處理軟體。
  • GMS氣象衛星雲圖實時數據錄取和圖像處理
    在衛星雲圖的接收、處理系統中,數據的實時錄取與保存、事後的圖像處理是關鍵技術。下面論述的是GMS-3衛星雲圖數據的實時錄取與保存、事後圖像處理的工作原理、關鍵技術實現方法。2 雲圖數據的實時錄取當衛星接收機收到衛星發來的高頻信號後,首先對它進行高頻、中頻放大及調解、解碼處理,撮出雲圖圖像數據及幀同步脈衝、字同步脈衝、位同步脈衝等信號。由於GMS-3雲圖信息是一個660Kbit 的數據流,數據量高達95MB,所以應當對雲圖接收機發來的數據進行前置預處理。預處理的主要作用是對接收機發來的數據進行提取、緩衝,去掉一些無用的重複數據。
  • 遙感圖像處理中的深度學習專題 《中國科學:信息科學》英文版
    過去幾年來, 遙感圖像處理相關的深度學習研究快速增長, 包括高光譜遙感圖像、合成孔徑雷達(SAR)圖像等處理、分類、參數反演及目標檢測識別. 除了遙感數據的高解析度、高維度和大尺寸之外, 該領域還存在一些特殊的挑戰, 如不同傳感器及其不同工作模式的複雜性和特殊性, 隱含在遙感數據中的獨特物理屬性, 信息反演的物理原理等.
  • 上海理工大學印刷工程專業介紹
    傳統的印刷工程專業是集光學、電子、機械、化工於一體的綜合學科。隨著計算機技術和網絡技術及其他新媒體技術在印刷技術和印刷機械製造業中的廣泛深入應用,現代印刷學科的已經發展成為信息製造業和文化傳播業中一個重要的領域。
  • 銀行卡異地遭偽卡盜刷糾紛中的責任劃分與處理
    本案與盜刷可能涉嫌犯罪行為並非同一法律關係,且本案的基本事實已經查明,故對農業銀行鎮海開發區支行要求將本案移送公安機關處理的理由亦不予採納。綜上,原告主張被告賠償原告存款損失及銀行同期活期存款利息損失的訴訟請求,具有事實依據與法律依據,法院予以支持。
  • 索爾維上海市工程碩士實踐教學示範基地研究生工程實踐總結匯報會...
    1月7日,由華東理工大學與索爾維投資有限公司(以下簡稱「索爾維」)聯合建設的上海市工程碩士實踐教學示範基地(以下簡稱「索爾維基地),在我校逸夫樓第三會議室舉行了第七屆研究生工程實踐教學總結匯報會。索爾維上海研究與創新中心總監Gangkai ZHAO、研發中心外事經理董婕、工藝安全實驗室經理馬瑩瑩、我校研究生院副院長鄭致剛、資環學院黨委書記修光利、資環學院副院長陳雪莉、教師代表及部分在索爾維進行工程實踐的學生代表出席了本次會議。