簡體   English   中英

使用python中的OCR從圖像中提取文本

[英]Extract text from image using OCR in python

我想從圖像的特定區域提取文本,例如身份證上的姓名和身份證號碼。 我要提取文本的身份證是中文(中國身份證)。 我嘗試過這段代碼,但它只提取了我不需要的地址和出生日期。 我只需要姓名身份證號碼

import cv2
from PIL import Image
import pytesseract
import argparse
import os

image = cv2.imread("E:/face.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename,gray)

text = pytesseract.image_to_string(Image.open(filename), lang='chi_sim')
print(text)
os.remove(filename)

我還附上了我試圖提取文本的圖像。 我已經根據我的知識嘗試但沒有成功。任何幫助和指導將不勝感激。 在此輸入圖像描述

這是二進制圖像

我可以在找到文本信息之前建議預處理步驟。 代碼很容易理解。

碼:

image = cv2.imread(r'C:\Users\Jackson\Desktop\face.jpg')

#--- dilation on the green channel ---
dilated_img = cv2.dilate(image[:,:,1], np.ones((7, 7), np.uint8))
bg_img = cv2.medianBlur(dilated_img, 21)

#--- finding absolute difference to preserve edges ---
diff_img = 255 - cv2.absdiff(image[:,:,1], bg_img)

#--- normalizing between 0 to 255 ---
norm_img = cv2.normalize(diff_img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
cv2.imshow('norm_img', cv2.resize(norm_img, (0, 0), fx = 0.5, fy = 0.5))

在此輸入圖像描述

#--- Otsu threshold ---
th = cv2.threshold(norm_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
cv2.imshow('th', cv2.resize(th, (0, 0), fx = 0.5, fy = 0.5))

在此輸入圖像描述

如果您能夠找到相關的文字信息,請使用它並告訴我們!

在pytesseract中,lan​​g ='chi_sim'試圖將數字解釋為中文字符。 使用lang ='eng'來正確獲取數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM