【发布时间】:2018-04-23 21:51:48
【问题描述】:
所以,从我可以开始..
我正在使用 OCR。该脚本非常适合我的需要。它可以准确地检测单词,这对我来说是可以的。
这是结果:100% 准确率与附加图像。
from PIL import Image
import pyocr.builders
import os
os.putenv("TESSDATA_PREFIX", "C:\\Program Files (x86)\\Tesseract-OCR")
tools = pyocr.get_available_tools()
tool = tools[0]
langs = tool.get_available_languages()
lang = langs[0] #eng
file = "test.png"
txt = tool.image_to_string(Image.open(file), lang=lang, builder=pyocr.builders.TextBuilder())
print(txt + '\n')
'''
word = ['SHINE','ON','YOU','CRAZY','DIAMOND','SYD']
if word[2] in txt:
print("## WORD IN LIST ##")
else:
print("## NOT IN LIST ##")'''
现在的问题是:如何从图像中删除存在于输出 OCR 列表中的单词(在名为 txt 的代码中)?
我的意思是,如果 SHINE 这个词作为输出存在于控制台(和列表中),我如何在图像中删除它?或者,如果不删除,请创建一个蒙版以便我可以隐藏它...
我认为 ocr 通过选择文本区域并在文本周围创建边界框来工作。在这种情况下,如何删除(甚至显示)这个 ROI/边界框?
在pyocr 文档中有一些关于此功能的提示(显示边界框),但我不知道如何使用它。
感谢任何帮助/提示。
谢谢
编辑:这段代码显示每个字符的边界框
import csv
import cv2
from pytesseract import pytesseract as pt
pt.run_tesseract('test.png', 'output', lang=None, boxes=True, config="hocr")
# To read the coordinates
boxes = []
with open('output.box', 'rt') as f:
reader = csv.reader(f, delimiter = ' ')
for row in reader:
if len(row) == 6:
boxes.append(row)
# Draw the bounding box
img = cv2.imread('test.png')
h, w, _ = img.shape
for b in boxes:
img = cv2.rectangle(img,(int(b[1]),h-int(b[2])),(int(b[3]),h-int(b[4])),(255,0,0),2)
cv2.imshow('output', img)
cv2.waitKey(0)
如何告诉它只显示第一个(整个)单词?
【问题讨论】:
-
通过检查边界框的距离(可能是你设置的
<= fixed_threshold)来确定哪个在word中或检测哪个字符在序列中。 -
@Link 我运行此代码并收到以下错误 \ TypeError: run_tesseract() got an unexpected keyword argument 'boxes' Process finished with exit code 1 –,如何解决?
-
你可以用白色填充框
cv2.rectangle(img,(int(b[1]),h-int(b[2])),(int(b[3]),h-int(b[4])),(255, 255,255),-1)
标签: python opencv ocr tesseract bounding-box