轻松实现高精度中文OCR识别,开源神器大揭秘

2025-10-15 20:25:04

CNOCR 学习目录

1. CNOCR 简介与安装

1.1 什么是 CNOCR?

CNOCR 是一个基于深度学习的开源中文 OCR 工具,专门用于识别图像中的中文文本。它由 Breezedeus 开发,旨在为中文文本识别提供一个简单易用且高效的解决方案。CNOCR 不仅支持中文,还支持中英文混合文本的识别,适用于各种场景,如文档扫描、图像文字提取等。

1.2 CNOCR 的特点与优势

专注于中文文本识别:CNOCR 针对中文文本进行了优化,识别准确率高,尤其擅长处理复杂的中文排版和字体。

轻量级且易于使用:CNOCR 的安装和使用非常简单,只需几行代码即可完成图像文字的识别。

支持多种字体和复杂布局:无论是印刷体、手写体,还是复杂的排版布局,CNOCR 都能很好地处理。

提供预训练模型:CNOCR 提供了多个预训练模型,用户可以直接使用,无需从头训练。

高效且快速:CNOCR 基于深度学习技术,识别速度快,适合处理大量图像。

开源免费:CNOCR 是完全开源的,用户可以自由使用和修改。

1.3 环境要求与依赖安装

Python 版本要求

CNOCR 需要 Python 3.6 及以上版本。如果你还没有安装 Python,可以从 Python 官网 下载并安装。

安装 CNOCR

安装 CNOCR 非常简单,只需运行以下命令:

pip install cnocr

这个命令会自动安装 CNOCR 及其依赖项。如果你在安装过程中遇到问题,可以尝试升级 pip:

pip install --upgrade pip

1.4 验证安装是否成功

安装完成后,我们可以通过以下代码来验证 CNOCR 是否安装成功:

import cnocr

# 初始化 CNOCR

ocr = cnocr.CnOcr()

# 测试识别

test_image_path = 'test_image.png' # 请确保存在测试图片

result = ocr.ocr(test_image_path)

# 输出结果

print("CNOCR 安装成功!识别结果:")

for line in result:

print(f"文本: {

line['text']}, 位置: {

line['position']}, 置信度: {

line['score']}")

这段代码首先导入了 CNOCR 库,然后初始化了一个 CNOCR 实例。接着,它读取了一张测试图片并进行了文字识别,最后输出了识别结果。如果一切正常,你会看到识别出的文本及其位置和置信度。

2. CNOCR 基本使用

2.1 导入库与基本配置

在使用 CNOCR 之前,我们需要先导入库并进行一些基本配置。以下是一个简单的示例:

from cnocr import CnOcr

# 初始化 CNOCR 实例

ocr = CnOcr(

det_model_name='ch_PP-OCRv3_det', # 检测模型

rec_model_name='ch_PP-OCRv3_rec', # 识别模型

cand_alphabet='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' # 可选字符集

)

在这段代码中,我们导入了 CnOcr 类,并初始化了一个 CNOCR 实例。det_model_name 和 rec_model_name 分别指定了文本检测和识别模型,cand_alphabet 是可选的字符集,用于限制识别结果中的字符类型。

2.2 使用 CNOCR 进行简单的图像识别

识别单张图片

# 识别单张图片

image_path = 'example.png'

result = ocr.ocr(image_path)

# 打印识别结果

print("识别结果:")

for idx, line in enumerate(result):

print(f"第 {

idx+1} 行: {

line['text']}")

这段代码展示了如何使用 CNOCR 识别单张图片中的文字。ocr.ocr(image_path) 会返回一个包含识别结果的列表,每个元素代表一行文本及其相关信息。

识别图片中的中文文本

# 提取文本内容

texts = [line['text'] for line in result]

# 保存结果到文件

with open('output.txt', 'w', encoding='utf-8') as f:

f.write('\n'.join(texts))

print("文本已保存到 output.txt")

这段代码将识别出的文本保存到一个文本文件中,方便后续处理或分析。

2.3 输出结果的格式与解析

CNOCR 的识别结果是一个包含多个字典的列表,每个字典代表一行文本。以下是一个示例:

# 解析识别结果

for line in result:

print(f"""

文本内容: {

line['text']}

位置坐标: {

line['position']}

置信度: {

line['score']:.2f}

""")

这段代码展示了如何解析识别结果,并输出每行文本的内容、位置坐标和置信度。

2.4 处理图像路径输入与文件夹批量处理

如果你需要处理多张图片,可以使用以下代码进行批量处理:

import os

from pathlib import Path

def batch_ocr(image_folder, output_folder='output'):

"""批量处理文件夹中的图片"""

# 创建输出目录

Path(output_folder).mkdir(exist_ok=True)

results = {

}

for filename in os.listdir(image_folder):

if filename.lower().endswith(('.png', '.jpg', '.jpeg')):

# 处理每张图片

image_path = os.path.join(image_folder, filename)

result = ocr.ocr(image_path)

# 保存结果

output_path = os.path.join(output_folder, f"{

Path(filename).stem}.txt")

with open(output_path, 'w', encoding='utf-8') as f:

f.write('\n'.join([line['text'] for line in result]))

results[filename] = result

return results

# 使用示例

batch_results = batch_ocr('images')

print(f"处理完成,共识别 {

len(batch_results)} 张图片")

这段代码会遍历指定文件夹中的所有图片,并将识别结果保存到输出文件夹中。

3. CNOCR 高级功能

3.1 识别图片中的中英文混合文本

CNOCR 不仅可以识别中文,还支持中英文混合文本的识别。以下是一个示例:

# 初始化支持中英文的模型

mixed_ocr = CnOcr(

det_model_name='en_PP-OCRv3_det',

rec_model_name='en_PP-OCRv3_rec'

)

# 识别混合文本

mixed_text_image = 'mixed_text.png'

result = mixed_ocr.ocr(mixed_text_image)

print("中英文混合识别结果:")

for line in result:

print(line['text'])

这段代码展示了如何使用 CNOCR 识别中英文混合文本。通过指定不同的模型,CNOCR 可以更好地处理混合文本。

3.2 识别不同字体、手写体和复杂布局的文本

CNOCR 支持识别多种字体和复杂布局的文本。以下是一个示例:

# 使用更强大的模型

advanced_ocr = CnOcr(

det_model_name='ch_PP-OCRv3_det',

rec_model_name='ch_PP-OCRv3_rec',

cand_alphabet='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

)

# 识别复杂文本

complex_image = 'complex_layout.png'

result = advanced_ocr.ocr(complex_image)

print("复杂文本识别结果:")

for line in result:

print(line['text'])

这段代码展示了如何使用更强大的模型来识别复杂文本。

3.3 调整识别精度与参数设置

图像预处理:二值化、去噪等

from cnocr.utils import read_img

import cv2

# 读取并预处理图像

img = read_img('noisy_image.png', gray=True)

# 二值化处理

_, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 去噪

img = cv2.fastNlMeansDenoising(img, None, h=10, templateWindowSize=7, searchWindowSize=21)

# 识别处理后的图像

result = ocr.ocr(img)

print("预处理后识别结果:")

for line in result:

print(line['text'])

这段代码展示了如何对图像进行预处理,以提高识别精度。

调整识别模型的参数

# 自定义模型参数

custom_ocr = CnOcr(

det_model_name='ch_PP-OCRv3_det',

rec_model_name='ch_PP-OCRv3_rec',

cand_alphabet='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

det_model_backend='onnx', # 使用 ONNX 后端

rec_model_backend='onnx',

context='cpu' # 指定使用 CPU

)

# 使用自定义模型识别

result = custom_ocr.ocr('custom_image.png')

print("自定义模型识别结果:")

for line in result:

print(line['text'])

这段代码展示了如何自定义模型参数,以满足特定需求。

3.4 多线程与批量图像处理

from concurrent.futures import ThreadPoolExecutor

from tqdm import tqdm

def process_image(image_path):

"""处理单张图片"""

try:

result = ocr.ocr(image_path)

return image_path, [line['text'] for line in result]

except Exception as e:

return image_path, str(e)

Copyright © 2022 世界杯奖杯_男足世界杯预选赛 - cbatop.com All Rights Reserved.