从国家身份证中提取文本信息

时间:2018-11-22 13:36:12

标签: python opencv computer-vision tesseract

我正在尝试对以下ID进行OCR阿拉伯语处理,但我的图片非常嘈杂,无法从中提取信息。

这是我的尝试

import tesserocr
from PIL import Image
import pytesseract
import matplotlib as plt
import cv2
import imutils
import numpy as np

image = cv2.imread(r'c:\ahmed\ahmed.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray,11,18,18)

gray = cv2.GaussianBlur(gray,(5,5), 0)

kernel = np.ones((2,2), np.uint8)


gray = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
            cv2.THRESH_BINARY,11,2)
#img_dilation = cv2.erode(gray, kernel, iterations=1)


#cv2.imshow("dilation", img_dilation)

cv2.imshow("gray", gray)

text = pytesseract.image_to_string(gray, lang='ara')
print(text)
with open(r"c:\ahmed\file.txt", "w", encoding="utf-8") as myfile:
    myfile.write(text)
cv2.waitKey(0)

result

sample

2 个答案:

答案 0 :(得分:0)

这是我使用ImageMagick TextCleaner脚本的输出:

out

脚本:textcleaner -g -e stretch -f 50 -o 30 -s 1 C:/Users/PC/Desktop/id.jpg C:/Users/PC/Desktop/out.png

如果您想在Windows上安装和使用TextCleaner脚本,请查看here。这是我在处于相同情况下进行的一些研究后,使我的教程尽可能简单的方法。

现在应该可以很容易地检测文本并(不确定是否简单)识别文本。

答案 1 :(得分:0)

id的文本为黑色,这使得提取过程变得容易。您所需要做的就是将暗像素设置为阈值,这样您就可以将文本显示出来。

这是代码片段

import cv2
import numpy as np

# load image in grayscale
image = cv2.imread('AVXjv.jpg',0)

# remove noise
dst = cv2.blur(image,(3,3))

# extract dark regions which corresponds to text
val, dst = cv2.threshold(dst,80,255,cv2.THRESH_BINARY_INV)

# morphological close to connect seperated blobs
dst = cv2.dilate(dst,None)
dst = cv2.erode(dst,None)

cv2.imshow("dst",dst)
cv2.waitKey(0)

结果如下:

enter image description here