【校园AI Day-AI workshop】基于OCR的自定义区域文件重命名程序


该项目基于飞桨校园AI Day活动,实现自定义区域识别文件重命名程序。利用PaddleOCR技术,识别30张交付验收单中的铁塔名称并完成图片重命名,精度达90%合格。通过分析图片确定信息位置,提取后修改文件名,可替代手工录入,节省成本,目前准确率达标,未来将优化模型以提升跨行识别能力。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于OCR的自定义区域识别文件重命名程序

一.项目介绍

1.1 引言:

本次项目分享来源于最近参加的【飞桨校园AI Day】AI Workshop活动,团队名:重生之我在百度学AI,选择项目命题为《自定义区域识别文件重命名程序》。 其课题主要要求为:

提供30张交付验收单,需要通过OCR技术识别图片中的铁塔名称,并根据该字段完成对图片的重命名。

  • 精度指标:提供30张图片,识别正确90%为合格
  • 环境要求:使用PaddleHUB或PaddleOCR实现均可

目前主要实现了根据图片中的指定区域进行重命名,通过OCR技术实现可自主选择识别区,实现识别内容的精确提取

1.2 项目意义:

在企业与日常的生活与工作过程中,必不可免会产生大量单据,譬如表单、档案等,录入表单数据需要大量人力完成手工录入,过程繁琐枯燥,耗费大量人力物力。而通过拍摄/扫描的方式快速获取表单数据,使用OCR技术实现自动录单,实现海量表单自动化录入,解决表单录入速度慢、易出错、成本高等难题。用人工智能OCR代替手动录入,为企业运营节省了大量人力、时间、物力成本

1.3 项目过程:

  • 基于Paddle的轻量级中文ocr模型对任务目标进行可视化分析,确定所需提取的信息位置

  • 选择预处理模型,完成对目标信息的提取

  • 根据抽取得到的信息,按任务要求对文件名进行修改

二、环境准备

In [5]

# 克隆 PaddleOCR # 此代码只需要执行一次,本项目已完成克隆 #%cd ~  #!git clone -b release/2.1 https://github.com/PaddlePaddle/PaddleOCR.git
/home/aistudio 正克隆到 'PaddleOCR'... remote: Enumerating objects: 35969, done. remote: Counting objects: 100% (285/285), done. remote: Compressing objects: 100% (157/157), done. remote: Total 35969 (delta 165), reused 230 (delta 128), pack-reused 35684 接收对象中: 100% (35969/35969), 319.24 MiB | 137.00 KiB/s, 完成. 处理 delta 中: 100% (24889/24889), 完成. 检查连接... 完成。

三、安装依赖

In [ ]

# 安装依赖库 %cd ~/PaddleOCR !pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

四、数据解压

In [ ]

!unzip /home/aistudio/data/data142101/Scan_0012_0004.zip -d /home/aistudio/images

五、模型选择

PaddleOCR是百度开源的超轻量级OCR模型库,提供了数十种文本检测、识别模型,旨在打造一套丰富、领先、实用的文字检测、识别模型/工具库,助力使用者训练出更好的模型,并应用落地。

在 PaddleOCR 识别中,会依次完成三种任务:检测、方向分类及文本识别;

关于预训练权重,PaddleOCR 官网根据提供权重文件大小分为两类:

  • 一类为轻量级,(检测+分类+识别)三类权重加起来大小一共才 9.4 M,适用于手机端和服务器部署;
  • 另一类(检测+分类+识别)三类权重内存加起来一共 143.4 MB ,适用于服务器部署;

无论模型是否轻量级,识别效果都能与商业效果相比,在本文中将选用轻量级权重用于测试;

In [115]

! mkdir inference # 下载超轻量级中文OCR模型的检测模型并解压 ! cd inference && wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar && tar xf ch_ppocr_mobile_v2.0_det_infer.tar && rm ch_ppocr_mobile_v2.0_det_infer.tar # 下载超轻量级中文OCR模型的识别模型并解压 ! cd inference && wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar && tar xf ch_ppocr_mobile_v2.0_rec_infer.tar && rm ch_ppocr_mobile_v2.0_rec_infer.tar # 下载超轻量级中文OCR模型的文本方向分类器模型并解压 ! cd inference && wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar && tar xf ch_ppocr_mobile_v2.0_cls_infer.tar && rm ch_ppocr_mobile_v2.0_cls_infer.tar ! cd ..
mkdir: 无法创建目录"inference": 文件已存在 --2025-05-25 23:25:29--  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar 正在解析主机 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a 正在连接 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 3164160 (3.0M) [application/x-tar] 正在保存至: “ch_ppocr_mobile_v2.0_det_infer.tar” ch_ppocr_mobile_v2. 100%[===================>]   3.02M  7.34MB/s    in 0.4s     2025-05-25 23:25:30 (7.34 MB/s) - 已保存 “ch_ppocr_mobile_v2.0_det_infer.tar” [3164160/3164160]) --2025-05-25 23:25:30--  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar 正在解析主机 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a 正在连接 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 3897317 (3.7M) [application/x-tar] 正在保存至: “ch_ppocr_mobile_v2.0_rec_infer.tar” ch_ppocr_mobile_v2. 100%[===================>]   3.72M  7.95MB/s    in 0.5s     2025-05-25 23:25:31 (7.95 MB/s) - 已保存 “ch_ppocr_mobile_v2.0_rec_infer.tar” [3897317/3897317]) --2025-05-25 23:25:32--  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar 正在解析主机 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.195, 182.61.200.229, 2409:8c04:1001:1002:0:ff:b001:368a 正在连接 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.195|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 1454080 (1.4M) [application/x-tar] 正在保存至: “ch_ppocr_mobile_v2.0_cls_infer.tar” ch_ppocr_mobile_v2. 100%[===================>]   1.39M  6.12MB/s    in 0.2s     2025-05-25 23:25:32 (6.12 MB/s) - 已保存 “ch_ppocr_mobile_v2.0_cls_infer.tar” [1454080/1454080])

5.1可视化测试图像

In [184]

import matplotlib.pyplot as plt from PIL import Image %pylab inline def show_img(img_path,figsize=(10,10)):     ## 显示原图,读取名称为11.jpg的测试图像     img = Image.open(img_path)     plt.figure("test_img", figsize=figsize)     plt.imshow(img)     plt.show()#为了显示效果,将图片放到了下个单元块中 #show_img("/home/aistudio/images/Scan_0012_0001.jpg") #为了显示效果,将图片放到了下个单元块中
Populating the interactive namespace from numpy and matplotlib

我们对测试图可视化后可以发现,表单整体基本是印刷体,文字公整清晰,且图片质量较高,可以判断图片是扫描得到的。但目标信息区域文字密集度较高,给信息抽取增加了一定的难度。

测试图像可视化结果如下:

5.2 对测试图像进行文字识别

需要详细学习paddleocr使用过程请参考官方baseline:https://aistudio.baidu.com/aistudio/projectdetail/467229

paddleocr已发布v3版本详情参考官方baseline: https://aistudio.baidu.com/aistudio/projectdetail/3916530

In [ ]

# 快速运行 !python3 tools/infer/predict_system.py --image_dir="/home/aistudio/images/Scan_0012_0001.jpg" \ --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer"  \ --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer" \ --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer"#效果图片存放在"/PaddleOCR/inference_results"中

从测试图像的识别效果可以看出PaddleOCR的轻量级模型对本次任务的识别效果非常好,所以任务聚焦于如何抽取目标信息

测试图像文字识别效果如下:

5.3 目标信息抽取

在项目初期,我们小组的想法是通过使用PaddleOCR提供的SER模型(语义实体识别), 完成对图像中的文本识别与分类。然后基于RE任务,完成对图象中的文本内容的关系提取。

但在多次尝试后,因为训练数据的缺少与找不到合适的RE任务标注工具等原因,使用预训练模型直接进行信息抽取的效果较差,无法满足任务需求。

考虑到对测试图像进行分析时,图片质量较高,并且判断是扫描提取的图片,图片质量较为稳定。所以我们尝试使用文字本身的位置关系来抽取目标信息

若读者需要了解SER与RE模型可以参考大神项目: https://aistudio.baidu.com/aistudio/projectdetail/3884375

5.3.1 方案一:基于输出顺序抽取目标信息

In [4]

from paddleocr import PaddleOCR ocr=PaddleOCR(use_angle_cls = True,use_gpu= True) #这里为了方便直接使用接口调用模型,易于输出结果,不用修改配置文件 result=ocr.ocr("/home/aistudio/images/Scan_0012_0001.jpg",cls=True) for i in result[0:10]: #信息较多,这里只输出了前10个,但已经包含目标信息     print(i)
100%|██████████| 3.16M/3.16M [00:00<00:00, 45.5MiB/s]
Namespace(cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='/home/aistudio/.paddleocr/cls', cls_thresh=0.9, det=True, det_algorithm='DB', det_db_box_thresh=0.5, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.6, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_limit_side_len=960, det_limit_type='max', det_model_dir='/home/aistudio/.paddleocr/2.1/det/ch', drop_score=0.5, enable_mkldnn=False, gpu_mem=8000, image_dir='', ir_optim=True, label_list=['0', '180'],, max_text_length=25, rec=True, rec_algorithm='CRNN', rec_batch_num=6, rec_char_dict_path='./ppocr/utils/ppocr_keys_v1.txt', rec_char_type='ch', rec_image_shape='3, 32, 320', rec_model_dir='/home/aistudio/.paddleocr/2.1/rec/ch', use_angle_cls=True, use_dilation=False, use_gpu=True, use_pdserving=False, use_space_char=True, use_tensorrt=False, use_zero_copy_run=False) download https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar to /home/aistudio/.paddleocr/2.1/det/ch/ch_ppocr_mobile_v2.0_det_infer.tar download https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar to /home/aistudio/.paddleocr/2.1/rec/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
100%|██████████| 3.90M/3.90M [00:00<00:00, 47.6MiB/s] 100%|██████████| 1.45M/1.45M [00:00<00:00, 34.6MiB/s]
download https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar to /home/aistudio/.paddleocr/cls/ch_ppocr_mobile_v2.0_cls_infer.tar
INFO 2025-05-26 08:05:31,915 predict_system.py:92] dt_boxes num : 65, elapse : 1.9299414157867432
[2025/05/26 08:05:31] root INFO: dt_boxes num : 65, elapse : 1.9299414157867432
INFO 2025-05-26 08:05:32,009 predict_system.py:107] cls num  : 65, elapse : 0.06732296943664551
[2025/05/26 08:05:32] root INFO: cls num  : 65, elapse : 0.06732296943664551
INFO 2025-05-26 08:05:32,183 predict_system.py:111] rec_res num  : 65, elapse : 0.16558265686035156
[2025/05/26 08:05:32] root INFO: rec_res num  : 65, elapse : 0.16558265686035156 [[[617.0, 56.0], [944.0, 56.0], [944.0, 87.0], [617.0, 87.0]], ('《塔类业务交付验收单', 0.9945518)] [[[10.0, 131.0], [127.0, 131.0], [127.0, 172.0], [10.0, 172.0]], ('客户:', 0.9867139)] [[[542.0, 128.0], [1142.0, 123.0], [1142.0, 162.0], [542.0, 167.0]], ('中国联合网络通信有限公司泰安市分公司', 0.99098516)] [[[858.0, 209.0], [994.0, 203.0], [996.0, 244.0], [860.0, 250.0]], ('铁塔名称', 0.996998)] [[[1059.0, 206.0], [1525.0, 203.0], [1525.0, 245.0], [1059.0, 247.0]], ('名嘉广场置业有限公司前绿化带', 0.9981682)] [[[73.0, 216.0], [205.0, 216.0], [205.0, 257.0], [73.0, 257.0]], ('需求名称', 0.998343)] [[[317.0, 216.0], [781.0, 211.0], [781.0, 249.0], [318.0, 254.0]], ('名嘉广场置业有限公司前绿化带', 0.9984528)] [[[861.0, 288.0], [991.0, 288.0], [991.0, 322.0], [861.0, 322.0]], ('铁塔区县', 0.99679285)] [[[46.0, 293.0], [224.0, 288.0], [225.0, 329.0], [47.0, 335.0]], ('运营商区县', 0.9963339)] [[[503.0, 293.0], [603.0, 293.0], [603.0, 327.0], [503.0, 327.0]], ('泰山区', 0.9958537)]

In [187]

print(result[4]) #resul[4]即为我们所需要的目标信息 print(result[6]) #信息一样,但是通过坐标我们可以发现result[4]才是我们需要的目标信息
[[[1059.0, 206.0], [1525.0, 203.0], [1525.0, 245.0], [1059.0, 247.0]], ('名嘉广场置业有限公司前绿化带', 0.9981682)] [[[317.0, 216.0], [781.0, 211.0], [781.0, 249.0], [318.0, 254.0]], ('名嘉广场置业有限公司前绿化带', 0.9984528)]

在使用方案一进行信息抽取的过程中,我们发现目标信息的输出位置并不固定,导致结果出错,在对比模型的输出与目标图片的特点后我们发现,PaddleOCR的默认输出顺序是先从上到下,后从左到右。

而在任务目标图片中,常有图片有略微倾斜,导致目标信息的输出位置移动。这里仍旧以图一为例:图一正常的目标信息位置应该为第七位即result[6],但由于图像倾斜,导致目标输出位置迁移到了result[4]。

倾斜情况如图:

5.3.2 方案二:基于识别框位置抽取目标信息

在方案一的实行过程中,发现输出结果中包含信息的识别区域信息,于是优化了方案一,首先计算并根据图片的文字分布情况调整得到目标信息位置的中心点,通过各个识别框与中心点的距离,定位目标识别框,从而抽取目标信息

In [18]

data = result[4][0] #data为图一的目标区域 center = [sum(e)/len(e) for e in zip(*data)] #计算目标框中心点 print(center)  center = [1292.0, 220.0] #由于目标框下方密集上方稀疏,所以将中心点y值略微上移,提高准确度
[1292.0, 225.25]

六、模型应用

In [ ]

import os path="/home/aistudio/images/"  #待读取的文件夹 path_list=os.listdir(path) path_list.sort() #对读取的路径进行排序 name_list = [] for filename in path_list: #会出现checkpoints文件,跳过     file = os.path.join(path, filename)     text=ocr.ocr(file,cls=True)     min=9999999     for t in text:             location = [sum(e)/len(e) for e in zip(*t[0])] #计算识别框中心点         if(((location[0]-center[0])**2+(location[1]-center[1])**2)

In [20]

name_list #带有same后缀的是用于区分相同名称
['名嘉广场置业有限公司前绿化带',  '泰山区凤凰小区南侧',  '泰山区华城丽景湾北',  '中国山东泰安主城区国棉北机房无',  '老王府村北十字路口绿化带',  '时代大厦西区',  '高新区龙腾路青年特车西',  '泰山区上峪环山路卧龙大观北',  '泰山区上峪环山路卧龙大观北same',  '泰山区白马石东一体化基站',  '泰山区徐家楼栗家庄南快装',  '泰山区建行干部学校',  '宁阳磁窑力博集团办公楼-3G',  '宁阳县东庄王家庄',  '宁阳华丰机电高庄山坡',  '杨家集-2',  '新泰市放城游坡村',  '新泰市宫里镇桃园村中间',  '无线',  '新泰市龙廷胡家庄新建',  '中国山东泰安新泰赵家峪机房无线',  '泉沟庙子牌村',  '新泰龙庭刘家石山子机房无线',  '新泰西韩',  '新泰星泰晶光电',  '新泰泉沟高崖头',  '新泰楼德镇封家庄',  '新泰谷里镇卧马村',  '新泰市西张庄湖西社区',  '岱岳区惠普西区西新建']

七、模型评价与改进方向

通过对比发现图四,图十七,图十九重命名存在错误,准确率达到90%,达到任务要求。

其中图四与图十七错误为选用的文字识别模型无法跨行识别,图十七为文字识别错误,所以后续改进方向以调整文字识别模型为主,使其可以跨行识别,或者选用PaddleOCR新提供的V3版本,增加文字识别的准确度。


# 自动化  # 自定义  # 卧龙  # 较高  # 中心点  # 置业有限公司  # 宁阳  # 重命名  # 表单  # 新泰市  # 新泰  # python  # https  # ocr  # 人工智能  # igs  # red  # 区别  # 百度  # ai  # 工具  # git 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: AI数据分析报告生成工具有哪些_一键生成可视化报告的AI工具推荐  AI写作避坑指南:小说家应避免的AI使用与创作技巧  唐库AI拆书工具如何提取核心观点_唐库AI拆书工具观点提取与标注方法【攻略】  11月电动两轮车线上销售排名出炉:九号份额达26.9%  提升Fortnite OG游戏性能:NVIDIA控制面板最佳设置  Midjourney怎么用一键生成漫画_Midjourney漫画生成方法【攻略】  PandaDoc vs. SignEasy: 2025 eSignature 平台终极对比  n8n:零代码AI自动化平台的终极指南和免费VPS设置  Google AI Studio 中的提示词微调实验教程  Vivo V50e 5G AI功能:最佳AI特性深度解析  豆包 AI 辅助进行初级绘本创作的剧情构思  3步教你用AI创作漫画脚本,从故事到分镜全搞定  AI无镜头相机Paragraphica:颠覆传统摄影的新方式  美食ASMR:感官盛宴与解压体验  构建AI工作流:利用BuildShip低代码平台赋能Gemini和Google Cloud  3步教你用AI帮你把菜谱转换成详细的烹饪步骤视频脚本  Django与React构建AI音乐推荐:数据库集成实战指南  软件测试进化史:从手动到AI,迎接测试新纪元  图像分割技术详解:定义、类型、技术与应用  AI图像生成偏见:克服与优化,打造更真实的数字形象  GitHub Copilot与Azure AI Foundry模型:加速AI编程实践  即梦ai能否生成节日主题插画_即梦ai节日主题关键词与元素库使用【攻略】  AI照片编辑:为你的单人照添加逼真女友,告别孤单  Jarvis AI终极指南:用AI快速撰写畅销亚马逊书籍  tofai入口官方网站 tofai网页版入口地址  Bluecap:加拿大AI会议助手,提升混合办公效率  tofai官方网站入口 tofai在线网页版登录  律师视角下的生成式AI:信息爆炸时代的法律实践与未来展望  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Amazon Rekognition: 图像与视频分析的强大AI工具  讯飞星火怎样一键生成教案_讯飞星火教案生成与学科选择【教程】  2025年AI招聘大师班:初学者友好且功能强大  历史影像解密:唇语专家如何还原一战士兵对话?  宝可梦化石精灵大揭秘:晶灿钻石视角下的精灵演化  挖掘用户数据:洞察与策略,提升播客全球影响力  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  教你用AI帮你生成一份详细的搬家清单,告别手忙脚乱  AMD Ryzen 5 2600: 游戏玩家高性价比之选  Weavernote:AI驱动的知识管理与高效笔记应用  Descript vs. Wisecut:AI视频编辑工具深度测评与最佳选择  通义千问怎样优化提示词合需求_通义千问需求契合技巧【步骤】  钉钉ai划词工具怎么使用划词查词_钉钉ai划词工具查词入口与释义查看【指南】  播客数据深度分析:用户地域分布及增长策略探讨  使用ChatGPT快速生成专辑封面:AI艺术创作指南  Codova AI:终极动态QR码生成器教程与功能详解  艺龙旅行AI怎样筛选最优车次_艺龙AI车次筛选与耗时最短推荐【攻略】  啦啦队女孩:青春活力与性感魅力的完美结合  AI绘图软件怎么用_AI绘图软件使用方法详细指南【教程】  人工智能时代:你需要知道的真相和未来趋势  为什么你的简历过不了筛选?用AI帮你诊断并修复漏洞 

 2025-07-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.