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

举报
微学AI 发表于 2025/09/15 16:24:21 2025/09/15
【摘要】 大家好啊,我是微学AI,今天给大家带来OCR的分栏识别。OCR(光学字符识别)技术在现代信息处理领域中扮演着重要角色,尤其是在处理多栏文本时,OCR分栏识别技术的应用更是显得尤为重要。以下是对OCR分栏识别技术的深入探讨。

大家好啊,我是微学AI,今天给大家带来OCR的分栏识别。OCR(光学字符识别)技术在现代信息处理领域中扮演着重要角色,尤其是在处理多栏文本时,OCR分栏识别技术的应用更是显得尤为重要。以下是对OCR分栏识别技术的深入探讨。

一、文本分栏的问题

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

image.png

二、解决方案

为了解决这个问题,我们需要首先将文本分成两个栏目,然后再分别进行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栏,根据需求设定。

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

识别效果还可以,调用函数之后可以进行批量识别,可以识别PDF,和图库的文件,实现批量识别。OCR分栏识别是OCR技术的一个应用领域,它可以在处理多列或多块的文本时,将文本分割成段落、行和字符,并对它们进行识别。

四、OCR分栏识别的技术原理

OCR分栏识别技术的核心在于能够自动检测和分割文档中的多栏文本结构。其基本流程包括:

  1. 图像预处理:对输入的图像进行去噪、二值化、倾斜校正等处理,以提高后续识别的准确性。

  2. 版面分析:通过分析图像中的布局结构,识别出文本块、图像块、表格等不同的区域。对于多栏文本,版面分析尤为重要,因为它需要准确地识别出每一栏的起始和结束位置。

  3. 文本分割:将识别出的文本块进一步分割成行和字符。对于多栏文本,分割算法需要能够处理复杂的文本流动情况。

  4. 字符识别:使用训练好的OCR模型对分割出的字符进行识别,生成对应的文本输出。

  5. 后处理:对识别出的文本进行拼写检查、格式修正等处理,以提高最终输出的质量。

五、OCR分栏识别的应用场景

  1. 数字化档案管理:在档案数字化过程中,OCR分栏识别可以快速处理大量的纸质文档,将其转换为可搜索的电子文本,方便后续的存档和检索。
  2. 报纸和杂志的数字化:报纸和杂志通常采用多栏排版,OCR分栏识别技术可以高效地将这些文档转换为电子格式,便于在线发布和阅读。
  3. 表格数据提取:在财务报表、调查问卷等表格数据处理中,OCR分栏识别可以自动提取表格中的数据,减少人工录入的工作量。
  4. 学术文献的数字化:对于学术期刊和论文,OCR分栏识别可以帮助研究人员快速获取文献中的关键信息,提高研究效率。

六、 OCR分栏识别的优势

高效性:自动化的分栏识别大大提高了文本处理的速度,尤其是在处理大批量文档时,效率优势更加明显。
准确性:通过先进的图像处理和机器学习算法,OCR分栏识别能够在复杂的版面结构中准确提取文本,减少识别错误。
灵活性:OCR分栏识别技术可以适应不同类型的文档格式,无论是书籍、报纸还是表格,都能有效处理。
成本节约:通过减少人工干预,OCR分栏识别降低了文本处理的成本,为企业和个人节省了大量的时间和资源。

实时处理能力:在移动设备和云端实现实时的OCR分栏识别,满足即时信息获取的需求。

多语言支持:扩展对多种语言和字符集的支持,满足全球化的信息处理需求。

智能化的版面分析:通过引入自然语言处理技术,实现对文档内容的智能理解和分析。

总之,OCR分栏识别技术在信息化时代具有广泛的应用前景,它不仅提高了文本处理的效率和准确性,还为信息的数字化和智能化处理提供了有力支持。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。