介绍(Introduction)
验证码识别模型 ocr-captcha专门识别常见验证码的模型,训练模型有3个:
1.ocr_small:训练数据大小为700MB,约8.4万张验证码图片,训练轮次27轮,最终的精度将近100%,推荐下载这个模型;
2.ocr_big:训练数据大小为11G,约135万个验证码图片,训练轮次1轮,最终的精度将近93.95%(由于资源问题,无法训练太久);
3.🚀 [2025-11-20] ocr2:训练数据大小为3G,约60万个验证码图片,训练轮次30轮,最终的精度将近{"accuracy": 0.988, "AR": 0.998};版本号为:model_revision='v1.0.1'
数据分布
1.类型:1 纯数字(0-9);2 数字+字母(0-9 + a-z + A-Z);3 纯字母(a-z + A-Z);4 手机号(11 位随机数字);5 邮箱(本地部分使用 a-zA-Z0-9,域名来自常见集合;渲染与标签均去掉 .,保留 @);6 区号电话(区号与主号随机数字,格式可能包含括号或连字符,分机号可选)
2.长度:2-8位
数据微调
1.基座模型:基座模型参考达摩院发布的读光-文字识别-行识别模型-中英-通用领域
2.具体微调参考以上链接
模型体验链接
modelscope:验证码识别模型(ocr-captcha)
模型能力
通过新的数据与训练策略,模型具备以下能力与改进:
- 正确识别数字
0,不再将0误判为字母O - 对适度干扰线条、噪点与背景浅色线条具备鲁棒性
- 文本统一居中绘制、无旋转,训练与推理一致性更好
- 支持 6 类目标文本(含手机号、邮箱、区号电话);邮箱渲染与标签去点号
- 提供随机与单色文本颜色两种模式,默认暗色随机色提升泛化
快速使用(Quickstart)
代码提供web网页版:myself_train_model.py
详细数据参考huggingface代码:xiaolv/ocr-captcha
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import gradio as gr
import os
class xiaolv_ocr_model():
def __init__(self):
model_small = r"./output_small"
model_big = r"./output_big"
self.ocr_recognition_small = pipeline(Tasks.ocr_recognition, model=model_small)
self.ocr_recognition1_big = pipeline(Tasks.ocr_recognition, model=model_big)
def run(self,pict_path,moshi = "small", context=[]):
pict_path = pict_path.name
context = [pict_path]
if moshi == "small":
result = self.ocr_recognition_small(pict_path)
else:
result = self.ocr_recognition1_big(pict_path)
context += [str(result['text'][0])]
responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
print(f"识别的结果为:{result}")
os.remove(pict_path)
return responses,context
if __name__ == "__main__":
pict_path = r"C:\Users\admin\Desktop\图片识别测试\企业微信截图_16895911221007.png"
ocr_model = xiaolv_ocr_model()
# ocr_model.run(pict_path)
快速使用gradio
import os
os.system('pip install "modelscope==1.8.0" -f https://pypi.org/project/modelscope/')
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import gradio as gr
# os.system('pip install "modelscope[cv]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html')
# os.system('pip install "modelscope==1.8.0" -f -f https://pypi.org/project/modelscope/')
# os.system('pip install "modelscope" --upgrade -f https://pypi.org/project/modelscope/')
class xiaolv_ocr_model():
def __init__(self):
model_small = r"xiaolv/ocr_small"
model_big = r"xiaolv/ocr_big"
model_ocr2 = r"xiaolv/ocr2"
self.ocr_recognition_small = pipeline(Tasks.ocr_recognition, model=model_small,model_revision='v1.0.0')
self.ocr_recognition1_big = pipeline(Tasks.ocr_recognition, model=model_big,model_revision='v1.0.0')
self.ocr_recognition_ocr2 = pipeline(Tasks.ocr_recognition, model=model_ocr2,model_revision='v1.0.1')
self.ocr_dict = {
"small":self.ocr_recognition_small ,
"big": self.ocr_recognition1_big,
"ocr2": self.ocr_recognition_ocr2,
}
def run(self,pict_path,moshi = "ocr2", context=[]):
pict_path = pict_path.name
context = [pict_path]
print(f">>>> 使用模型:{moshi}")
models_ocr = self.ocr_dict.get(moshi,"ocr2")
result = models_ocr(pict_path)
context += [str(result['text'][0])]
responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
print(f">>>>>>> 识别的结果为:{result}")
os.remove(pict_path)
return responses,context
if __name__ == "__main__":
ocr_model = xiaolv_ocr_model()
with gr.Blocks() as demo:
gr.HTML("""<h1 align="center">常见验证码识别——小吕</h1>""")
with gr.Tab("验证码模型"):
with gr.Accordion(open=False,label="说明文档"):
gr.Markdown("""
#### 专门识别常见验证码的模型,训练模型有2个:
* 1.**small**:训练数据大小为700MB,约8.4万张验证码图片,训练轮次27轮,最终的精度将近100%;
* 2.**big**:训练数据大小为11G,约135万个验证码图片,训练轮次1轮,最终的精度将近93.95%;
3.🚀 **[2025-11-20]** **[ocr2]**:训练数据大小为3G,约60万个验证码图片,训练轮次30轮,最终的精度将近`{"accuracy": 0.98, "AR": 0.99}`;
#### 训练验证码图片包括:
* 类型:1. 纯数字型;2. 数字+字母型;3.纯字母型(大小写)
* 长度:4位、5位、6位
#### ocr2:新增能力:
通过新的数据与训练策略,模型具备以下能力与改进:
1. 正确识别数字 `0`,不再将 `0` 误判为字母 `O`
2. 对适度干扰线条、噪点与背景浅色线条具备鲁棒性
3. 文本统一居中绘制、无旋转,训练与推理一致性更好
4. 支持 6 类目标文本(含手机号、邮箱、区号电话);邮箱渲染与标签去点号
5. 提供随机与单色文本颜色两种模式,默认暗色随机色提升泛化
### 可以使用API调用--点击底部 Use via API
""")
with gr.Row():
with gr.Column():
select_types = gr.Radio(label="模型类型选择", choices=["ocr2","small", "big",], value="ocr2")
img_input = gr.File(label='输入图像,目前支持图片格式(png\jpg等),建议使用png格式。',file_types=[".jpg",".jpeg",".png"])
with gr.Column():
chatbot = gr.Chatbot([])
with gr.Row():
btn_submit = gr.Button(value="一键识别")
state = gr.State([])
btn_submit.click(fn=ocr_model.run, inputs=[img_input, select_types], outputs=[chatbot, state],api_name="xiaolv")
demo.launch(show_error=True,share=True)
联系我们(Contact Us)
如果你想给我们的研发团队和产品团队留言,请通过邮件(2240560729@qq.com)联系我们。