首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pytesseract增加Textdetection检测

Pytesseract增加Textdetection检测
EN

Stack Overflow用户
提问于 2022-03-28 17:04:01
回答 1查看 80关注 0票数 0

我想让来自以下车辆登记文件的条目自动写入文本文件。

然而,文本的识别是非常困难的。我尝试以不同的配置打开图像。我亦曾测试车辆登记文件的不同颜色。然而,我的任何尝试都没有产生一个有用的结果。

有没有人知道如何正确识别文本?

这是我尝试过的ocr图像:

我使用的代码如下所示:

代码语言:javascript
复制
import cv2
import numpy as np
import pytesseract
import matplotlib.pyplot as plt
from PIL import Image
import regex

pytesseract.pytesseract.tesseract_cmd=r'C:\Program Files\Tesseract-OCR\tesseract.exe'

img = cv2.imread("Fahrzeugscheinsplit1.jpg")

result = pytesseract.image_to_string(img)
print(result)

我的输出如下所示:

代码语言:javascript
复制
|
08.05.2006)'| 8566) ADVOOOO1X
ne r pear
a BORD 7 aoe \
‘BWY i
QUBB1 Repieee ay a f
TRAC |
| = say, |
is Mondeo ath }
FO! s 1
Fz.2.Pers, +b. 8 Spl. .
Kombilimousine
vo) EURO 4
«| BURO 4 ) Re !
» Diesel ES
ll 0002. WW 0d62. l2198 |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-29 15:24:01

首先,您应该了解tesseract的图像处理技术。从正式文件中可以应用简单阈值

如果应用简单的阈值处理,结果将是:

我认为我们应该对图像进行精确的识别。我们可以通过添加边框来对图像进行居中:

如果我们在置信度>30的情况下处理图像,那么图像就可以进行文本提取了:

几乎所有给定输入图像中的文本都被检测到。我们还可以打印检测到的文本的值:

代码语言:javascript
复制
Detected Text: 08.05.2006
Detected Text: 8566!
Detected Text: M1
Detected Text: AC
Detected Text: 8
Detected Text: 6
Detected Text: FORD
Detected Text: BWY
Detected Text: SFHAP7
Detected Text: Mondeo
Detected Text: FORD
Detected Text: (D)
Detected Text: Pz.z.Pers.bef.b.
Detected Text: 8
Detected Text: Spl.
Detected Text: Kombilimousine
Detected Text: EURO
Detected Text: 4
Detected Text: EURO
Detected Text: 4
Detected Text: Diesel
Detected Text: 0002
Detected Text: 0462
Detected Text: 2198

使用简单的阈值处理,我们几乎找到了所有的值,对于缺失的部分,您可以使用诸如降低置信度或提高阈值级别之类的值,或者使用其他阈值方法,如自适应阈值化远距离阈值

代码:

代码语言:javascript
复制
from cv2 import imread, cvtColor, COLOR_BGR2GRAY as GRAY
from cv2 import imshow, waitKey, rectangle, threshold, THRESH_BINARY as BINARY
from cv2 import copyMakeBorder as addBorder, BORDER_CONSTANT as CONSTANT
from pytesseract import image_to_data, Output


bgr = imread("UXvS7.jpg")
gray = cvtColor(bgr, GRAY)
border = addBorder(gray, 50, 50, 50, 50, CONSTANT, value=255)
thresh = threshold(border, 150, 255, BINARY)[1]
data = image_to_data(thresh, output_type=Output.DICT)

for i in range(0, len(data["text"])):
    confidence = int(data["conf"][i])
    if confidence > 30:
        x = data["left"][i]
        y = data["top"][i]
        w = data["width"][i]
        h = data["height"][i]
        text = data["text"][i]
        print(f"Detected Text: {text}")
        rectangle(thresh, (x, y), (x + w, y + h), (0, 255, 0), 2)

imshow("", thresh)
waitKey(0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71651039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档