基于EAST和Tesseract的文本檢測
目錄
導言
現實世界問題
說明
問題陳述
業(yè)務目標和約束條件
可用于文本檢測和識別的數據集
數據集概述和說明
探索性數據分析(EDA)
深度學習時代之前的文本檢測方法
EAST(高效精確的場景文本檢測器)
示范實現
模型分析與模型量化
部署
今后的工作
1.介紹
在這個數字化時代,從不同來源提取文本信息的需求在很大程度上增加了。
幸運的是,計算機視覺的最新進展減輕了文本檢測和其他文檔分析和理解的負擔。
在計算機視覺中,將圖像或掃描文檔中的文本轉換為機器可讀格式的方法稱為光學字符識別(OCR),該格式可在以后編輯、搜索并用于進一步處理。
光學字符識別的應用
A.信息檢索和自動數據輸入-OCR對于許多公司和機構起著非常重要的作用,這些公司和機構有成千上萬的文檔需要處理、分析和轉換,以執(zhí)行日常操作。
例如,在賬戶詳細信息等銀行信息中,可以使用OCR輕松提取支票金額。同樣,在機場,在檢查護照的同時也可以使用OCR提取信息。其他示例包括使用OCR從收據、發(fā)票、表單、報表、合同等中檢索信息。
B車牌識別-OCR還可用于識別車輛牌照,然后可用于車輛跟蹤、收費等。
C自動駕駛汽車-OCR也可用于建立自動駕駛汽車的模型。它可以幫助識別交通標志。否則,自動駕駛汽車將對道路上的行人和其他車輛構成風險。
在本文中,我們將討論并實現用于OCR的深度學習算法。
數字化:將文本、圖片或聲音轉換成計算機可以處理的數字形式
2.現實世界問題2.1說明
我們現在已經熟悉了文本檢測和識別的各種應用。本文將討論從自然場景圖像中檢測和識別文本。
因此,在我們的例子中,我們使用的是任何自然圖像或場景(不特別是文檔、許可證或車輛編號),對于給定的圖像/場景,我們希望通過邊界框定位圖像中的字符/單詞/句子。然后,我們要識別任何語言的本地化文本?傮w工作流程圖如下所示:
上面使用的圖像用于顯示整個任務。但對于本案例研究,我們將使用隨機自然場景作為輸入圖像。
2.2問題陳述
對于給定的自然場景/圖像,目標是通過繪制邊界框來檢測文本區(qū)域,然后必須識別檢測到的文本。
2.3業(yè)務目標和約束條件。
自然場景圖像中的文本可以使用不同的語言、顏色、字體、大小、方向和形狀。我們必須在自然場景圖像中處理這些文本,這些圖像具有更高的多樣性和可變性。
自然場景的背景可能帶有圖案或形狀與任何文本極其相似的對象,這會在檢測文本時產生問題。
圖像中斷(低質量/分辨率/多方向)
實時檢測、識別和翻譯圖像中的文本需要低延遲。
3.可用于文本檢測和識別的數據集
有許多公開的數據集可用于此任務,下面列出了不同的數據集,包括發(fā)布年份、圖像編號、文本方向、語言和重要功能。
由于非結構化文本、不同方向等原因,所有數據集可能無法很好地適用于所有深度學習模型。
對于這項任務,我選擇ICDAR 2015數據,因為它很容易獲得足夠數量的圖像,用于非商業(yè)用途,這些圖片中的文本是英文的,因為我是一名初學者,我想重點了解解決這項任務的算法的工作原理。
此外,該數據集中的圖像很小,具有多方向性和模糊性,因此我可以對檢測部分進行更多的實驗。
3.1數據集概述和說明
數據源-下載:https://rrc.cvc.uab.es/?ch=4&com=downloads
ICDAR-2015由國際會議文件分析與識別提供
說明:
該數據集在訓練和測試集中可用,每一組都有真實標簽。它總共包含1500張圖像,其中1000張用于訓練,500張用于測試。它還包含2077個裁剪文本實例,包括200多個不規(guī)則文本示例。
這些圖像是從可穿戴相機上獲得的。
4.探索性數據分析(EDA)
下載數據后,所有文件的結構如下-
使用以下代碼,觀察到圖像尺寸、通道數等其他信息
訓練圖像
測試圖像
我們還可以從條形圖得出結論,所有圖像的高度和寬度都相同,即720和1280。
訓練圖像
測試圖像
利用真實標簽繪制原始圖像和邊界框圖像
訓練圖像
測試圖像
從EDA得出的結論
在ICDAR-15數據集中,所有圖像具有相似的大。720x1280)和擴展(.jpg)。
訓練組有1000個圖像,而測試組有500個圖像。
所有圖像的高度和寬度都是相同的,所以我們不需要取平均高度和平均寬度。
在大多數圖像中,所有文本都位于小區(qū)域,圖像模糊。
所有文本均為英語語言,少數文本也不可用,并且*替換為“##!薄
大多數文本都是單個單詞,而不是文字和句子,而且單詞也有多種意思的。我們必須建立這樣一個模型來預測這些模糊的文本。
5.深度學習時代之前的文本檢測方法
正如問題陳述中提到的,我們必須首先定位圖像中的文本,即首先檢測文本,然后識別檢測到的文本。
現在,對于檢測,我們將嘗試一些在深度學習時代之前用于檢測文本的方法。
a.MSER
b. SWT(筆劃寬度變換)
這兩種方法的所有輸出都不是很清楚,在第一種方法中,我們可以觀察到圖像中有一些區(qū)域沒有文本,但仍然用方框標記。同樣在第二種方法中,文本沒有被正確檢測。
還有許多其他用于文本檢測和識別的深度學習算法。在本文中,我們將討論EAST檢測器,并將借助一篇關于EAST算法的研究論文嘗試實現它。
https://arxiv.org/pdf/1704.03155.pdf
為了識別,我們將嘗試預訓練的模型Tesseract。
6.EAST(高效精確的場景文本檢測器)
它是一種快速準確的場景文本檢測方法,包括兩個階段:
1.它使用完全卷積網絡(FCN)模型直接生成基于像素的單詞或文本行預測
2.生成文本預測(旋轉矩形或四邊形)后,輸出將發(fā)送到非極大值抑制以生成最終結果。
管道如下圖所示:
網絡體系結構-(帶PVANet)
PVANet-它是一種用于目標檢測的輕量級特征提取網絡體系結構,可在不損失準確性的情況下實現實時目標檢測性能。
該模型可分為三個部分:主干特征提取、特征合并分支和輸出層。
i.特征提取程序(PVANet)
這部分可以是任何卷積神經網絡,例如PVANet、VGG16和RESNET50。從該網絡可以獲得四個級別的特征圖f1、f2、f3和f4。因為我們正在提取特征,所以它被稱為特征提取器。
ii.特征合并分支
在這一部分中,從特征提取器獲得的特征映射首先被饋送到上池化層,使其大小加倍,然后連接所有特征。接下來,使用1X1卷積,減少了計算,然后使用3X3卷積來融合信息,以產生每個合并階段的最終輸出,如圖所示。
g和h的計算過程如下圖所示
其中
gi是一種中間狀態(tài),是合并的基礎
hi是合并的特征圖
iii、輸出層
合并狀態(tài)的最終輸出通過1X1 Conv層和1個通道,該通道給出范圍為[0–1]的分數映射。最終輸出還通過RBOX或四邊形幾何體(有關這些的說明如下圖所示),該幾何體給出了多通道幾何體映射。
有關score map和geo map的詳細信息將在實現時討論。
7.實現
對于實現,我們將遵循上面顯示的管道-
步驟1-數據準備和數據生成(數據管道)
在這一步中,我們必須進行數據準備,還必須構建一個生成器函數,該函數將提供一個圖像陣列(模型的輸入),其中包含score map(輸出)和geo map(輸出),如上圖所示,你可以觀察到多通道FCN的輸出以及訓練掩碼。
得分圖:
它表示該位置預測幾何地圖的置信度分數/級別。它位于[0,1]范圍內。讓我們通過一個示例來理解它:
假設0.80是一個像素的分數,這意味著對于這個像素,我們有80%的信心預測對應的幾何貼圖,或者我們可以說,像素有80%的幾率是預測文本區(qū)域的一部分。
geo map:
正如我們所知,隨著score map,我們還獲得了一個多通道幾何信息地圖作為輸出。幾何輸出可以是RBOX或QUAD。下表顯示了AABB、RBOX和QUAD的通道數量以及描述。
RBOX:
從上圖中,我們可以觀察到,對于RBOX,幾何體使用四通道軸對齊邊界框(AABB)R和通道旋轉角度θ。R的公式為G。四個通道代表4個距離,即從像素位置到矩形邊界的距離和通道的旋轉角度,如下所示。
QUAD:
對于四邊形,我們使用8個數字表示從四個頂點到每個像素位置的坐標位移。每個偏移距離包含Δxi | Δyi兩個數,幾何輸出包含8個通道。下面是一個例子
在這個實現中,我們將只使用RBOX。
對于生成器功能,我們必須遵循幾個步驟
這里有所有的代碼
https://jovian.ai/paritosh/data-preparation-and-model-implt
此處顯示了從生成器函數輸出的原始圖像,包括分數貼圖、幾何貼圖和訓練掩碼-
步驟2:模型建立和損失函數
在這一步中,我們將嘗試在Imagenet數據上使用預先訓練過的VGG16模型和ResNet50模型作為特征提取器來構建檢測器體系結構。
模型1(VGG16作為特征提取器)
源代碼-
模型架構-
tf.keras.utils.plot_model(model_vgg,show_shapes=True)
模型2(作為特征提取器的ResNet50)
模型架構-
tf.keras.utils.plot_model(model,show_shapes=True)
損失函數
當我們處理圖像數據時,IOU分數是常用的損失之一。但是這里我們主要有兩個輸出,score map和geo map,所以我們必須計算兩者的損失。
總損失表示為:
Ls和Lg表示得分圖和幾何形狀,λg表示兩個權重的重要性。在我們的實驗中,我們設定λg為1。
score map損失
在本文中,用于score map的損失是二元交叉熵損失,其權重為正類和負類,如圖所示。
geo map損失
對于RBOX,損失定義為
第一個損失是盒子損失,對于這個IOU損失,它是針對不同比例的對象使用的不變量。
對于旋轉角度,損失由下式給出-
實現代碼如下所示:
第三步模型訓練
使用Adam優(yōu)化器對這兩個模型進行30個epoch的訓練,其他參數如下所示-
模型-1
model_vgg.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,amsgrad=True),loss= total_Loss())
epoch與損失圖:
模型2
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,amsgrad=True),loss=total_Loss())
epoch與損失圖:
Step-4 推理管道
首先訓練后,幾何體貼圖將轉換回邊界框。然后根據score map進行閾值分割,去除一些低置信度盒。使用非最大抑制合并其余框。
非最大抑制(NMS)是許多計算機視覺算法中使用的一種技術。這是一類從多個重疊實體中選擇一個實體(例如邊界框)的算法
這里我們將使用本地感知的NMS。它將加權合并添加到標準NMS中。所謂加權合并是根據分數在輸出框中合并高于某個閾值的2個IOU。下面討論實施過程中遵循的步驟-
首先,對geo map形進行排序,并從最上面開始。
2.在這一行的下一個方框中找到帶有上一個方框的iou
3.如果IOU>threshold,則通過按分數取加權平均值來合并兩個框,否則保持原樣。
4.重復步驟2至3,直到迭代所有框。
5.最后在剩余的框上應用標準NMS。
實現代碼-
非最大抑制
檢測模型的干擾管道
每個模型的輸出:模型-1
模型2
如果我們比較兩個模型的損失,那么我們可以得出結論,模型2(resnet_east)表現良好。讓我們對模型2的性能進行分析。8.模型分析與模型量化正如我們所看到的,模型2的性能優(yōu)于模型1,這里我們將對模型2的輸出進行一些分析。首先,計算訓練和測試目錄中每個圖像的損失,然后基于分布,通過查看每個訓練和測試圖像的損失,我們將選擇兩個閾值損失,最后,我們將數據分為三類,即最佳、平均和最差。訓練和測試的密度圖-
將圖像數據分為3類(最佳、平均和最差)將數據分為3類Best = if loss < np.percentile(final_train.loss, 33)----->Threshold-1
Average = if np.percentile(final_train.loss, 33)< loss < np.percentile(final_train.loss, 75)
Worst = if loss > np.percentile(final_train.loss, 75)--Threshold-2
每個類別的圖像數量如下所示:訓練圖像:
對于測試圖像:
從第一個圖中,對于訓練數據,我們可以觀察到33%的數據屬于最佳類別,42%的數據屬于平均類別,只有25%的數據屬于最差類別。從第二個圖中,對于測試數據,我們可以觀察到2.6%的數據屬于最佳類別,13.2%的數據屬于平均類別,84.2%的數據屬于最差類別。從這些觀察結果中,我們還可以得出結論,我們的模型可能對測試圖像(即新圖像)表現不佳。模型量化深度學習的量化是通過低位寬數的神經網絡近似使用浮點數的神經網絡的過程。這大大降低了使用神經網絡的內存需求和計算成本。量化后,原始模型和量化模型的大小如下所示-print("Orignal model size=",(os.path.getsize('east_resnet.h5')/1e+6),"MB")
print("Dynamic Post Training Quantization model size=",os.path.getsize('dynamic_east.tflite')/1e+6,"MB")
print("Float16 Post Training Quantization model size=",os.path.getsize('east_float16.tflite')/1e+6,"MB")
Orignal model size= 105.43348 MB
Dynamic Post Training Quantization model size= 24.810672 MB
Float16 Post Training Quantization model size= 48.341456 MB
9.部署模型量化后,使用streamlit和Github選擇并部署了float16量化模型。使用Streamlight uploader函數,創(chuàng)建了一個.jpg文件輸入部分,你可以在其中提供原始圖像數據,模型將提供圖像上存在檢測到的文本。網頁鏈接-h(huán)ttps://share.streamlit.io/paritoshmahto07/scene-text-detection-and-recognition-/main/app_2.py部署視頻-h(huán)ttps://youtu.be/Pycj2fszhTk10.今后的工作在這項任務中,我們的主要目標是了解檢測模型的工作原理,并從頭開始實現它。為了提高模型的性能,我們可以使用大數據集來訓練我們的模型。我們還可以使用另一種識別模型來更好地識別文本。Github:https://github.com/paritoshMahto07

請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
-
10月23日火熱報名中>> 2025是德科技創(chuàng)新技術峰會
-
10月23日立即報名>> Works With 開發(fā)者大會深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯網行業(yè)年度評選
-
11月27日立即報名>> 【工程師系列】汽車電子技術在線大會
-
12月18日立即報名>> 【線下會議】OFweek 2025(第十屆)物聯網產業(yè)大會
-
精彩回顧立即查看>> 【限時福利】TE 2025國際物聯網展·深圳站