图像处理——以支票识别为例

这篇具有很好参考价值的文章主要介绍了图像处理——以支票识别为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  用到环境
1、pycharm community edition 2022.3.2
2、Python 3.10
后续应该会在资源上传项目,需要的话可以私信我。

流程

图像处理——以支票识别为例

图1 扩展实验“金额识别”流程图

正文

  1. 导入 cv2、pytesseract、re 和 locale 模块。

  2. 使用 cv2.imread() 函数加载名为 cheque.jpg 的支票图像,然后使用 cv2.cvtColor() 函数将其转换为灰度图像并显示在窗口中。程序会等待用户按下键盘后继续执行。

  3. 根据实验一图像增强所学,使用 cv2.equalizeHist() 函数对灰度图像进行直方图均衡化,以提高对比度,增强金额提取效果,并将结果显示在窗口中。程序会等待用户按下键盘后继续执行。

  4. 设置 Tesseract 可执行文件的路径,以便后面使用 OCR 引擎识别文本。
      OCR (Optical Character Recognition) 的调用通常会使用卷积神经网络(Convolutional Neural Network, CNN)提取输入图像中的字符或文字特征。CNN 模型由多层卷积层、池化层以及全连接层OCR 的调用中有一种常见的技术叫做金字塔模型(Pyramid Model),它可以提高 OCR 的识别率。
      OCR技术也运用了金字塔模型。在 OCR 中,金字塔模型通常被用来处理输入图像的不同尺度,以便在不同尺度下检测和识别字符或文字。这是因为在实际应用中,输入图像的大小和分辨率可能会有很大差异,而字符或文字的大小也会有很大变化。如果只在单一尺度下进行 OCR,那么就很难同时兼顾识别准确率和效率。使用金字塔模型可以将输入图像缩小到多个尺度,然后在每个尺度上进行 OCR 处理,最后将结果合并起来得到最终的识别结果。组成,其中卷积层用于提取特征,池化层则用于减小特征图的尺寸和数量。

  5. 使用 pytesseract.image_to_string() 函数调用 OCR 引擎(Tesseract)来识别灰度图像中的文本,并将结果存储在变量 text 中。

  6. 正则化金额匹配:

  • 定义数字词典 numbers 和单位词典 units,用于后面将金额实体中的单词转换成相应的数字。
  • 使用正则表达式 re.search() 在变量 text 中寻找第一个匹配“单词”的字符串,并将其转换为小写并赋值给 amount_text 变量;如果没有找到,则输出 “No amount found.”。
  • 使用 for 循环,将 amount_text 中出现的数字单词替换为相应的阿拉伯数字,并将单位单词替换为相应的因子。替换使用了 re.sub() 函数和正则表达式。
  • 使用 re.search() 函数再次查找 amount_text 中的数字部分,并将其转换为浮点数类型。如果没有找到,则输出 “No amount found.”。
  • 使用 while 循环,查找 amount_text 中的单位单词,并将其转换为因子。每次循环将当前数字与单位相乘,并将相应的单位单词从 amount_text 中删除,直至没有单位单词了。
  • 使用 locale.currency() 函数将 amount_number 转换为格式化的货币字符串。在这个函数中,grouping=True 表示启用千位分隔符,symbol=‘CNY’ 则表示指定货币符号为 CNY。
  • 输出格式化后的货币字符串。

结果展示

图像处理——以支票识别为例

图2 原图

图像处理——以支票识别为例

图3 直方图均衡化后

分析:直方图均衡化后可以很好的增强图像,使得被提取金额更突出,利于后续OCR提取和金额提取。
图像处理——以支票识别为例

图四 金额提取结果

分析:可以发现实验例图识别结果还不错,其原因主要基于三点,一是直接用OCR检测到右标的准确的数字,但是有时这个数字不明显,这时就可以利用中文大写,如图中“壹仟万元整”,或者利用字幕“一千万元”进行金额提取。基于此在算法设计时充分考虑上述三种情况,进行中文与阿拉伯数字的转换,单位如“千万”与阿拉伯数字的转换,取得了不错的效果。
图像处理——以支票识别为例
图像处理——以支票识别为例

图五 其他图片识别结果

分析:发现识别结果很好。

代码:
import cv2
import pytesseract
import re
import locale

# 加载支票图像并将其转换为灰度图像
image = cv2.imread('cheque.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('origin Image', gray)
# 等待用户按下键盘
cv2.waitKey(0)

#
# # 直方图均衡化  提高对比度
# gray = cv2.equalizeHist(gray)
# cv2.imshow('hist Image', gray)
# # 等待用户按下键盘
# cv2.waitKey(0)


# 设置Tesseract可执行文件的路径
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"


# 使用OCR引擎(例如Tesseract)来识别文本
text = pytesseract.image_to_string(gray, lang='eng', config='--psm 6')
print(text)

# 金额匹配

# 设置货币格式
locale.setlocale(locale.LC_ALL, '')

# 数字词典
numbers = {
    'zero': 0,
    'one': 1,
    'two': 2,
    'three': 3,
    'four': 4,
    'five': 5,
    'six': 6,
    'seven': 7,
    'eight': 8,
    'nine': 9,
    'ten': 10,
    'eleven': 11,
    'twelve': 12,
    'thirteen': 13,
    'fourteen': 14,
    'fifteen': 15,
    'sixteen': 16,
    'seventeen': 17,
    'eighteen': 18,
    'nineteen': 19,
    'twenty': 20,
    'thirty': 30,
    'forty': 40,
    'fifty': 50,
    'sixty': 60,
    'seventy': 70,
    'eighty': 80,
    'ninety': 90
}

# 单位词典
units = {
    'hundred': 100,
    'thousand': 1000,
    'million': 1000000,
    'billion': 1000000000
}

# 匹配金额实体
match = re.search(r'\b(\w+\s*)+\b', text)
if match:
    amount_text = match.group().lower()

    # 替换数字单词为阿拉伯数字
    for word, digit in numbers.items():
        amount_text = amount_text.replace(word, str(digit))

    # 替换单位单词为相应的数字
    for unit, factor in units.items():
        pattern1 = r'(?<!\d)one\s+{}\b'.format(unit)
        repl1 = lambda m: str(factor)
        amount_text = re.sub(pattern1, repl1, amount_text)

        pattern2 = r'\b(\d+)\s*{}\b'.format(unit)
        repl2 = lambda m: str(int(m.group(1)) * factor)
        amount_text = re.sub(pattern2, repl2, amount_text)

    # 提取金额数字部分
    match_number = re.search(r'\b\d+(?:\.\d+)?\b', amount_text)
    if match_number:
        amount_number = float(match_number.group())

        # 将数字与单位相乘
        match_unit = re.search(r'(hundred|thousand|million|billion)', amount_text)
        while match_unit:
            factor = units[match_unit.group()]
            amount_number *= factor
            amount_text = re.sub(match_unit.group(), '', amount_text)
            match_unit = re.search(r'(hundred|thousand|million|billion)', amount_text)

        # 输出格式化货币字符串
        formatted_amount = locale.currency(amount_number, grouping=True, symbol='CNY')
        print('Amount:', formatted_amount)
    else:
        print('No amount found.')
else:
    print('No amount found.')

编写不易,求个点赞!!!!!!!
“你是谁?”

“一个看帖子的人。”

“看帖子不点赞啊?”

“你点赞吗?”

“当然点了。”

“我也会点。”

“谁会把经验写在帖子里。”

“写在帖子里的那能叫经验贴?”

“上流!”
cheer!!!

图像处理——以支票识别为例文章来源地址https://www.toymoban.com/news/detail-496036.html

到了这里,关于图像处理——以支票识别为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理】植物叶识别和分类

            这是国外某个学生团队尝试用机器学习方法对植物叶进行识别分类的实验。实验给出若干张植物叶图片,针对这些图片,对特征进行测量、提取、重组,最后用机器学习方法实现;该具备一定的参考价值。         现在是我们将图像处理学习应用于实际机器学

    2024年02月08日
    浏览(24)
  • 数字图像处理——实验五 基于图像分割的车牌定位识别

    (1)掌握车牌阈值分割; (2)掌握基于形态学计算的图像分割; (3)掌握图像的二值化; (4)掌握基于像素投影的字符分割; (5)掌握字符识别原理。 (1)计算机; (2)Python 3.x及PyCharm软件; (3)需进行车牌识别的图片。 注: opencv-python 使用的是3.x 版本 (1) 图像灰

    2024年02月08日
    浏览(37)
  • 传统图像处理之目标检测——人脸识别

    代码实战:人脸识别 xml文件是已经训练好的脸部特征和参数 杨幂的这个效果不错  詹姆斯怎么手环也被识别了?  

    2024年02月13日
    浏览(28)
  • 数字图像处理中的车牌识别

    车牌识别是一种通过计算机视觉技术和图像处理技术来识别车辆车牌号码的技术。它可以通过摄像头捕捉车辆的图像,对图像进行处理和分析,从而自动识别车辆的车牌号码。这项技术在交通管理、安防、停车场管理等领域都有广泛的应用。近年来,随着人工智能技术的发展

    2024年02月13日
    浏览(30)
  • OpenCV图像处理——停车场车位识别

    图像处理总目录←点击这里 唐宇迪老师的——OPENCV项目实战 学习 本项目的目的是设计一个停车场车位识别的系统,能够判断出当前停车场中哪些车位是空的。 任务共包含部分: 对图像预处理 从停车场的监控视频中提取图片 对图片进行一系列的预处理,去噪、识别图像中的

    2024年02月13日
    浏览(35)
  • Python实现简单的图像识别与处理

    本文将介绍Python实现简单的图像识别与处理,包括图像的读取、显示、存储、转换为数组、灰度化、二值化、滤波、边缘检测、形态学处理、轮廓检测和图像识别。 一、图像读取、显示和存储 Python的OpenCV库提供了完整的图像处理功能,可以进行图像的读取、显示和存储。以

    2024年02月06日
    浏览(30)
  • FPGA|数字图像处理实现口罩识别——二值化

    【写在前面】刚入门小菜鸟,记录一下口罩识别学习过程。参考文件和网址会在文末注明。有错误欢迎指出,也欢迎进行补充~ 原理图如下,二值化对应为红框里的部分 使用的二值化方法是 手动指定一个 阈值 ,通过阈值来进行二值化处理 。(还有一种方法是一个自适应阈值

    2023年04月11日
    浏览(37)
  • 数字图像处理之matlab大作业:车牌识别

    1、基于模板的车牌识别,带GUI GitHub - joeyos/LicensePlateRecognition: License plate recognition 2、基于模板的车牌识别,注释详细 https://github.com/hangxyz/License-Plate-Recognition-by-MATLAB 3、其他优秀作品 1)董同学:带语音播报的车牌识别 车牌识别-基于模板匹配_勇敢歪歪的博客-CSDN博客_车牌识

    2024年02月08日
    浏览(34)
  • 6 图像处理实现螺纹识别案例(matlab程序)

      2. 代码 clear;clc;close all I=imread(\\\'luowen1.bmp\\\');   %读取螺纹图片 try     I=rgb2gray(I);         %如果是RGB图,则转换成灰度图 catch end figure imshow(I) title(\\\'原图(半边螺纹)\\\') for K=1:15     I=wiener2(I,[5 5]);   %通过滤波15次把多余点滤除 end [m,n]=size(I); I=edge(I,\\\'canny\\\');       %通过边缘检测

    2024年02月12日
    浏览(33)
  • 【图像处理】基于MATLAB的RGB车牌识别

    目录 基于MATLAB的RGB车牌识别 基于MATLAB的RGB车牌识别通常可以分为以下步骤: 读入待处理图像,将RGB图像转换为HSV图像; 提取HSV图像中的Hue和Saturation通道; 利用颜色索引表的方式对提取出的Hue和Saturation进行阈值分割,得到二值化图像; 对二值化图像进行形态学操作,实现

    2023年04月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包