gpt4 book ai didi

python - 如何在 python 中将 OpenCV 图像传递给 Tesseract?

转载 作者:太空狗 更新时间:2023-10-30 00:29:35 25 4
gpt4 key购买 nike

给定调用 Tesseract 的 C API 并使用 ctypes 库的 Python 代码,Option #1 图像正在由 Tesseract 加载并且工作正常!问题出在选项#2,当我尝试传递由 OpenCV 加载的图像时,T​​esseract 返回垃圾:

from ctypes import *
import cv2

class API(Structure):
_fields_ = []

lang = "eng"
ts = cdll.LoadLibrary("c:/Tesseract-OCR/libtesseract302.dll")
ts.TessBaseAPICreate.restype = POINTER(API)
api = ts.TessBaseAPICreate()
rc = ts.TessBaseAPIInit3(api, 'c:/Tesseract-OCR/', lang)

##### Option #1
out = ts.TessBaseAPIProcessPages(api, 'c:/Tesseract-OCR/doc/eurotext.tif', None, 0)
print 'Option #1 => ' + string_at(out)

##### Option #2
#TESS_API void TESS_CALL TessBaseAPISetImage(TessBaseAPI* handle, const unsigned char* imagedata, int width, int height,
# int bytes_per_pixel, int bytes_per_line);

im = cv2.imread('c:/Temp/Downloads/test-slim/eurotext.jpg', cv2.COLOR_BGR2GRAY)
c_ubyte_p = POINTER(c_ubyte)
##ts.TessBaseAPISetImage.argtypes = [POINTER(API), c_ubyte_p, c_int, c_int, c_int, c_int]
ts.TessBaseAPISetImage(api, im.ctypes.data_as(c_ubyte_p), 800, 1024, 3, 800 * 3)
out = ts.TessBaseAPIGetUTF8Text(api)
print 'Option #2 => ' + string_at(out)

输出如下:

Option #1 => The (quick) [brown] {fox} jumps! Over the $43,456.78 #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam. Der ,,schnelle� braune Fuchs springt �ber den faulen Hund. Le renard brun «rapide» saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marrén répido salta sobre el perro perezoso. A raposa marrom rzipida salta sobre o c�o preguicoso.

Option #2 => 7?:5:*:>\—‘- ;2—;i3E:?:;i3".i: ii‘; 3;’ f-ié%:::’::;?:=«’:: =£<:7‘i§5.< :—'\—;:=é:’—..=.:a,';2’:3‘:3_3:l.':—‘:—:£€:-_’:§3;;%§%ai5~«:é::3%ia»€E:

备注:

  • 我尝试了 python-tesseract 和 tightocr 库,它们都很好
    足够了,但缺少文档
  • 这里我使用 opencv.imread 以便有可能应用数学矩阵算法

关于如何将 OpenCV 图像(即 numpy.ndarray)传递给 Tesseract 的任何想法?任何帮助都会很有用。

最佳答案

我在 python 3 中使用它:(bw_img 是一个 numpy.ndarray)

import numpy as np
import cv2
from PIL import Image
import pytesseract

...

(thresh, bw_img) = cv2.threshold(bw_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
...

img = Image.fromarray(bw_img)
txt = pytesseract.image_to_string(img)
print(txt)

关于python - 如何在 python 中将 OpenCV 图像传递给 Tesseract?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com