自然场景下图片中红色横幅文字的提取与矫正(OCR)
最近一個月在做互聯網橫幅圖片中OCR的提取與矯正,主要是針對紅色橫幅體,在項目實踐過程中遇到了一些問題,多虧了老師的幫助,基本完成了項目。現在分享一下我用到的一些方法,希望對大家有用。字符識別第二版
字符識別第二版
一、系統概況:
系統主要有三部分構成:橫幅分割,橫幅校正,字符識別。
橫幅分割:本系統主要是針對紅色橫幅體進行分割識別,在圖片中橫幅體的主要特征是顏色,將圖像轉換到YCbCr空間,對Cb和Cr分量設定閾值,將圖像轉化為二值圖。橫幅體的形狀一般是矩形,面積在圖像中占據一定的比例,而且長寬比有一定的規律,一般長寬比大于3:1。對二值圖像進行連通域分析,取連通域面積較大的前三個連通域,這三個連通域中長寬比大于3:1且最佳外接多邊形與矩形相似的為橫幅區域。
橫幅校正:1、橫幅是否矯正的判定:首先確定橫幅體的上下邊沿,如下圖所示:
?
根據橫幅上下邊沿的夾角確定是否需要校正。若需要校正,確定橫幅體的四個邊緣點:
?
計算左邊兩點之間的垂直距離L1和右邊兩個點的距離L2,若L1>L2,則透視變換以L1為標準即上沿的兩個點的y坐標都變為L1上面點的縱坐標,透視變換采用的是opencv 的函數warpPerspective,校正后效果圖:
?
(注:文字的上下邊沿和橫幅的上下邊沿是平齊的,文字上下邊沿的確定比橫幅上下邊沿更容易受干擾因素,比如陽光、陰影、和橫幅的褶皺等,比如下圖:一旦文字的邊沿定位不好,校正就會出現錯誤。校正之后可以根據文字區域的紋理跳變情況進行掃描確定文字的上下邊沿。
?
)
2、文字上下沿的確定:文字區域具有比較豐富的紋理特性,對校正后的橫幅區域運用Canny邊緣檢測,對邊沿檢測圖進行行掃描,記錄每一行像素值從一到零和從零到一跳變的次數。從上邊沿開始跳變次數第一個達到10的行,為文字上邊沿,同理從下邊沿開始第一個達到10的行,是文字的下邊沿。
?
?
3、字符分割:根據文字行定位的結果將字符分割出來
?
?
字符識別:調用文通SDK進行字符識別。
二、系統存在的問題:
1、目前該系統已經能對大部分橫幅體進行定位和校正,對于偏轉很厲害的橫幅校正后字體出現模糊。
?
校正后:
?
?
?
2、文通的SDK主要是針對圖像中打印的標準文字識別率很高,如下圖所示:
?
對于橫幅體的識別準確率不高,我認為主要有以下幾個原因:
1、橫幅體中的字體筆畫太粗,而且存在形變(由于橫幅擺放和拍攝的角度不同),即使經過校正液會存在比較模糊的情況,與標準的印刷體相差比較大。
2、文通SDK字符的訓練庫應該是基于掃描文檔的常用字,沒有加入橫幅字體的訓練,而我們識別的是橫幅字體,魯棒性不好。
3、從預處理校正部分提高識別率已經很困難了,核心的識別部分不是針對橫幅設計的。
三、系統識別結果:
我已將系統的校正識別結果放在附件當中,一部分是識別結果較好的圖片集,另一部分是識別結果較差的圖片集。包含了原圖像、校正好的圖像、識別結果。
一、識別結果的結構包括:
PictureID:(圖片名稱)
文字內容
TotalNumOfCharacter:(圖片中文字的數目)
二、系統的性能:平均處理每張圖片消耗時間0.127911秒。不支持多線程。
?具體的代碼由于涉及到項目的保密性,我就暫時不公開了,希望對大家有用。
?
?
總結
以上是生活随笔為你收集整理的自然场景下图片中红色横幅文字的提取与矫正(OCR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端实现日历
- 下一篇: 网页动画--鲜花爱心表白动画