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)
相关推荐
小陈phd2 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao3 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
ZHOU_WUYI7 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1237 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界7 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221517 小时前
机器学习系列----关联分析
人工智能·机器学习
Robot2517 小时前
Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速
人工智能·机器人·微信公众平台
浊酒南街8 小时前
Statsmodels之OLS回归
人工智能·数据挖掘·回归
畅联云平台8 小时前
美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设
人工智能·物联网
加密新世界9 小时前
优化 Solana 程序
人工智能·算法·计算机视觉