如何使用OCR从数字秤上识别数字?

问题描述 投票:0回答:1

我需要从数字秤中提取十进制数字,我能够生成掩模图像,但无法从中提取数字。

import cv2
import numpy as np
import pytesseract

# Load the image
img = cv2.imread("input.png")

# Color-segmentation to get binary mask
lwr = np.array([43, 0, 71])
upr = np.array([103, 255, 130])
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
msk = cv2.inRange(hsv, lwr, upr)
cv2.imwrite("/Users/ahx/Desktop/msk.png", msk)

# Extract digits
krn = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
dlt = cv2.dilate(msk, krn, iterations=5)
res = 255 - cv2.bitwise_and(dlt, msk)
cv2.imwrite("/Users/ahx/Desktop/res.png", res)

# Displaying digits and OCR
txt = pytesseract.image_to_string(res, config="--psm 6 digits")
print(''.join(t for t in txt if t.isalnum()))
cv2.imshow("res", res)
cv2.waitKey(0)

输入图片

输出图像

任何人都可以帮忙我如何打印输出(掩模)图像的结果吗?

python-3.x opencv ocr tesseract python-tesseract
1个回答
0
投票

这个问题可能没有明确的答案,因为有不同的方法来解决这个问题。如果您不关心延迟/成本,多模式法学硕士可能是当今最简单的方法。

几年前我也遇到过类似的问题,在我的数据集上,OpenCV 方法根本运行得不够好。 (请参阅下面分享的文章)

我最终训练了一个对象检测模型,该模型首先检测显示器的位置,然后在裁剪后的图像上检测数字。我的问题更复杂,因为我希望它是旋转不变的,这对于 7 段显示数字来说尤其棘手。

包含初步探索的详细文章以及我最终使用的或多或少的算法: https://agrbin.github.io/snapscale-article/

自从这篇文章以来,我训练了更多的模型,这些模型更精确、更快。最终的推理时间是几十毫秒。生产化模型可以从 iOS 应用程序运行:https://snapscale.life/

我使用该应用程序扫描了问题中的输入图像,并实时得到了预期结果“29.9”。

© www.soinside.com 2019 - 2024. All rights reserved.