import ctypes class OCR(): def __init__(self, DLL_PATH, TESSDATA_PREFIX, lang): self.DLL_PATH = DLL_PATH self.TESSDATA_PREFIX = TESSDATA_PREFIX self.lang = lang self.ready = False if self.do_init(): self.ready = True def do_init(self): self.tesseract = ctypes.cdll.LoadLibrary(self.DLL_PATH) self.tesseract.TessBaseAPICreate.restype = ctypes.c_uint64 self.api = self.tesseract.TessBaseAPICreate() rc = self.tesseract.TessBaseAPIInit3(ctypes.c_uint64(self.api), self.TESSDATA_PREFIX, self.lang) if rc: self.tesseract.TessBaseAPIDelete(ctypes.c_uint64(self.api)) print('Could not initialize tesseract.\n') return False return True def get_text(self, path): if not self.ready: return False self.tesseract.TessBaseAPIProcessPages( ctypes.c_uint64(self.api), path, None, 0, None) self.tesseract.TessBaseAPIGetUTF8Text.restype = ctypes.c_uint64 text_out = self.tesseract.TessBaseAPIGetUTF8Text(ctypes.c_uint64(self.api)) return bytes.decode(ctypes.string_at(text_out)).strip() if __name__ == '__main__': DLL_PATH = "./libtesseract304.dll" TESSDATA_PREFIX = b'./tessdata' lang = b'eng' ocr = OCR(DLL_PATH, TESSDATA_PREFIX, lang) image_file_path = b'test1.png' result = ocr.get_text(image_file_path) print(result)
二值化处理(可根据需要添加):
import cv2 import matplotlib.pyplot as plt img = cv2.imread(r"C:\Users\Desktop\anzm\1.png") img2 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) img2 = cv2.inRange(img2, lowerb=180, upperb=256) plt.subplot(121), plt.imshow(img) # 原始图片 plt.subplot(122), plt.imshow(img2) # 降噪图片 plt.show()
引用./tessdata数据文件夹+./libtesseract304.dll,"image_file_path",image识别
所需文件:tessdata+liblept172+libtesseract304.zip
训练所需工具jTessBoxEditorFX