gpt4 book ai didi

python - OpenCV:为 OCR 隔离车牌字符

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:57 24 4
gpt4 key购买 nike

我正在尝试自动读取车牌。我已经训练了一个 OpenCV Haar Cascade 分类器来隔离源图像中的车牌以取得合理的成功。这是一个示例(注意黑色边界矩形)。 Haar cascade classifier在此之后,我尝试清理以下任一项的车牌:

  • 分离单个字符以通过 SVM 进行分类。
  • 将清理后的车牌连同有效字符的白名单一起提供给 Tesseract OCR。

为了清理盘子,我执行了以下转换:

# Assuming 'plate' is a sub-image featuring the isolated license plate
height, width = plate.shape
# Enlarge the license plate
cleaned = cv2.resize(plate, (width*3,height*3))
# Perform an adaptive threshold
cleaned = cv2.adaptiveThreshold(cleaned ,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,7)
# Remove any residual noise with an elliptical transform
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_CLOSE, kernel)

我的目标是将字符隔离为黑色,将背景隔离为白色,同时去除任何噪音。

使用这种方法,我发现我通常会得到以下三种结果之一:

图像太吵了。

Noisy

删除太多(字符脱节)。

Blotchy

合理(所有字符隔离且一致)。

Okay

I've included the original images and cropped plates in this album.

我意识到由于车牌的不一致性质,我可能需要一种更动态的清理方法,但我不确定从哪里开始。我试过使用阈值和形态函数的参数,但这通常只会导致对一张图像的过度调整。

如何改进我的清理功能?

最佳答案

您尝试做的事情非常具有挑战性,您展示的示例仍然属于简单的示例。

首先,重要的是要对主角区域进行良好的定界。

对于垂直分隔,尝试找到用作分隔符的水平白线。对于更困难的情况,例如“太嘈杂”,您可以沿水平线计算统计数据,例如白色和黑色运行的分布 - 计数、平均长度、长度偏差 - 并找到真实字符和行之间的区分参数额外的功能(顺便说一句,这将隐式检测白线)。

这样做,您将获得由相同类型的行组成的矩形,这些矩形可能会不小心被碎片化。尝试合并看似属于真实人物的矩形。下一步的处理将仅限于这个矩形。

对于垂直分隔,事情并不那么容易,因为您会看到字符被分割以便垂直线可以穿过它们的情况,以及不同字符被污垢或其他杂乱连接的情况。 (在一些糟糕的情况下,角色可能会接触到一个扩展区域。)

通过与上述类似的技术,找到候选垂直线。现在,除了形成几个假设并列举这些分隔符的可能组合外,您别无选择,受字符具有最小间距(在它们的轴之间)这一事实的限制。

形成这些假设后,您可以通过执行字符识别和计算总分来确定最佳组合。 (在这个阶段,我认为在不知道字符的可能形状的情况下进行分割是不可能的,这就是识别发挥作用的原因。)

关于python - OpenCV:为 OCR 隔离车牌字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com