简单数字识别 python+tesseract-ocr

简单数字识别 python+tesseract-ocr

  • 需求
    实现一个简单数字图片识别功能,并在PC端跑起来
  • 场景
    相机拍照数据图片,程序识别出图片上简单数据并返回
  • 工具
    pycharm
  • 环境
    python3.7 + tesseract-ocr 5.0
  • 依赖
    matplotlib3.1.2
    numpy
    1.17.4
    opencv-python4.1.2.30
    Pillow
    6.2.1
    pyparsing2.4.5
    pytesseract
    0.3.1
    python-dateutil2.8.1
    PyInstaller
    3.5
  • 识别原理
    使用python 调用pytesseract 通过tesseract-ocr实现简单数字图片的识别。
    opencv-python:图像处理的库
    pytesseract:从图像中提取数字的库
  • 步骤
    1.加载图片
rawImage = cv2.imread(image)

2.灰度

gray = cv2.cvtColor(rawImage, cv2.COLOR_BGR2GRAY)

在使用tesseract-ocr做图片识别时需要白底黑字,如果是黑底白字的话需要做像素转换,代码如下

        rawImage = cv2.imread(image)
        height, width, deep = rawImage.shape
        gray = cv2.cvtColor(rawImage, cv2.COLOR_BGR2GRAY)
        dst = np.zeros((height, width, 1), np.uint8)
        for i in range(0, height):
            for j in range(0, width):
                grayPixel = gray[i, j]
                dst[i, j] = 255 - grayPixel

3.二值化

ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

4.识别
在图片处理效果比较理想的状态下使用如下识别参数,可以识别出简单数字

string = pytesseract.image_to_string(binary, lang='eng', config='--psm 6 --oem 3 -c '
                                                                'tessedit_char_whitelist'
                                                                '=0123456789')

在图片处理效果不是很理想的状态下,使用上边参数会出现识别不了的问题,为了使需求能进行下去,使用识别输出为字母和数字。做错误规避。

string = pytesseract.image_to_string(binary, lang="eng", config="--psm 7")

规避方式:

        rep = {
            'I': '1', 'L': '1', '|': '1',
            'A': '4'
        }
  • 打包
    PyInstaller:可使用Pyinstaller打包python程序为exe可执行文件
    pycharm 打开终端 Pyinstaller -F **.py
    简单数字识别 python+tesseract-ocr_第1张图片
    在这里插入图片描述
    生成的exe文件在有python 和tesseract-ocr环境中可以正常运行。
  • 测试
    图片
    简单数字识别 python+tesseract-ocr_第2张图片
    结果:
    在这里插入图片描述
    DEMO 而已

你可能感兴趣的:(工作余孽,图像识别)