如何使用 Tesseract 训练基于 Python 的 OCR,以使用不同的国民身份证进行训练?
How can I train my Python based OCR with Tesseract to train with different National Identity Cards?
我正在与 python 合作开发一个 OCR 系统,该系统可以读取身份证并给出图像的准确结果,但它没有给我正确的答案,因为有太多错误的字符tesseract 读取。我怎样才能以完美读取 ID 卡并为我们提供正确和准确的详细信息的方式训练 tesseract,此外我怎样才能找到 .tiff 文件并使 tesseract 为我的项目工作。
提高Pytesseract识别的步骤:
清理你的图像数组,这样只有文本(生成的字体,而不是手写的)。字母的边缘应该没有扭曲。 应用阈值(尝试不同的值)。还应用一些平滑过滤器。我还建议使用 Morpholofical opening/closing - 但这只是一个好处。这是应该以数组形式输入pytesseract识别的放大示例:https://i.ytimg.com/vi/1ns8tGgdpLY/maxresdefault.jpg
将包含您要识别的文本的图像调整为更高分辨率
Pytesseract 通常应该可以识别任何类型的字母,但是通过安装书写文本的字体,您可以极大地提高准确性。
如何将新字体安装到 pytesseract 中:
获取您想要的 TIFF 格式字体
将其上传到 http://trainyourtesseract.com/ 并将经过训练的数据接收到您的电子邮件中 (编辑:该站点不再存在。此时您必须找到替代字体或训练字体你自己)
添加训练好的数据文件(*.traineddata)到这个文件夹C:\Program Files (x86)\Tesseract-OCR\tessdata
将此字符串命令添加到 pytesseract reconition 函数:
假设您有 2 种经过训练的字体:font1.traineddata 和 font2.traineddata
要同时使用两者,请使用此命令
txt = pytesseract.image_to_string(img, lang='font1+font2')
下面是一个测试你对网络图片识别的代码:
import cv2
import pytesseract
import cv2
import numpy as np
import urllib
import requests
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
TESSDATA_PREFIX = 'C:/Program Files (x86)/Tesseract-OCR'
from PIL import Image
def url_to_image(url):
resp = urllib.request.urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
url='http://jeroen.github.io/images/testocr.png'
img = url_to_image(url)
#img = cv2.GaussianBlur(img,(5,5),0)
img = cv2.medianBlur(img,5)
retval, img = cv2.threshold(img,150,255, cv2.THRESH_BINARY)
txt = pytesseract.image_to_string(img, lang='eng')
print('recognition:', txt)
>>> txt
'This ts a lot of 12 point text to test the\nocr code and see if it works on all types\nof file format\n\nThe quick brown dog jumped over the\nlazy fox The quick brown dog jumped\nover the lazy fox The quick brown dog\njumped over the lazy fox The quick\nbrown dog jumped over the lazy fox'
我正在与 python 合作开发一个 OCR 系统,该系统可以读取身份证并给出图像的准确结果,但它没有给我正确的答案,因为有太多错误的字符tesseract 读取。我怎样才能以完美读取 ID 卡并为我们提供正确和准确的详细信息的方式训练 tesseract,此外我怎样才能找到 .tiff 文件并使 tesseract 为我的项目工作。
提高Pytesseract识别的步骤:
清理你的图像数组,这样只有文本(生成的字体,而不是手写的)。字母的边缘应该没有扭曲。 应用阈值(尝试不同的值)。还应用一些平滑过滤器。我还建议使用 Morpholofical opening/closing - 但这只是一个好处。这是应该以数组形式输入pytesseract识别的放大示例:https://i.ytimg.com/vi/1ns8tGgdpLY/maxresdefault.jpg
将包含您要识别的文本的图像调整为更高分辨率
Pytesseract 通常应该可以识别任何类型的字母,但是通过安装书写文本的字体,您可以极大地提高准确性。
如何将新字体安装到 pytesseract 中:
获取您想要的 TIFF 格式字体
将其上传到 http://trainyourtesseract.com/ 并将经过训练的数据接收到您的电子邮件中 (编辑:该站点不再存在。此时您必须找到替代字体或训练字体你自己)
添加训练好的数据文件(*.traineddata)到这个文件夹C:\Program Files (x86)\Tesseract-OCR\tessdata
将此字符串命令添加到 pytesseract reconition 函数:
假设您有 2 种经过训练的字体:font1.traineddata 和 font2.traineddata
要同时使用两者,请使用此命令
txt = pytesseract.image_to_string(img, lang='font1+font2')
下面是一个测试你对网络图片识别的代码:
import cv2
import pytesseract
import cv2
import numpy as np
import urllib
import requests
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
TESSDATA_PREFIX = 'C:/Program Files (x86)/Tesseract-OCR'
from PIL import Image
def url_to_image(url):
resp = urllib.request.urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
url='http://jeroen.github.io/images/testocr.png'
img = url_to_image(url)
#img = cv2.GaussianBlur(img,(5,5),0)
img = cv2.medianBlur(img,5)
retval, img = cv2.threshold(img,150,255, cv2.THRESH_BINARY)
txt = pytesseract.image_to_string(img, lang='eng')
print('recognition:', txt)
>>> txt
'This ts a lot of 12 point text to test the\nocr code and see if it works on all types\nof file format\n\nThe quick brown dog jumped over the\nlazy fox The quick brown dog jumped\nover the lazy fox The quick brown dog\njumped over the lazy fox The quick\nbrown dog jumped over the lazy fox'