当前位置: 首页 > article >正文

计算机视觉的应用1-OCR分栏识别:两栏识别三栏识别都可以,本地部署完美拼接

大家好,我是微学AI,今天给大家带来OCR的分栏识别。

一、文本分栏的问题

在OCR识别过程中,遇到文字是两个分栏的情况确实是一个比较常见的问题。通常情况下,OCR引擎会将文本按照从左到右,从上到下的顺序一行一行地识别。这种方式对于单栏或者少量分栏的文本来说是有效的,但是对于两个或者更多分栏的文本来说就有些棘手了。
在这种情况下,OCR引擎往往会将整个文本当作一行来处理,这就导致了分栏信息的丢失。如果直接将整个文本传递给OCR引擎,那么它会试图将所有的文字一起识别,而没有办法分辨哪些文字属于哪个栏目。

二、解决方案

   为了解决这个问题,我们需要首先将文本分成两个栏目,然后再分别进行OCR识别。这个过程可以手动完成,也可以借助一些自动化工具。例如,可以使用图像处理算法来检测出文本中的分栏线,然后将文本按照这些线进行分割。
   一旦将文本分成了两个栏目,就可以对每个栏目进行独立的OCR识别。这样可以保留分栏信息,同时提高识别精度。
   对于三栏或者更多分栏的文本,也可以采用类似的方法进行处理。首先将文本分成多个栏目,然后再对每个栏目进行独立的OCR识别。
   需要注意的是,将文本按照分栏进行切分会增加处理复杂度和运算量,可能会降低处理速度和识别准确率。因此,在实际应用中需要根据具体情况进行权衡和选择。

三、代码实现

import cv2
from paddleocr import PaddleOCR
# 加载OCR引擎
engine = PaddleOCR(enable_mkldnn=True, use_angle_cls=False)

#分两栏识别
def recognize_multicolumn_text2(image_path,left_ratio=0.5):
    # 读取图片
    img = cv2.imread(image_path)
    # 将图片转为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 获取图片的高度和宽度
    height, width = gray.shape

    # 将图片分成左右两栏,分别识别
    left_width = int(width * left_ratio)
    left_img = gray[:, :left_width]
    right_img = gray[:, left_width:]

    titles = []
    left_text=image2text(left_img)
    right_text=image2text(right_img)
    titles.extend(left_text)
    titles.extend(right_text)
    # 将识别出的两栏文字拼接起来
    #result_text = left_text + ' ' + right_text
    for i in titles:
        print(i)
    return titles

#分三栏识别
def recognize_multicolumn_text3(image_path, left_ratio=0.3333, middle_ratio=0.6667):
    # 读取图片
    img = cv2.imread(image_path)
    # 将图片转为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 获取图片的高度和宽度
    height, width = gray.shape

    # 将图片分成三栏,分别识别
    left_width = int(width * left_ratio)
    middle_width = int(width * middle_ratio)
    left_img = gray[:, :left_width]
    middle_img = gray[:, left_width:middle_width]
    right_img = gray[:, middle_width:]

    titles = []
    left_text = image2text(left_img)
    middle_text = image2text(middle_img)
    right_text = image2text(right_img)
    titles.extend(left_text)
    titles.extend(middle_text)
    titles.extend(right_text)

    for i in titles:
        print(i)

    return titles

# 图片OCR转文本信息
def image2text(path):
    result = engine.ocr(path)
    print('识别结果:')
    title= []
    title_append= title.append
    for key in result[0]:
        key[-1] = list(key[-1])
        key[-1][0] = key[-1][0].replace('\n', '')
        title_append(key[-1][0])
    return title

image ='200.jpg'
recognize_multicolumn_text3(image)

代码提供了分栏识别与分三栏识别的函数,可以扩展N栏,根据需求设定。

对于分三栏的问题也一样可以识别:

 识别效果还可以,调用函数之后可以进行批量识别,可以识别PDF,和图库的文件,实现批量识别。

OCR分栏识别是OCR技术的一个应用领域,它可以在处理多列或多块的文本时,将文本分割成段落、行和字符,并对它们进行识别。

OCR分栏识别的主要优势:

1. 能够自动识别并分割多栏文本,从而加快文本提取和理解速度。

2. 可以处理各种类型的文档,如书籍、报纸、表格等。

3. 提高了文本提取和处理的准确性和效率,降低了人工处理的成本。

4. 可以使数字化文件搜索和浏览更加方便。

总之,OCR分栏识别可以将传统的文本处理转换为数字化的自动处理,为企业和个人节省时间和成本,提升效率和准确性。


http://www.kler.cn/a/7217.html

相关文章:

  • 计算机编程中的设计模式及其在简化复杂系统设计中的应用
  • 1 设计模式原则之开闭原则
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
  • 从零入门激光SLAM(二十三)——direct_visual_lidar_calibration全型号激光雷达-相机标定包
  • 【STL】set,multiset,map,multimap的介绍以及使用
  • 蓝桥杯每日真题 - 第15天
  • 从零开始实现一个C++高性能服务器框架----Socket模块
  • 【分享】免梯子的GPT,玩 ChatGPT 的正确姿势
  • 《底层逻辑》读书笔记
  • python的元类
  • IDEA中查看源码点击Download Sources时出现Cannot download sources的问题复现及解决
  • C++ Primer第五版_第十章习题答案(31~40)
  • leetcode53:最大子数组和
  • Kotlin 基础语法
  • 【数据库运维】mysql备份恢复练习
  • 【nnunet】个人数据训练心得
  • STL容器篇之stack和queue
  • 数学建模在大数据与数据挖掘、复杂网络与系统建模方面的应用
  • 如何让 a == 1 a == 2 a == 3 成立
  • iptables防火墙详解
  • Linux系统【Centos7】设置防火墙教程
  • record 替代 lombok, 我觉得不行
  • 58-Map和Set练习-LeetCode692前k个高频单词
  • AIGC之Stable Diffusion 提示词学徒库
  • 「ML 实践篇」回归系统:房价中位数预测
  • 使用机器学习opencv看手相