训练验证码之ddddocr一个图文视频教学

news2025/9/20 9:05:40

目录

      • 一、推荐文章视频
      • 一、ddddocr环境配置
      • 二、字符集验证码训练
      • 三、ocr_api_server服务搭建

一、推荐文章视频

  • 文章原文来自这里:训练验证码-4、ddddocr训练字符验证码 , 原文文章末尾有视频介绍
  • 更多内容见训练验证码合集

一、ddddocr环境配置

1.打开ddddocr项目 https://github.com/sml2h3/dddd_trainer 进行下载压缩包并解压,文章末尾是视频介绍,如果文字有些不清楚,可以看视频操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

fire
loguru
pyyaml
tqdm
numpy
pillow==9.5.0
onnx
ddddocr-py311

5.创建ddddocr训练专属的虚拟环境,注意这里我安装的pytorch版本对应,请看上面文章找自己cuda对应的torch版本安装(该篇文章 深度学习环境安装 目录三),依次执行如下命令

  • conda create -n dd python=3.11
  • conda activate dd
  • pip install -r requirements.txt
  • N卡gpu训练:conda install pytorch2.0.1 torchvision0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c nvidia
  • 只cpu训练:conda install pytorch2.0.1 torchvision0.15.2 torchaudio==2.0.2 cpuonly
    在这里插入图片描述
    6.可以训练字母/数字/汉字/定长/不定长/大小写/乘号加减号等,报错解决推荐文章 https://blog.csdn.net/weixin_68123638/article/details/131463026

二、字符集验证码训练

1.创建训练项目:python app.py create charprj , 如图这时候在dddd_trainer/projects下会自动生成一个charprj的文件夹,并且包含三个空文件夹cache、checkpoints、models 和一个config.yaml配置文件
在这里插入图片描述
2.准备数据集:听说至少需要1200张图片(不确定), 如图我在D:\Yzmtrain\images_char 目录下面放了一些数据集,这些数据集的命名,名称_随机hash值
在这里插入图片描述
3.如果是单个汉字的话,python app.py create charprj --single , 如果想要创建一个CNN的项目,则可以加上–single参数,CNN项目识别比如图片类是什么分类的情况,比如图片上只有一个字,识别这张图是什么字(图上有多个字的不要用CNN模式),又比如分辨图片里是狮子还是兔子用CNN模式比较合适,大多数OCR需求请不要使用–single
在这里插入图片描述
3.缓存数据配置:python app.py cache charprj D:\Yzmtrain\images_char ,dddd_trainer/cache文件夹下会生成两个文件cache.train.tmp和cache.val.tmp,里面记录的就是images文件夹下面的图片信息
在这里插入图片描述

Model:
    CharSet: []     # 字符集,不要动,会自动生成
    ImageChannel: 1 # 图片通道数,如果你想以灰度图进行训练,则设置为1,彩图,则设置为3。如果设置为1,数据集是彩图,项目会在训练的过程中自动在内存中将读取到的彩图转为灰度图,并不需要提前自己修改并且该设置不会修改本地图片
    ImageHeight: 64 # 图片自动缩放后的高度,单位为px,高度必须为16的倍数,会自动缩放图像
    ImageWidth: -1  # 图片自动缩放后的宽度,单位为px,本项若设置为-1,将自动根据情况调整
    Word: false     # 是否为CNN模型,这里在创建项目的时候通过参数控制,不要自己修改
System:
    Allow_Ext: [jpg, jpeg, png, bmp]  # 支持的图片后缀,不满足的图片将会被自动忽略
    GPU: true                         # 是否启用GPU去训练,使用GPU训练需要参考步骤一安装好环境
    GPU_ID: 0                         # GPU设备号,0为第一张显卡
    Path: ''                          # 数据集根目录,在缓存图片步骤会自动生成,不需要自己改,除非数据集地址改了
    Project: test                     # 项目名称 也就是{project_name}
    Val: 0.03                         # 验证集的数据量比例,0.03就是3%,在缓存数据时,会自动选则3%的图片用作训练过程中的数据验证,修改本值之后需要重新缓存数据
Train:
    BATCH_SIZE: 32                                    # 训练时每一个batch_size的大小,主要取决于你的显存或内存大小,可以根据自己的情况,多测试,一般为16的倍数,如16,32,64,128
    CNN: {NAME: ddddocr}                              # 特征提取的模型,目前支持的值为ddddocr,effnetv2_l,effnetv2_m,effnetv2_xl,effnetv2_s,mobilenetv2,mobilenetv3_s,mobilenetv3_l
    DROPOUT: 0.3                                      # 非专业人员不要动
    LR: 0.01                                          # 初始学习率
    OPTIMIZER: SGD                                    # 优化器,不要动
    SAVE_CHECKPOINTS_STEP: 2000                       # 每多少step保存一次模型
    TARGET: {Accuracy: 0.97, Cost: 0.05, Epoch: 20}   # 训练结束的目标,同时满足时自动结束训练并保存onnx模型,Accuracy为需要满足的最小准确率,Cost为需要满足的最小损失,Epoch为需要满足的最小训练轮数
    TEST_BATCH_SIZE: 32                               # 测试时每一个batch_size的大小,主要取决于你的显存或内存大小,可以根据自己的情况,多测试,一般为16的倍数,如16,32,64,128
    TEST_STEP: 1000                                   # 每多少step进行一次测试

4.训练或者恢复训练:python app.py train charprj
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import ddddocr

ocr = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False, import_onnx_path="charprj_1.0_23_6000_2023-10-26-23-47-08.onnx", charsets_path="charsets.json")

with open(r"D:\Yzmtrain\img_other\1CBH_1578451419953.png", 'rb') as f:
    image_bytes = f.read()

print(ocr.classification(image_bytes))

三、ocr_api_server服务搭建

1.服务搭建详细内容看这个吧,本文不介绍https://github.com/sml2h3/ocr_api_server
2、更多内容见训练验证码合集
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++专栏】C++入门 | 函数重载、引用、内联函数

博客主页:Duck Bro 博客主页系列专栏:C专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ C入门 | 函数重载、引用、内联函数 文章编号:C入门 / 02 文…

Java:继承

文章目录 每日一言什么是继承?子类怎么访问父类的成员变量?不同名的怎么访问?同名的怎么访问? 子类怎么访问父类的成员方法?不同名的怎么访问?同名的怎么访问? 如果我就是想访问同名的父类的成员…

每日一题leetcode第2834:找出美丽数组的最小和

目录 一.题目描述 二.思路及优化 三.C代码 一.题目描述 二.思路及优化 首先我们看到这个题,就是根据给出的数组元素个数N,从[1,N]找出N个元素,使得N个元素的和最小,其中随便抽两个数出来,两个数之和不能为…

《2024国家自然科学基金青年基金》 相关申请注意事项解读

一 年龄计算 2004 对应 89 2005 对应 90 2006 对应 91 2007 对应 92 2008 对应 93 2009 对应 94 2010 对应 95 .。。 二 资助比例(2023) 2024年 23.13% 2023年 24% 三 2024年政策变动,只能申请3年的30万,不能像23年一样选择10-20的…

UE5.1_使用技巧(常更)

UE5.1_使用技巧(常更) 1. 清除所有断点 运行时忘记蓝图中的断点可能会出现运行错误的可能,务必运行是排除一切断点,逐个排查也是办法,但是在事件函数多的情况下会很复杂且慢节奏,学会一次性清除所有很有必…

【Python+Selenium学习系列5】Selenium特殊元素定位之-鼠标悬停操作

前言 Selenium模拟用户在浏览器中的操作,比如点击按钮。在某些场景下,我们需要模拟鼠标悬停的操作,来触发一些隐藏的元素。本文将介绍Python Selenium实现鼠标悬停操作。 鼠标悬停,即当光标与其名称表示的元素重叠时触发的事件&…

【js刷题:数据结构数组篇之二分查找】

二分查找 一、什么是二分查找法二、具体实现步骤1.确定确定target所在数组的**左右边界**左闭右闭左闭右开 2.取中间值左闭右闭左闭右开 3.中间元素目标值4.中间元素大于目标值5.中间元素小于目标值6.重复 三、使用条件四、js版本示例1.左闭右闭2.左闭右开 五、力扣刷题1.搜索插…

魔众智能AI系统v2.1.0版本支持主流大模型(讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini)

支持主流大模型(讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini) [新功能] 系统全局消息提示 UI 全新优化 [新功能] JS 库增加【ijs】类型字符串,支持默认可执行代码 [新功能] 分类快捷操作工具类 CategoryUtil [新功能…

手写简易操作系统(三)--加载Loader

前情提要 上一节我们讲了如何启动计算机,这一节我们讲如何加载内核,内核是存在于硬盘上的一段程序,要加载这段程序,那么必然需要从硬盘上读取数据,这里我们就需要使用 ATA PIO 模式 根据ATA规范,所有符合A…

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪,科技日新月异,经济、信息等方面都取得了长足的进步,特别是信息网络技术的飞速发展,对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利,开发一套基于java的大学生…

「蓝桥·算法双周赛」第七场分级赛——小白入门赛

题目列表 说明 好久没打蓝桥杯的比赛&#xff0c;回来试试水&#xff0c;就开了第1、2、3一共三个题&#xff0c;第4题可惜了。1.thanks,mom【算法赛】 思路&#xff1a; 没什么好说的&#xff0c;但是当时比赛刚开始服务器有问题&#xff0c;基本提交的全WA了。#include <…

Learn OpenGL 04 纹理

纹理环绕方式 纹理坐标的范围通常是从(0, 0)到(1, 1)&#xff0c;那如果我们把纹理坐标设置在范围之外会发生什么&#xff1f;OpenGL默认的行为是重复这个纹理图像&#xff08;我们基本上忽略浮点纹理坐标的整数部分&#xff09;&#xff0c;但OpenGL提供了更多的选择&#xf…

java中的字符串比较(题目作示例)

错误的代码 import java.util.Scanner; public class one {public static void main(String[] args) {Scanner scnew Scanner(System.in);String b"47568";int i0;for ( i 0; i <3; i){String asc.next();if(ab){System.out.println("密码正确&#xff0c;登…

鸿蒙开发(二)-项目结构

鸿蒙开发(二)-项目结构 上篇文章我们讲了如何配置鸿蒙开发的基础环境&#xff0c;以及创建了第一个鸿蒙程序。 这篇我们讲述了鸿蒙应用的项目目录结构。 如图所示&#xff1a;我们切换项目project可以看到。 另一种则是Ohos模式: AppScope->app.json5 应用的全局配置 {&q…

300分钟吃透分布式缓存-23讲:Redis是如何淘汰key的?

淘汰原理 首先我们来学习 Redis 的淘汰原理。 系统线上运行中&#xff0c;内存总是昂贵且有限的&#xff0c;在数据总量远大于 Redis 可用的内存总量时&#xff0c;为了最大限度的提升访问性能&#xff0c;Redis 中只能存放最新最热的有效数据。 当 key 过期后&#xff0c;或…

【vue.js】文档解读【day 2】 | 响应式基础

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 响应式基础声明响应式状态(属性)响应式代理 vs 原始值声明方法深层响应性DOM 更新时机有状态方法 响应式…

html--彩虹爱心

文章目录 js内容cssreset.min.cssstyle.css html内容 js内容 const colors ["#e03776","#8f3e98","#4687bf","#3bab6f","#f9c25e","#f47274"]; const SVG_NS http://www.w3.org/2000/svg; const SVG_XLINK &q…

VUE3 使用axios网络请求

1.新建工程 参考&#xff0c;VUE3 环境搭建&#xff1a;https://blog.csdn.net/LQ_001/article/details/136293795&#xff0c;运行命令 vue create vue-demo 2.引入axios 不管何种引用&#xff0c;都要在工程中安装 axios 包。安装命令&#xff1a;npm install --save axio…

基于springboot实现数据资产管理系统 项目【项目源码+论文说明】

基于springboot实现数据资产管理系统演示 摘要 固定资产管理系统主要是完成对系统用户管理、资产信息管理、资产变更管理、资产用途管理、资产类别管理和资产增减管理。因为利用本系统管理员可以直接录入信息&#xff0c;修改信息&#xff0c;删除信息&#xff0c;并且若在录入…

智能革新:2024年AI辅助研发的挑战、机遇与未来展望

引言 在进入2024年的门槛时&#xff0c;我们站在了一个科技飞速发展的新纪元&#xff0c;其中&#xff0c;人工智能&#xff08;AI&#xff09;的持续进步和应用扩展无疑是推动这一变革的强大动力。AI辅助研发&#xff0c;作为将人工智能技术应用于科研和产品开发过程的一种模…