2017-08-15 116 views
2

我試圖從掃描的表單中提取數據。窗體有類似下面的圖片中顯示的一個標準格式:Python,文本檢測OCR

enter image description here

我一直在使用pytesseract(正方體OCR)來檢測圖像的文本嘗試,但並未找到文本做了體面的工作並將圖像轉換爲文本。 然而,它實質上只是給我所有檢測到的文本,而沒有保持數據的格式。

我希望能夠做一些事情,如下面:

查找文本的特定部分,然後找到下面或旁邊的相關的數據。與此相似的問題使用OpenCV的Detect text region in image using Opencv

enter image description here

有沒有辦法,我基本上可以做到以下幾點:

  1. 要麼找到窗體上的所有文本框,每個盒子上執行OCR,看看哪一個與「witnesess:」文本最接近,然後找到它下面的部分,並對這些部分執行單獨的OCR。
  2. 或者如果表單是標準的,並且我知道「見證」文本部分的大概位置,我可以在opencv中指定它的一般位置,然後提取下面的文本並對其執行OCR。

編輯:我試過下面的代碼,試圖檢測文本的特定區域。然而,它並不是專門識別所有地區的文字。

import cv2 

img = cv2.imread('t2.jpg') 
mser = cv2.MSER_create() 

img = cv2.resize(img, (img.shape[1]*2, img.shape[0]*2)) 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
vis = img.copy() 

regions = mser.detectRegions(gray) 
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions[0]] 
cv2.polylines(vis, hulls, 1, (0,255,0)) 

cv2.imshow('img', vis) 

下面是結果:

enter image description here

+0

Tesseract可以給你包圍盒,你使用的是包裝? –

+0

由於您似乎以明確定義的格式顯示窗體,因此您可以手動定義一些邊界框,裁剪圖像並單獨在裁剪後的圖像上運行tesseract。 – ZdaR

回答

0

我覺得你的答案已經在自己的崗位。 我最近類似的東西,這是我做的:

//id_image was loaded with cv2.imread 
temp_image = id_image[start_y:end_y,start_x:end_x] 
img = Image.fromarray(temp_image) 
text = pytesseract.image_to_string(img, config="-psm 7") 

所以基本上,如果你的格式是預定義的,你只需要知道你想要的文本字段的位置(你已經知道),裁剪,然後應用ocr(tesseract)提取。

在這種情況下,您需要import pytesseract, PIL, cv2, numpy