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)
相关推荐
天天向上杰6 分钟前
通义灵码AI程序员
人工智能·aigc·ai编程
sendnews17 分钟前
AI赋能教育,小猿搜题系列产品携手DeepSeek打造个性化学习新体验
人工智能
紫雾凌寒28 分钟前
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
人工智能·python·神经网络·算法·机器学习·卷积神经网络
WBingJ39 分钟前
2月17日深度学习日记
人工智能
zhengyawen66640 分钟前
深度学习之图像分类(一)
人工智能·深度学习·分类
莫莫莫i44 分钟前
拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!
人工智能·微软·量子计算
C#Thread1 小时前
机器视觉--图像的运算(加法)
图像处理·人工智能·计算机视觉
无极工作室(网络安全)1 小时前
机器学习小项目之鸢尾花分类
人工智能·机器学习·分类
涛涛讲AI1 小时前
文心一言大模型的“三级跳”:从收费到免费再到开源,一场AI生态的重构实验
人工智能·百度·大模型·deepseek
视觉人机器视觉1 小时前
机器视觉中的3D高反光工件检测
人工智能·3d·c#·视觉检测