paddleOcr记录

情况1:默认不需要标注电能表样本、训练电能表OCR模型,需调用PaddleOCR出识别字符,对识别信息进行提取

01 -- >> test01.py

情况2:需要从无到有标注OCR样本,或已有样本及标签文件,需训练电能表OCR模型,调用OCR模型识别样本字符,对识别信息进行提取

02 -- PaddleOCR-main

OCR的处理包含两个流程:1-字符检测,2-字符识别。两个流程需要两种不同的数据集格式,如字符检测部分,样本内容主要包含字符图像与字符对应的坐标(参考dataset/ctw1500数据集),

识别部分样本内容包含裁剪出的字符区域样本及对应的字符标签(参考dataset/rec数据集)。因此在训练电能表信息提取模型前,数据样本需处理成可训练的格式(参考ctw1500数据集、rec数据集)

文字检测训练 mv3_db 模型

直接在控制台运行以下脚本即可完成字符检测算法的训练,其中configs/det/det_mv3_db.yml文件为算法的基础配置文件,det_mv3_db为选择的算法类型,调整改文档中的参数既能对算法训练的信息

进行修正,如总迭代次数:epoch_num,每迭代多少次保存一次权重:save_epoch_step, 训练的图像路径:data_dir, 训练的标签路径:label_file_list,

另pretrained/MobileNetV3_large_x0_5_pretrained为算法训练的权重路径

python tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model=./pretrained/MobileNetV3_large_x0_5_pretrained

文字识别训练

直接在控制台运行以下脚本即可完成字符识别算法的训练,关键信息与上述相同

python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=./pretrained/en_PP-OCRv3_rec_train/best_accuracy

推理

paddle训练的模型需将训练生成的权限转换为推理所需的权重

1、对文字检测模型的权重进行转换

加载配置文件det_mv3_db.yml,从/output/db_mv3/目录下加载latest模型,inference模型保存在./output/det_db_inference目录下

python tools/export_model.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model="./output/db_mv3/latest" Global.save_inference_dir="./output/det_db_inference/"

2、对文书识别模型的权重进行转换

关键信息配置同上

python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/v3_en_mobile/latest Global.save_inference_dir=./output/rec__inference/

文字检测算法、文字识别算法(完成OCR算法的推理)

02 -- PaddleOCR-main -- test02.py

test02.py 涉及代码实际与test01.py相同,其主要区别在于test01.py直接使用提供的的权重进行字符的检测识别,test02.py为仅有样本及标签文件,从标签文件开始训练自己的模型,转换模型实现模型的推理

test1.py

复制代码
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Project :电能表信息提取 
# @Author  :rui
# @Date    :2024/10/11 16:56

# 导入库
import cv2

from paddleocr import PaddleOCR, draw_ocr
from PIL import Image

# 第一部分:电能表字符识别及提取
# OCR识别默认中文--'ch'
paddleOcr = PaddleOCR(lang='ch')

# 读取图像
img = cv2.imread('images/08f790529822720e0cf37bed01991d46f21fbe097dd3.jpg')  # 打开需要识别的图片
# 字符识别
result = paddleOcr.ocr(img)

# 1、逐行输出识别结果,含位置坐标,提取的信息, 识别字块对应的置信度
for i in result[0]:
    print(i)

# 逐行输出识别结果,仅提取字符信息
for i in range(len(result[0])):
    print(result[0][i][1][0])


# 第二部分,识别结果展示
result = result[0]
image = Image.open('images/08f790529822720e0cf37bed01991d46f21fbe097dd3.jpg').convert('RGB')
# 提取每一个字块对应的框
boxes = [line[0] for line in result]
# 按识别顺序提取字符
txts = [line[1][0] for line in result]
# 字块置信度提取
scores = [line[1][1] for line in result]
# 识别结果写入图像进行展示
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
# 保存样本
im_show.save('result.jpg')

test2.py

复制代码
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Project :电能表信息提取 
# @Author  :rui
# @Date    :2024/10/16 14:55


import os
import cv2 as cv

from paddleocr import PaddleOCR


def ocr_predict(imgPath):
    '''
    det_model_dir:文本检测
    rec_model_dir:文本识别
    '''
    # 注意lang参数,en时代表英文字符识别,ch为中文
    ocr = PaddleOCR(det_model_dir="./output/det_db_inference/",
                    rec_model_dir="./output/rec__inference/", lang='en', use_angle_cls=True,
                    use_gpu=False)

    img = cv.imread(imgPath)
    result = ocr.ocr(img)
    print(result)


if __name__ == '__main__':
    img_path = "dataset/ctw1500/imgs/test/"
    files = os.listdir(img_path)
    for file in files:
        img = img_path + file
        ocr_predict(img)
相关推荐
葫三生1 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
m0_751336392 小时前
突破性进展:超短等离子体脉冲实现单电子量子干涉,为飞行量子比特奠定基础
人工智能·深度学习·量子计算·材料科学·光子器件·光子学·无线电电子
美狐美颜sdk5 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
DeepSeek-大模型系统教程5 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
小雷FansUnion7 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
资讯分享周7 小时前
扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
人工智能·powerpoint
叶子爱分享9 小时前
计算机视觉与图像处理的关系
图像处理·人工智能·计算机视觉
鱼摆摆拜拜9 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
一只鹿鹿鹿9 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程