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