Python - 深度学习系列24 - 使用cnocr进行汉字OCR3

本文探讨了使用cnocr库进行文字识别的问题,发现该库适合识别单行文字,而非文字块。作者通过实验展示了如何将图片转换为适合cnocr识别的格式,并成功识别一行文字。接下来的任务包括从大图片中分割内容区域,将文字块转化为文字行,然后将这些行交给cnocr识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

顺着上一篇的思路继续往下走,一方面往实现需求的角度走,看还需要做些什么。另一方面顺带把对图片的处理按PM方式重新梳理起来,不想以后再从0回忆了。

内容

1 思路

之前发现如果把原始图片给cnocr识别时,抠图部分就错了。一个简单的逻辑:

  • 1 抠图 - > 形成文字块
  • 2 文字块识别 -> 一段文字

于是我截一段话:

在这里插入图片描述

1 文字块识别

调用程序后,我发现对于文本块的图像切割还是混乱的

在这里插入图片描述

所以cnocr不能直接接受文字块。我猜测cnocr在做的时候就是针对单行的,并且做了对图片的翻转、扭曲等一系列预处理。再加上cv2图片的坐标格式和Image本身就是反着的,所以有问题。

2 文字行识别

看看对单行的识别

我手工截了一行进行识别
在这里插入图片描述

python可以读取图片的包有好几个,很多机器学习的包也都带了图片的读取,甚至一些预处理。以下约定:
- 图片IO: 使用PIL的Image
- 矩阵形态的处理: numpy

截图我保存为test2_1_of_10.png, 要展示截图时要转为RGB, 因为PNG有个透明通道,PIL不知道咋处理。

from PIL import Image

# 文件方式
with open('test2_1_of_10.png','rb') as f:
    pic1 = Image.open(f)
    pic1 = pic1.convert("RGB")
    pic1.show()

# 流方式(Reference)
#import base64
#import io
#raw_str = 'SOME_BASE64_STR'
#raw_str_bin = base64.b64decode(raw_str)
#pic = Image.open(io.BytesIO(raw_str_bin)

# 图片转矩阵
pic1_arr = np.asarray(pic1)

# 矩阵转图片
#  pic1= Image.fromarray(pic1_arr)

pic1_arr.shape
(43, 644, 3)

ocr_res = cn_ocr.ocr(pic1_arr)

''.join(sum(ocr_res,[]))

'中共—大会址最初为—大代表李汉俊之兄李'

看起来还不错哟,基本上都识别出来了。当然把识别成-是可以原谅的。

总结一下,cnocr可以识别文字行。

那么问题就转换为:

  • 1 从大图片里分离内容区域
  • 2 识别其中的文字块
  • 3 文字块转为文字行
  • 4 把文字行交给cnocr

所以接下来,我们来搞一个文字块转文字行的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值