欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
深度學(xué)習的端到端文本OCR:使用EAST模型從自然場(chǎng)景圖片中提取文本

我們生活在這樣一個(gè)時(shí)代:任何一個(gè)組織或公司要想擴大規模并保持相關(guān)性,就必須改變他們對技術(shù)的看法,并迅速適應不斷變化的環(huán)境。我們已經(jīng)知道谷歌是如何實(shí)現圖書(shū)數字化的?;蛘逩oogle earth是如何使用NLP來(lái)識別地址的?;蛘咴鯓硬拍荛喿x數字文檔中的文本,如發(fā)票、法律文書(shū)等。

但它到底是如何工作的呢?

這篇文章是關(guān)于在自然場(chǎng)景圖像中進(jìn)行文本識別的光學(xué)字符識別(OCR)。我們將了解為什么這是一個(gè)棘手的問(wèn)題,用于解決的方法,以及隨之而來(lái)的代碼。

But Why Really?

在這個(gè)數字化的時(shí)代,存儲、編輯、索引和查找數字文檔中的信息比花幾個(gè)小時(shí)滾動(dòng)打印/手寫(xiě)/打印的文檔要容易得多。

此外,在一個(gè)相當大的非數字文檔中查找內容不僅耗時(shí);在手動(dòng)滾動(dòng)文本時(shí),我們也可能會(huì )錯過(guò)信息。對我們來(lái)說(shuō)幸運的是,電腦每天都在做一些人類(lèi)認為只有自己能做的事情,而且通常表現得比我們更好。

從圖像中提取文本有許多應用。其中一些應用程序是護照識別、自動(dòng)車(chē)牌識別、將手寫(xiě)文本轉換為數字文本、將打印文本轉換為數字文本等。

挑戰

在討論我們需要如何理解OCR面臨的挑戰之前,我們先來(lái)看看OCR。

在2012年深度學(xué)習熱潮之前,就已經(jīng)有很多OCR實(shí)現了。雖然人們普遍認為OCR是一個(gè)已解決的問(wèn)題,但OCR仍然是一個(gè)具有挑戰性的問(wèn)題,尤其是在無(wú)約束環(huán)境下拍攝文本圖像時(shí)。

我談?wù)摰氖菑碗s的背景、噪音、不同的字體以及圖像中的幾何畸變。正是在這種情況下,機器學(xué)習OCR工具才會(huì )大放異彩。

OCR問(wèn)題中出現的挑戰主要是由于手頭的OCR任務(wù)的屬性。我們通??梢园堰@些任務(wù)分為兩類(lèi):

結構化文本——類(lèi)型化文檔中的文本。在一個(gè)標準的背景,適當的行,標準的字體和大多數密集的文本。

非結構化文本——自然場(chǎng)景中任意位置的文本。文本稀疏,沒(méi)有合適的行結構,復雜的背景,在圖像中的隨機位置,沒(méi)有標準的字體。

許多早期的技術(shù)解決了結構化文本的OCR問(wèn)題。但是這些技術(shù)不適用于自然場(chǎng)景,因為自然場(chǎng)景是稀疏的,并且具有與結構化數據不同的屬性。

在本文中,我們將更多地關(guān)注非結構化文本,這是一個(gè)需要解決的更復雜的問(wèn)題。正如我們所知,在深度學(xué)習的世界里,沒(méi)有一個(gè)解決方案可以適用于所有人。我們將看到解決手頭任務(wù)的多種方法,并將通過(guò)其中一種方法進(jìn)行工作。

用于非結構化OCR任務(wù)的數據集

有很多英文的數據集,但是很難找到其他語(yǔ)言的數據集。不同的數據集提供了不同的任務(wù)需要解決。下面是一些通常用于機器學(xué)習OCR問(wèn)題的數據集示例。

SVHN數據集

街景門(mén)牌號數據集包含73257用于訓練,26032用于測試,531131作為額外的訓練數據。數據集包括10個(gè)標簽,它們是數字0-9。數據集與MNIST不同,因為SVHN具有不同背景下的門(mén)牌號圖像。數據集在每個(gè)數字周?chē)加邪鼑?,而不是像MNIST中那樣有幾個(gè)數字圖像。

場(chǎng)景文本數據集

該數據集包含3000張不同設置(室內和室外)和光照條件(陰影、光線(xiàn)和夜晚)的圖像,文本為韓文和英文。有些圖像還包含數字。

Devanagri字符數據集

這個(gè)數據集為我們提供了來(lái)自25個(gè)不同的本地作者在Devanagari腳本中獲得的36個(gè)字符類(lèi)的1800個(gè)樣本。還有很多類(lèi)似的例子,例如漢字,驗證碼,手寫(xiě)單詞。

閱讀文本

任何典型的機器學(xué)習OCR管道都遵循以下步驟:

預處理

· 從圖像中去除噪聲

· 從圖像中刪除復雜的背景

· 處理圖像中不同的亮度情況

這些是在計算機視覺(jué)任務(wù)中預處理圖像的標準方法。在本博客中,我們不會(huì )關(guān)注預處理步驟。

文本檢測

文本檢測技術(shù)需要檢測圖像中的文本,并在具有文本的圖像部分周?chē)鷦?chuàng )建和包圍框。標準的目標檢測技術(shù)也可以使用。

滑動(dòng)窗口技術(shù)

可以通過(guò)滑動(dòng)窗口技術(shù)在文本周?chē)鷦?chuàng )建邊界框。然而,這是一個(gè)計算開(kāi)銷(xiāo)很大的任務(wù)。在這種技術(shù)中,滑動(dòng)窗口通過(guò)圖像來(lái)檢測窗口中的文本,就像卷積神經(jīng)網(wǎng)絡(luò )一樣。我們嘗試使用不同的窗口大小,以避免錯過(guò)具有不同大小的文本部分。有一個(gè)卷積實(shí)現的滑動(dòng)窗口,這可以減少計算時(shí)間。

單步和基于區域的探測器

有單步頭檢測技術(shù),如YOLO(只看一次)和基于區域的文本檢測技術(shù),用于圖像中的文本檢測。

滑動(dòng)窗口不同的是,YOLO是一種單步技術(shù),只通過(guò)一次圖像來(lái)檢測該區域的文本。

基于區域的方法分一般都會(huì )分為兩個(gè)步驟。

首先,網(wǎng)絡(luò )提出可能有測試的區域,然后對有文本的區域進(jìn)行分類(lèi)。

EAST(高效精準場(chǎng)景文本檢測)

是一種基于本文的非常魯棒的文本檢測深度學(xué)習方法。值得一提的是,它只是一種文本檢測方法。它可以找到水平和旋轉的邊界框。它可以與任何文本識別方法結合使用。

本文的文本檢測管道排除了冗余和中間步驟,只有兩個(gè)階段。

一種是利用全卷積網(wǎng)絡(luò )直接生成單詞或文本行級別的預測。生成的預測可以是旋轉的矩形或四邊形,通過(guò)非最大抑制步驟進(jìn)一步處理,得到最終的輸出。

EAST可以檢測圖像和視頻中的文本。該算法在720p圖像上以13FPS的速度實(shí)時(shí)運行,具有較高的文本檢測精度。這種技術(shù)的另一個(gè)好處是,它的實(shí)現可以在OpenCV 3.4.2和OpenCV 4中使用。我們將看到這個(gè)EAST模型的應用,以及文本識別。

文字識別

一旦我們檢測到有文本的包圍框,下一步就是識別文本。有幾種識別文本的技術(shù)。我們將在下一節討論一些最好的方法。

CRNN

卷積遞歸神經(jīng)網(wǎng)絡(luò )(Convolutional Neural Network, CRNN)是將CNN、RNN和CTC(Connectionist Temporal Classification, Connectionist Temporal Classification)三種方法結合起來(lái),用于基于圖像的序列識別任務(wù),例如場(chǎng)景文本識別和OCR。網(wǎng)絡(luò )架構取自于2015年發(fā)表的論文。

這種神經(jīng)網(wǎng)絡(luò )結構將特征提取、序列建模和轉錄集成到一個(gè)統一的框架中。該模型不需要字符分割。卷積神經(jīng)網(wǎng)絡(luò )從輸入圖像(文本檢測區域)中提取特征。利用深層雙向遞歸神經(jīng)網(wǎng)絡(luò )對標簽序列進(jìn)行預測,預測結果具有一定的相關(guān)性。轉錄層將RNN生成的每一幀轉換成標簽序列。轉錄有兩種模式,即無(wú)詞典轉錄和基于詞典的轉錄。在基于字典的方法中,最高可能的標簽序列將被預測。

機器學(xué)習OCR與Tesseract

Tesseract最初是在1985年至1994年在惠普實(shí)驗室開(kāi)發(fā)的。2005年,它由惠普公司開(kāi)源。根據維基百科,

在2006年,Tesseract被認為是當時(shí)最精確的開(kāi)源OCR引擎之一。

Tesseract的功能主要限于結構化文本數據。在非結構化的文本中,它的性能會(huì )很差,并且有很大的噪聲。自2006年以來(lái),谷歌贊助了Tesseract的進(jìn)一步開(kāi)發(fā)。

基于深度學(xué)習的方法對非結構化數據有更好的處理效果。Tesseract 4通過(guò)基于LSTM網(wǎng)絡(luò )(一種遞歸神經(jīng)網(wǎng)絡(luò ))的OCR引擎增加了基于深度學(xué)習的能力,該引擎專(zhuān)注于線(xiàn)條識別,但也支持Tesseract 3的遺留Tesseract OCR引擎,該引擎通過(guò)識別字符模式工作。最新穩定版4.1.0于2019年7月7日發(fā)布。這個(gè)版本在非結構化文本上也更加精確。

我們將使用一些圖像來(lái)展示EAST方法的文本檢測和Tesseract 4的文本識別。讓我們看看下面代碼中的文本檢測和識別。

##Loading the necessary packages import numpy as np import cv2 from imutils.object_detection import non_max_suppression import pytesseract from matplotlib import pyplot as plt#Creating argument dictionary for the default arguments needed in the code. args = {'image':'../input/text-detection/example-images/Example-images/ex24.jpg', 'east':'../input/text-detection/east_text_detection.pb', 'min_confidence':0.5, 'width':320, 'height':320}

在這里,我首先處理必要的包。OpenCV包使用EAST模型進(jìn)行文本檢測。tesseract包用于識別檢測到的文本框中的文本。

確保tesseract版本>= 4。Tesseract的安裝請大家自行百度。

以下是一些參數的含義:

image:用于文本檢測和識別的輸入圖像的位置。

east:具有預先訓練的east檢測器模型的文件的位置。

min_confidence:最小置信值預測的幾何形狀在該位置的置信值的最小概率得分

width:圖像寬度應該是32的倍數,這樣EAST模型才能正常工作

height:圖像高度應該是32的倍數,這樣EAST模型才能正常工作

圖像處理

#Give location of the image to be read.#'Example-images/ex24.jpg' image is being loaded here. args['image']='../input/text-detection/example-images/Example-images/ex24.jpg'image = cv2.imread(args['image'])#Saving a original image and shapeorig = image.copy()(origH, origW) = image.shape[:2]# set the new height and width to default 320 by using args #dictionary.  (newW, newH) = (args['width'], args['height'])#Calculate the ratio between original and new image for both height and weight. #This ratio will be used to translate bounding box location on the original image. rW = origW / float(newW)rH = origH / float(newH)# resize the original image to new dimensionsimage = cv2.resize(image, (newW, newH))(H, W) = image.shape[:2]# construct a blob from the image to forward pass it to EAST modelblob = cv2.dnn.blobFromImage(image, 1.0, (W, H),	(123.68, 116.78, 103.94), swapRB=True, crop=False)

加載預先訓練的EAST模型并定義輸出層

# load the pre-trained EAST model for text detection net = cv2.dnn.readNet(args['east'])# We would like to get two outputs from the EAST model. #1. Probabilty scores for the region whether that contains text or not. #2. Geometry of the text -- Coordinates of the bounding box detecting a text# The following two layer need to pulled from EAST model for achieving this. layerNames = [ 'feature_fusion/Conv_7/Sigmoid', 'feature_fusion/concat_3']

EAST模型前向傳播

#Forward pass the blob from the image to get the desired output layersnet.setInput(blob)(scores, geometry) = net.forward(layerNames)

從EAST模型預測中解碼邊框函數

## Returns a bounding box and probability score if it is more than minimum confidencedef predictions(prob_score, geo): (numR, numC) = prob_score.shape[2:4] boxes = [] confidence_val = [] # loop over rows for y in range(0, numR): scoresData = prob_score[0, 0, y] x0 = geo[0, 0, y] x1 = geo[0, 1, y] x2 = geo[0, 2, y] x3 = geo[0, 3, y] anglesData = geo[0, 4, y] # loop over the number of columns for i in range(0, numC): if scoresData[i] < args['min_confidence']: continue (offX, offY) = (i * 4.0, y * 4.0) # extracting the rotation angle for the prediction and computing the sine and cosine angle = anglesData[i] cos = np.cos(angle) sin = np.sin(angle) # using the geo volume to get the dimensions of the bounding box h = x0[i] + x2[i] w = x1[i] + x3[i] # compute start and end for the text pred bbox endX = int(offX + (cos * x1[i]) + (sin * x2[i])) endY = int(offY - (sin * x1[i]) + (cos * x2[i])) startX = int(endX - w) startY = int(endY - h) boxes.append((startX, startY, endX, endY)) confidence_val.append(scoresData[i]) # return bounding boxes and associated confidence_val return (boxes, confidence_val)

我們只解碼水平邊界框。

通過(guò)非最大抑制得到最終的邊界框

# Find predictions and  apply non-maxima suppression(boxes, confidence_val) = predictions(scores, geometry)boxes = non_max_suppression(np.array(boxes), probs=confidence_val)

現在我們已經(jīng)得到了邊界框。我們如何從檢測到的邊界框中提取文本?Tesseract可以實(shí)現。

生成帶有邊界框坐標和框中可識別文本的列表

# initialize the list of resultsresults = []# loop over the bounding boxes to find the coordinate of bounding boxesfor (startX, startY, endX, endY) in boxes: # scale the coordinates based on the respective ratios in order to reflect bounding box on the original image startX = int(startX * rW) startY = int(startY * rH) endX = int(endX * rW) endY = int(endY * rH) #extract the region of interest r = orig[startY:endY, startX:endX] #configuration setting to convert image to string. configuration = ('-l eng --oem 1 --psm 8') ##This will recognize the text from the image of bounding box text = pytesseract.image_to_string(r, config=configuration) # append bbox coordinate and associated text to the list of results results.append(((startX, startY, endX, endY), text))

上面的代碼部分已經(jīng)將邊界框坐標和相關(guān)文本存儲在一個(gè)列表中。我們會(huì )看到它在圖像上的樣子。

在我們的示例中,我們使用了Tesseract的特定配置。tesseract配置有多個(gè)選項。

l: language, chosen English in the above code.    oem(OCR Engine modes):    0 Legacy engine only.    1 Neural nets LSTM engine only.    2 Legacy + LSTM engines.    3 Default, based on what is available.    psm(Page segmentation modes):    0 Orientation and script detection (OSD) only.    1 Automatic page segmentation with OSD.    2 Automatic page segmentation, but no OSD, or OCR. (not implemented)    3 Fully automatic page segmentation, but no OSD. (Default)    4 Assume a single column of text of variable sizes.    5 Assume a single uniform block of vertically aligned text.    6 Assume a single uniform block of text.    7 Treat the image as a single text line.    8 Treat the image as a single word.    9 Treat the image as a single word in a circle.    10 Treat the image as a single character.    11 Sparse text. Find as much text as possible in no particular order.    12 Sparse text with OSD.    13 Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.

我們可以根據我們的圖像數據選擇特定的Tesseract配置。

顯示帶有邊框和可識別文本的圖像

#Display the image with bounding box and recognized textorig_image = orig.copy()# Moving over the results and display on the imagefor ((start_X, start_Y, end_X, end_Y), text) in results: # display the text detected by Tesseract print('{}\n'.format(text)) # Displaying text text = ''.join([x if ord(x) < 128 else '' for x in text]).strip() cv2.rectangle(orig_image, (start_X, start_Y), (end_X, end_Y), (0, 0, 255), 2) cv2.putText(orig_image, text, (start_X, start_Y - 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7,(0,0, 255), 2)plt.imshow(orig_image)plt.title('Output')plt.show()

結果

上面的代碼使用OpenCV EAST模型進(jìn)行文本檢測,使用Tesseract進(jìn)行文本識別。Tesseract的PSM已相應地設置。需要注意的是,Tesseract的檢測需要清晰的圖像。

在我們當前的實(shí)現中,由于其實(shí)現的復雜性,我們沒(méi)有考慮旋轉邊界框。但是在文本旋轉的實(shí)際場(chǎng)景中,上面的代碼不能很好地工作。此外,當圖像不是很清晰時(shí),Tesseract將很難正確識別文本。

通過(guò)上述代碼生成的部分輸出如下:

該代碼可以為以上三個(gè)圖像提供良好的結果。文字清晰,文字背后的背景在這些圖像中也是統一的。

這個(gè)模型在這里表現得很好。但是有些字母識別不正確??梢钥吹?,邊框基本上是正確的。但是我們當前的實(shí)現不提供旋轉邊界框。這是由于Tesseract不能完全識別它。

這個(gè)模型在這里表現得相當不錯。但是有些文本在邊界框中不能正確識別。數字1根本無(wú)法檢測到。這里有一個(gè)不一致的背景,也許生成一個(gè)統一的背景會(huì )有助于這個(gè)案例。同樣,24沒(méi)有被正確識別。在這種情況下,填充邊界框可能會(huì )有所幫助。

在上面的例子中,背景中有陰影的樣式化字體似乎影響了結果。

我們不能指望OCR模型是100%準確的。盡管如此,我們已經(jīng)通過(guò)EAST模型和Tesseract取得了良好的結果。添加更多的過(guò)濾器來(lái)處理圖像可能有助于提高模型的性能。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Python OCR庫:自動(dòng)化測試驗證碼識別神器!
python 簡(jiǎn)單幾句實(shí)現OCR圖像識別技術(shù)
基于Python實(shí)現對PDF文件的OCR識別
獨家|一文讀懂文字識別(OCR)
截屏、文字提取一氣呵成,超實(shí)用OCR開(kāi)源小工具
ubuntu安裝tesseract 進(jìn)行OCR識別
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久