Pytesseract 只从图像中获取文本的一部分
Pytesseract only gets a part of a text from the image
我正在尝试使用 pytesseract
检测此图像中的文本:
具体来说,我更关心检测正在进行的商业中断。我使用以下代码实现了这一点:
from PIL import Image
import pytesseract
print(pytesseract.image_to_string(Image.open('/home/me/Desktop/dataset/my-dataset/Apex-Legends/loustreams_001.jpg')))
然而,returns:
nercial break in progress
我知道我不应该期望从一行代码中得到 SoTA 结果,但文本非常明显。我该如何改进?
您可以使用 image_to_data
获取“正在进行的商业广告”字符串。
将图像转换为 rgb
将输出作为字典
如果检测到的文本超过阈值置信度,则显示。
代码:
import cv2
from pytesseract import *
img = cv2.imread("6cNav.jpg")
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
res = image_to_data(rgb, output_type=Output.DICT)
out_txt = ""
for i in range(0, len(res["text"])):
x = res["left"][i]
y = res["top"][i]
w = res["width"][i]
h = res["height"][i]
txt = res["text"][i]
cnf = int(res["conf"][i])
if cnf > 95:
text = "".join(txt).strip()
cv2.rectangle(img,
(x, y),
(x + w, y + h),
(0, 0, 255), 2)
cv2.putText(img,
text,
(x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX,
1.2, (0, 255, 255), 3)
out_txt += " " + text
print(out_txt)
cv2.imshow("img", img)
cv2.waitKey(0)
输出:
Commercial break in progress
请注意我的pytesseract
版本是4.1.1
更新代码
以上所有图片,您可以申请adaptive-threshold
- (第1图和第3图也和上面类似)
结果将是:
output 1:
Commercial loreak in progress
output 2:
Commercial break in progress
output 3:
Commercial break in progress
代码:
import cv2
import pytesseract
img1 = cv2.imread("6cNav.jpg")
img2 = cv2.imread("IKHKa.jpg")
img3 = cv2.imread("VTJse.jpg")
img_lst = [img1, img2, img3]
for i, img in enumerate(img_lst):
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 11, 2)
res = pytesseract.image_to_string(thr, config="--psm 6")
print("output {}:".format(i+1))
print(res)
我正在尝试使用 pytesseract
检测此图像中的文本:
具体来说,我更关心检测正在进行的商业中断。我使用以下代码实现了这一点:
from PIL import Image
import pytesseract
print(pytesseract.image_to_string(Image.open('/home/me/Desktop/dataset/my-dataset/Apex-Legends/loustreams_001.jpg')))
然而,returns:
nercial break in progress
我知道我不应该期望从一行代码中得到 SoTA 结果,但文本非常明显。我该如何改进?
您可以使用 image_to_data
获取“正在进行的商业广告”字符串。
将图像转换为 rgb
将输出作为字典
如果检测到的文本超过阈值置信度,则显示。
代码:
import cv2
from pytesseract import *
img = cv2.imread("6cNav.jpg")
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
res = image_to_data(rgb, output_type=Output.DICT)
out_txt = ""
for i in range(0, len(res["text"])):
x = res["left"][i]
y = res["top"][i]
w = res["width"][i]
h = res["height"][i]
txt = res["text"][i]
cnf = int(res["conf"][i])
if cnf > 95:
text = "".join(txt).strip()
cv2.rectangle(img,
(x, y),
(x + w, y + h),
(0, 0, 255), 2)
cv2.putText(img,
text,
(x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX,
1.2, (0, 255, 255), 3)
out_txt += " " + text
print(out_txt)
cv2.imshow("img", img)
cv2.waitKey(0)
输出:
Commercial break in progress
请注意我的pytesseract
版本是4.1.1
更新代码
以上所有图片,您可以申请adaptive-threshold
- (第1图和第3图也和上面类似)
结果将是:
output 1:
Commercial loreak in progress
output 2:
Commercial break in progress
output 3:
Commercial break in progress
代码:
import cv2
import pytesseract
img1 = cv2.imread("6cNav.jpg")
img2 = cv2.imread("IKHKa.jpg")
img3 = cv2.imread("VTJse.jpg")
img_lst = [img1, img2, img3]
for i, img in enumerate(img_lst):
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 11, 2)
res = pytesseract.image_to_string(thr, config="--psm 6")
print("output {}:".format(i+1))
print(res)