我正在尝试在python中处理tesseract来做简单的工作: - 打开一张照片 - 运行ocr - 得到字符串 - 获取角色坐标
最后一个是我的痛苦!
这是我的第一个代码:
import tesseract
import glob
import cv2
api = tesseract.TessBaseAPI()
api.SetVariable("tessedit_char_whitelist", "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZéèô%")
api.SetPageSegMode(tesseract.PSM_AUTO)
imagepath = "C:\\Project\\Bob\\"
imagePathList = glob.glob(imagepath + "*.jpg")
for image in imagePathList:
mBuffer=open(imagePathList[10],"rb").read()
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api)
img = cv2.imread(image)
cv2.putText(img,result,(20,20), cv2.FONT_HERSHEY_PLAIN, 1.0,(0,255,0))
cv2.imshow("Original",img)
cv2.waitKey()
由于我的照片有不同的布局,不同的位置有不同的字样,我想为每个字母设置一个方框。
我见过谈论: - api.getBoxText - Hocr
但是没有办法在Python中实现它。
答案 0 :(得分:2)
tesserocr提供了访问几乎所有tesseract API功能的功能。这可能是您想要的example:
from PIL import Image
from tesserocr import PyTessBaseAPI, RIL
image = Image.open('/usr/src/tesseract/testing/phototest.tif')
with PyTessBaseAPI() as api:
api.SetImage(image)
boxes = api.GetComponentImages(RIL.TEXTLINE, True)
print 'Found {} textline image components.'.format(len(boxes))
for i, (im, box, _, _) in enumerate(boxes):
# im is a PIL image object
# box is a dict with x, y, w and h keys
api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
ocrResult = api.GetUTF8Text()
conf = api.MeanTextConf()
print (u"Box[{0}]: x={x}, y={y}, w={w}, h={h}, "
"confidence: {1}, text: {2}").format(i, conf, ocrResult, **box)
您还可以访问其他API方法,例如GetHOCRText
和GetBoxText
等。
但是,现在它只支持* nix系统,尽管用户为successfully compiled it on Windows,并且如果您想尝试一下,则提供二进制文件。
免责声明:tesserocr作者。
答案 1 :(得分:0)
如果Python包装器支持,您可能需要调用GetHOCRText
方法。