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)
相关推荐
技术大咖--上好嘉2 分钟前
科技守护温情,智慧康养让陪伴跨越距离
人工智能·科技·ai·生活·健康医疗
100分简历3 分钟前
无图标简洁大方的简历模板下载
人工智能·面试·职场和发展·pdf·编辑器
海绵宝宝_3 分钟前
Chrome强开Gemini助手教程
前端·人工智能·chrome
八月瓜科技5 分钟前
AI侵权频发:国内判例定边界,国际判决敲警钟
大数据·人工智能·科技·深度学习·机器人
无垠的广袤6 分钟前
【VisionFive 2 Lite 单板计算机】边缘AI视觉应用部署:人脸检测
linux·人工智能·python·opencv·开发板
A01234123457 分钟前
当AI成为“仿生绿植”:从颜廷利《升命学说》看技术时代的灵魂缺失
人工智能·心理学三大泰斗谁最厉害·中国最出名的心理学专家·心理学的三大巨头·中国心理学第一名是谁·中国最顶尖的心理学家·世界公认顶尖心理学家
新缸中之脑7 分钟前
用Ollama Launch连接AI编码代理
人工智能
一招定胜负9 分钟前
卷积神经网络提取人脸五个特征点
人工智能·cnn·kotlin
一招定胜负9 分钟前
回顾:cbow连续词袋与词嵌入
人工智能·自然语言处理·nlp
七夜zippoe11 分钟前
大模型低成本高性能演进 从GPT到DeepSeek的技术实战手记
人工智能·gpt·算法·架构·deepseek