python中的数字识别(OpenCV和pytesseract)

     2023-04-17     117

关键词:

【中文标题】python中的数字识别(OpenCV和pytesseract)【英文标题】:Digit recognition in python (OpenCV and pytesseract) 【发布时间】:2020-01-21 16:53:49 【问题描述】:

我目前正在尝试从小屏幕截图中检测数字。但是,我发现准确性很差。我一直在使用 OpenCV,图像以 RGB 格式捕获并转换为灰度,然后使用全局值执行阈值处理(我发现自适应效果不太好)。

这是其中一个数字的灰度示例,后面是阈值保持后的图像示例(数字范围为 1-99)。请注意,图像的初始屏幕截图非常小,因此被放大了。

非常感谢任何有关如何使用 OpenCV 或完全不同的系统来提高准确性的建议。下面包含一些代码,该函数是通过屏幕截图的 RGB 数字来传递的。

def getNumber(image):
    image = cv2.resize(image, (0, 0), fx=3, fy=3)
    img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    thresh, image_bin = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY)

    image_final = PIL.Image.fromarray(image_bin)

    txt = pytesseract.image_to_string(
        image_final, config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789')
    return txt

【问题讨论】:

你试过什么?什么不起作用?显示您的代码。请阅读此论坛的帮助部分,了解如何提出好问题。 道歉@fmw42。在底部包含当前函数。 您可以尝试自适应阈值,或者您可以尝试使用一些形态学来尝试关闭白色字母。 【参考方案1】:

这是我可以改进的地方,使用 otsu 阈值比给出任意值更有效地将文本与背景分开。 Tesseract 对白色背景上的黑色文本效果更好,而且我还添加了填充,因为如果字符太靠近边界,则 tesseract 难以识别字符。

这是最终图像 [final_image][1] 并且 pytesseract 设法读取“46”

import cv2,numpy,pytesseract
def getNumber(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    # Otsu Tresholding automatically find best threshold value
    _, binary_image = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
    
    # invert the image if the text is white and background is black
    count_white = numpy.sum(binary_image > 0)
    count_black = numpy.sum(binary_image == 0)
    if count_black > count_white:
        binary_image = 255 - binary_image
        
    # padding
    final_image = cv2.copyMakeBorder(image, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=(255, 255, 255))
    txt = pytesseract.image_to_string(
        final_image, config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789')

    return txt

函数执行为:

>> getNumber(cv2.imread(img_path))

编辑:请注意,您不需要此行:

image_final = PIL.Image.fromarray(image_bin)

因为您可以将 numpy 数组格式的图像(使用 cv2)传递给 pytesseractr,而 Tesseract 的准确度只会下降 35 像素以下的字符(而且更大,35px 高度实际上是最佳高度)所以我没有调整它的大小. [1]:https://i.stack.imgur.com/OaJgQ.png

【讨论】:

谢谢!它使用您的代码成功读取 46,但在测试时未能读取 47。从为 47 生成的最终图像中,我很惊讶它未能读取它。我还可以采取任何其他步骤来提高准确性吗? 您可以尝试重新采样到更大的尺寸。这可能会给你一些回旋的空间来做一些smoothing 或morphology 操作。作为最后的手段,如果您的图像具有相同的字体和相同的大小,您可以尝试template matching 单个数字。 好吧,您的特定字体/大小并不容易,就像其他评论说您可以使用 opencv 侵蚀/扩张形态学操作一样,还可以在对灰度图像进行阈值处理之前对灰度图像应用中值模糊。

使用opencv和python识别数字(代码片段)

使用OpenCV和Python识别数字本文演示如何使用OpenCV和Python识别图像中的数字。在本教程的第一部分,我们将讨论什么是七段显示器,以及我们如何应用计算机视觉和图像处理操作来识别这些类型的数字(不需要机器学习... 查看详情

python,opencv中的光学字符识别(ocropticalcharacterrecognition)

Python,OpenCV中的光学字符识别(OCROpticalCharacterRecognition1.什么是OCR?2.光学字符识别简史3.光学字符识别的应用4.OSD方向和脚本检测5.前处理和后处理的重要性6.OCR工具和API参考这篇博客将介绍什么是光学字符识别OCR࿰... 查看详情

opencv-python实战(番外篇)——利用svm算法识别手写数字(代码片段)

OpenCV-Python实战(番外篇)——利用SVM算法识别手写数字前言使用SVM进行手写数字识别参数C和γ对识别手写数字精确度的影响完整代码相关链接前言支持向量机(SupportVectorMachine,SVM)是一种监督学习技术,它通过根据指定... 查看详情

opencv+数字识别(代码片段)

...且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。以上几种ocr识别比较,最后选择了opencv的方式进行ocr数字识别,下面讲解通过ocr识别的基... 查看详情

opencv——识别印刷体数字

...二值化,噪点的消除等2.识别即通过一些分类器将第一步中的结果进行分类,事实上属于机器学习的一个典型应用 数字识别步骤:1.先处理图像:  转换为灰度值(灰度图较之原始图片,将三个维度的矩阵变成了一个... 查看详情

用opencv定位和识别数字如何识别呢,急求~~~~~~~~~

...erCascade)能够得到一个xml文件,以后就可以用这个xml文件中的数据,就可以从图像上直接标志出交通灯的位置了,位置标志出来了,简单的遍历像素就能知道颜色了。秒数的话和车牌识别是一样的东西。 参考技术B是车牌吗?还... 查看详情

opencv-python实战(番外篇)——利用knn算法识别手写数字(代码片段)

OpenCV-Python实战(番外篇)——利用KNN算法识别手写数字前言手写数字数据集MNIST介绍基准模型——利用KNN算法识别手写数字改进模型1——参数K对识别手写数字精确度的影响改进模型2——训练数据量对识别手写数字精确... 查看详情

python,opencv使用knn来构建手写数字及字母识别ocr(代码片段)

Python,OpenCV使用KNN来构建手写数字及字母识别OCR1.原理1.1手写数字识别1.2字母识别2.源码2.1手写数字OCR2.2字母OCR参考这篇博客将介绍如何借助OpenCV提供的手写数字及字母数据集,来构建训练KNN模型,以进行手写数字及... 查看详情

学习opencv4基于opencv的手写数字识别(代码片段)

本内容分享于课程《OpenCV入门精讲(C++/Python双语教学)》,地址:OpenCV入门精讲(C++/Python双语教学)如果想提升C++的编程水平,可以参考课程:C++进阶学习OpenCV课程中还有... 查看详情

手把手教你使用labviewopencvdnn实现手写数字识别(含源码)(代码片段)

...dons-VIRobotics-opencv_yiku中,如下图所示:Net选版中的函数与python中的函数对比如下:二、TensorFlowpb文件的生成和调用1.TensorFlow2Keras模型(mnist)注:本范例必须使用tensorflow2.x版本如下图所示所示为数据集以及LabVIEW与Python推理和训... 查看详情

Python + OpenCV 人脸识别

】Python+OpenCV人脸识别【英文标题】:Python+OpenCVfacerecognition【发布时间】:2019-08-1001:18:13【问题描述】:我有一个test1.jpg-它是原始图像,包含我们需要找到的面孔。我的test2.jpg是一些要检查的图像。我们需要在test2.jpg中检查来自... 查看详情

使用python,opencv进行卡类型及16位卡号数字的ocr(代码片段)

使用Python,OpenCV进行卡类型及16位卡号数字的OCR1.效果图2.原理2.1OCR-A字体2.2检测过程步骤2.3优化3.源代码参考这篇博客将介绍如何通过OpenCV和Python使用模板匹配执行光学字符识别(OCR)。具体来说,将使用Python+O... 查看详情

opencv——识别手写体数字

...取样本并存储以下代码为截取以上数字并将其存储在矩阵中的过程训练的数据,一般都会是两个矩阵,一个矩阵存放着数据图像,另一个矩阵存放 查看详情

深度学习项目演练:如何使用python和opencv进行人脸识别(代码片段)

本文将和大家一起分享如何使用Python进行人脸识别-在实时实时视频中检测和识别出一个人。在这个深度学习项目中,我们将学习如何使用Python识别实时视频中的人脸。我们将使用pythondlib的面部识别网络构建这个项目。Dlib是... 查看详情

opencv-python:如何识别图像中的粉红色木材?

】opencv-python:如何识别图像中的粉红色木材?【英文标题】:opencv-python:Howrecognizepinkwoodintheimage?【发布时间】:2022-01-0109:44:47【问题描述】:如何识别图片中的粉红色木材?我使用了这个代码,但我没有在图像中找到任何粉红... 查看详情

OpenCV Python FAR/FRR 中的人脸识别

】OpenCVPythonFAR/FRR中的人脸识别【英文标题】:FacerecognitioninOpenCVPythonFAR/FRR【发布时间】:2012-08-2505:04:21【问题描述】:如何在OpenCVPython中进行性能测试来检查;获得识别结果所需的时间数据库测试用例的错误接受/错误拒绝率。... 查看详情

如何使用 OpenCV 进行 OCR 和文本检测识别

...述】:我正在开发一个测试应用程序,以使用GoogleCollab在python中开发一个小型文本检测和识别应用程序。你能建议任何代码示例来实现这一点吗?我的要求是我应该能够使用OpenCV检测和识别图像中的文本。请指教。【问题 查看详情

python|opencv的人脸检测和人类识别

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 查看详情