家教网站建设手机制作app教程

web/2025/10/2 8:11:43/文章来源:
家教网站建设,手机制作app教程,企业网站空间在哪里,企业oa办公软件飞桨#xff08;PaddlePaddle#xff09;是百度自主研发的中国首个开源开放、功能丰富的产业级深度学习平台#xff0c;以百度多年的深度学习技术研究和业务应用为基础。飞桨深度学习平台集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体#xff0c;还包括了… 飞桨PaddlePaddle是百度自主研发的中国首个开源开放、功能丰富的产业级深度学习平台以百度多年的深度学习技术研究和业务应用为基础。飞桨深度学习平台集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体还包括了飞桨企业版零门槛 AI 开发平台 EasyDL 和全功能 AI 开发平台 BML以及飞桨 AI Studio 学习与实训社区。飞桨于2016年正式开源秉承开源开放的理念建设了蓬勃发展的开源社区社区成员汇聚了框架开发者、算法研究者、硬件开发者和应用开发者等多种角色他们在自运转的生态中积极参与开源共建形成了一股强大的生态力量持续推动深度学习技术的创新迭代和产业应用。 2023飞桨黑客马拉松 PaddlePaddle Hackathon 第四期由深度学习技术及应用国家工程研究中心主办飞桨承办英特尔作为顶级赞助方OpenVINO™ 、Arm、Hugging Face、Jina、TVM、瑞芯微、算能、地平线等等开源项目和硬件合作伙伴共同出品旨在鼓励开发者了解与参与深度学习开源项目的共建。本项目是活动发布的第205号赛题需要开发者向 OpenVINO™ Notebooks ( https://github.com/openvinotoolkit/openvino_notebooks ) 提交一个基于飞桨和 OpenVINO™ 构建的项目相比于其他任务本任务更加偏向于模型的应用。 项目介绍 “表” 是一种随处可见的设备除了生活中常见的电表、水表外工业场景中还存在如压力表、工频场强仪等“表”。受区域因素和技术因素的制约并非每种“表”都能够自动采集数据还需要人工手动抄表工作枯燥、效率低、且容易产生抄录错误通过人工智能技术构造自动化的抄表流程能够极大的克服上述问题提高工作效率。目前大部分抄表相关的开源项目都需要在特定领域的数据集上进行微调但实际上抄表工作的抄录内容多为文字对于特定的表而言其布局和展示内容较为单一因此可以基于一些配置值在无需微调的情况下也可以实现抄表工作。本项目基于 PaddleOCR 和 OpenVINO™ 实现了一种无需微调的抄表器只需要人为设置一些和布局相关的配置信息即可实现表中数据的记录。 PaddleOCR PaddleOCR 是飞桨文字识别套件提供了多种复用性强的预训练模型。本项目使用了预训练模型 Chinese and English ultra-lightweight PP-OCR model (9.4M)更多的信息请参考 PaddleOCR Github (https://github.com/PaddlePaddle/PaddleOCR) 或 PaddleOCR Gitee (https://gitee.com/PaddlePaddle/PaddleOCR)。 一个标准的 OCR 流程包括了文字检测和文字识别在本项目中文字检测通过非深度学习的方式进行处理文字识别通过PaddleOCR的文字识别模型实现。 OpenVINO™ 和OpenVINO™ Notebooks OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包可以显著提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。能够使主流框架训练的模型在运行时减少资源需求并在从边缘到云的一系列英特尔®平台上高效部署。OpenVINO™ 在仓库 OpenVINO™Notebooks (https://github.com/openvinotoolkit/openvino_notebooks) 中提供了一些可以运行的 Jupyter* Notebooks用于学习和尝试使用 OpenVINO™ 工具套件。这些 Notebooks 旨在向各位开发者提供 OpenVINO™ 基础知识的介绍并教会大家如何利用我们的 API 来优化深度学习推理。 技术方案概览 本项目面向的应用场景是抄录特定的一类表的信息因此可以通过人工配置表面的尺寸以及各个元素在表中的布局实现从而跳过 OCR 模型对文字区域的检测并进一步对识别结果进行结构化输出。本项目的实现流程如下图所示主要分为个步骤 Step 1 配置图片中屏幕区域的坐标值这些坐标值也可以通过 cv2 的拐点检测或深度学习进行获取 Step 2 对图片进行预处理仿射变换 Step 3 配置待识别的元素对应的坐标并裁剪对应的区域 Step 4 如有需要可以对裁剪下来的区域进行预处理 Step 5 基于 OpenVINO™ 进行文字识别 Step 6 结构化输出信息 Step 7 如有需要对输出结果进行进一步精炼。在整个Pipeline中无需额外针对业务场景对模型进行训练或配置从深度学习的层面上完全依赖于开源模型仅需要人工地进行一些预处理或后处理可以极大的降低OCR模型的应用门槛同时也减轻了对数据准备和标注的依赖。 关键环节的代码实现 图片输入处理 由于本项目是一个零微调的项目因此为了保证识别模型的有效性需要人工对齐输入信息。 修正倾斜的图片将图片中的屏幕区域修正到指定的大小根据从说明书等地方获取到的设备信息设定待识别的区域在屏幕上的布局。 通过下面代码可以将图片从倾斜状态修正。 # 配置坐标信息# The coordinates of the corners of the screen in case 1POINTS  [[1121, 56],    # Left top[3242, 183],   # right top[3040, 1841],  # right bottom[1000, 1543]]  # left bottom# The size of the screen in case 1 DESIGN_SHAPE  (1300, 1000)# 配置坐标信息 # The coordinates of the corners of the screen in case 1 POINTS  [[1121, 56],    # Left top[3242, 183],   # right top[3040, 1841],  # right bottom[1000, 1543]]  # left bottom# The size of the screen in case 1 DESIGN_SHAPE  (1300, 1000)# 配置坐标信息 # The coordinates of the corners of the screen in case 1 POINTS  [[1121, 56],    # Left top[3242, 183],   # right top[3040, 1841],  # right bottom[1000, 1543]]  # left bottom# The size of the screen in case 1 DESIGN_SHAPE  (1300, 1000)基于 OpenVINO™ 加载 PaddleOCR 识别模型进行预测 加载模型 使用 OpenVINO™ 加载飞桨模型无需经过任何转换只需要完成创建环境、读取模型和生成推理接口3个步骤。假设当前模型保存在 ch_PP-OCRv3_rec_infer 目录下可以通过以下代码一键加载模型 from openvino.runtime import Core# Initialize OpenVINO Runtime for text recognition.core  Core()# Read the model and corresponding weights from a file.rec_model_file_path  ch_PP-OCRv3_rec_infer/inference.pdmodelrec_model  core.read_model(modelrec_model_file_path)# Assign dynamic shapes to every input layer on the last dimension. for input_layer in rec_model.inputs:input_shape  input_layer.partial_shapeinput_shape[3]  -1rec_model.reshape({input_layer: input_shape})rec_compiled_model  core.compile_model(modelrec_model, device_nameCPU)# Get input and output nodes. rec_input_layer  rec_compiled_model.input(0) rec_output_layer  rec_compiled_model.output(0)文字识别 依旧对于上述示例图片希望结构化输出以下内容[{“Info_Probe”:“”}, {“Freq_Set”:“”}, {“Freq_Main”:“”}, {“Val_Total”:“”},{“Val_X”:“”}, {“Val_Y”:“”}, {“Val_Z”:“”}, {“Unit”:“”}, {“Field”:“”}]。 输出示例如下图所示 基于仿射变换的结果配置各个元素在图片上的布局这个配置对于同一批表来说是固定的。 # features and layout information DESIGN_LAYOUT  {Info_Probe:[14, 36, 410, 135],  # feature_name, xmin, ymin, xmax, ymaxFreq_Set:[5, 290, 544, 406],Val_Total:[52, 419, 1256, 741],Val_X:[19, 774, 433, 882],Val_Y:[433, 773, 874, 884],Val_Z:[873, 773, 1276, 883],Unit:[1064, 291, 1295, 403],Field:[5, 913, 243, 998]}配置文字识别预处理函数。 首先将传入的检测框转化为图片在本项目中检测框即为整个图片我们依然可以复用这个模块。 def prep_for_rec(dt_boxes, frame):Preprocessing of the detected bounding boxes for text recognitionParameters:dt_boxes: detected bounding boxes from text detection     frame: original input frame ori_im  frame.copy()img_crop_list  [] for bno in range(len(dt_boxes)):tmp_box  copy.deepcopy(dt_boxes[bno])img_crop  get_rotate_crop_image(ori_im, tmp_box)img_crop_list.append(img_crop)img_num  len(img_crop_list)# 计算对应的缩放比例width_list  []for img in img_crop_list:width_list.append(img.shape[1] / float(img.shape[0]))# 对文字进行排序以加速推理indices  np.argsort(np.array(width_list))return img_crop_list, img_num, indices其次完成裁剪后将图片分装成多个 batch按批预测。 def batch_text_box(img_crop_list, img_num, indices, beg_img_no, batch_num):Batch for text recognitionParameters:img_crop_list: processed bounding box images with detected bounding boximg_num: number of bounding boxes from text detectionindices: sorting for bounding boxes to speed up text recognitionbeg_img_no: the beginning number of bounding boxes for each batch of text recognition inferencebatch_num: number of images in each batchnorm_img_batch  []max_wh_ratio  0end_img_no  min(img_num, beg_img_no  batch_num)for ino in range(beg_img_no, end_img_no):h, w  img_crop_list[indices[ino]].shape[0:2]wh_ratio  w * 1.0 / hmax_wh_ratio  max(max_wh_ratio, wh_ratio)for ino in range(beg_img_no, end_img_no):norm_img  resize_norm_img(img_crop_list[indices[ino]], max_wh_ratio)norm_img  norm_img[np.newaxis, :]norm_img_batch.append(norm_img)norm_img_batch  np.concatenate(norm_img_batch)norm_img_batch  norm_img_batch.copy() return norm_img_batch再次完成识别后将识别结果转化为汉字这一步需要一个映射表可以在  PaddleOCR 或者 OpenVINO™ Notebook 中找到。 class RecLabelDecode(object): Convert between text-label and text-index def __init__(self,character_dict_pathNone,character_typech,use_space_charFalse):# 初始化函数def __call__(self, preds, labelNone, *args, **kwargs):# 对字符进行解码# 解码函数用于将id转换为对应地文字 def decode(self, text_index, text_probNone, is_remove_duplicateFalse): convert text-index into text-label. result_list  []ignored_tokens  self.get_ignored_tokens()batch_size  len(text_index)for batch_idx in range(batch_size):char_list  []conf_list  []for idx in range(len(text_index[batch_idx])):# 将id转换为对应地文字text  .join(char_list)result_list.append((text, np.mean(conf_list)))return result_list最后就可以识别与输出啦 下面以 Freq_Set 为例进行文字识别 # 输出结构体struct_result  {}# Crop imgs according the layout informationxmin, ymin, xmax, ymax  DESIGN_LAYOUT[Freq_Set]crop_img  img[ymin:ymax, xmin:xmax]h  ymax - ymin  # height of crop_imgw  xmax - xmin  # width of crop_img dt_boxes  [np.array([[0,0],[w,0],[w,h],[0,h]],dtypefloat32)] batch_num  1# since the input img is cropped, we do not need a detection model to find the position of texts # Preprocess detection results for recognition. img_crop_list, img_num, indices  prep_for_rec(dt_boxes, crop_img)# txts are the recognized text results rec_res  [[, 0.0]] * img_num txts  []for beg_img_no in range(0, img_num):# Recognition starts from here.norm_img_batch  batch_text_box(img_crop_list, img_num, indices, beg_img_no, batch_num)# Run inference for text recognition. rec_results  rec_compiled_model([norm_img_batch])[rec_output_layer]# Postprocessing recognition results.rec_result  text_decoder(rec_results)for rno in range(len(rec_result)):rec_res[indices[beg_img_no  rno]]  rec_result[rno]   if rec_res:txts  [rec_res[i][0] for i in range(len(rec_res))] # record the recognition result struct_result[Freq_Set]  txts[0] print(txts[0])结构化输出与后处理 上述步骤已经实现了使用 OpenVINO™ 加载 PaddleOCR 模型并进行预测但实际上由于模型没有进行微调因此对于当前的业务场景来说可能不够完美可以通过一些简单的逻辑进行处理。如示例图片中右上角区域文字“100Hz 实时值”在模型预测时“Hz”可能被识别为“H2”此时可以通过将“H2”替换为“Hz”提高最后的输出效果。 对于示例图片的这种表可以定义如下后处理函数 Post-processing, fix some error made in recognitiondef post_processing(results, post_configration):Postprocessing function for correcting the recognition errors.Parameters:results (Dict): The result directory.post_configration (Dict): The configuration directory.for key in results.keys():if len(post_configration[key])  0:continue  # nothing to dofor post_item in post_configration[key]:key_word  post_item[0]if key_word  MP:  # mappingsource_word  post_item[1]target_word  post_item[2]if source_word in results[key]:results[key]  target_wordelif key_word  RP:  # removingsource_word  post_item[1]target_word  post_item[2]results[key]  results[key].replace(source_word, target_word)elif key_word  AD:  # add pointadd_position  post_item[1]results[key]  results[key][:add_position]  .  results[key][add_position:] return results定义了辅助函数后即可通过配置值进行后处理。辅助函数中共有三种配置的预处理类型分别是映射、替换和增加小数点。以识别结果“深头:LF-01”为例“映射”(MP)操作意味着只要文字包含“LF”即将整段文字替换为“探头:LF-01”。以识别结果“100H2 实时值”为例“替换”(RP)操作意味着将文字中的“H2”替换为“Hz”。以识别结果“613475”为例如果已知最后两位必然为小数位并且小数点极小容易被漏检增加小数点(AD)操作可以快捷地在指定位上增加小数点。 下述代码给出了使用配置值进行后处理地示例。 # Congiguration for postprocessing of the resultsRESULT_POST  {Info_Probe:[[MP, LF, 探头:LF-01]],  # words need to be mappedFreq_Set:[[RP, 实时值, ], [RP,  , ], [RP, H2, HZ]],  # words need to be replaceVal_Total:[[RP, H2, Hz]],Val_X:[[RP, X, ], [RP, :, ]],Val_Y:[[RP, Y, ], [RP, :, ]],Val_Z:[[RP, Z, ], [RP, :, ]],Unit:[[MP, T, μT],[MP, kV, kV/m],[MP, kv, kV/m],[MP, vm, V/m],[MP, Vm, V/m],[MP, A, A/m]],Field:[]}  # nothing need to do# Postprocessing, to fix some error made in recognition struct_result  post_processing(struct_result, RESULT_POST)# Print result print(struct_result)全流程一键运行 将上述关键代码组合起来可以进行本项目的全流程的运行~ # 为了避免因为图片模糊导致的漏检配置一个输出模板从而让每个图片输出格式都一致# Output template in case 1RESULT_TEMP  {Info_Probe:探头:---,Freq_Set:,Val_Total:无探头,Val_X:,Val_Y:,Val_Z:,Unit:A/m,Field:常规} # the input of recognition should be image, DESIGN information, compiled_model def main_function(img, DESIGN_LAYOUT, RESULT_TEMP, preprocess_functionNone):# 根据配置信息获取输出结构的格式struct_result  copy.deepcopy(RESULT_TEMP)# 逐个访问各个检测目标for key in DESIGN_LAYOUT.keys():# 裁剪各个区域的图片并进行预处理# 对预处理后的图片进行识别# 返回识别结果return struct_result下面是调用示例 # 读取图片并进行图片预处理 img  cv2.imread(example1.jpg) img  pre_processing(img, POINTS, DESIGN_SHAPE)# 进行文字识别 struct_result  main_function(img, DESIGN_LAYOUT, RESULT_TEMP)# 对识别结果进行精炼 instruct_result  post_processing(struct_result, RESULT_POST)项目总结 关于 “ 基于 OpenVINO™ 与 PaddleOCR 的结构化输出 Pipeline ” 赛题 本文介绍了一种基于开源OCR模型 (https://github.com/PaddlePaddle/PaddleOCR) 进行读表的 Pipeline这个 Pipeline 能够在不进行模型微调的前提下完成抄表工作并按照格式输出内容。整个 Pipeline 专注于 OCR 模型的调用但仍可以拼接一些检测模型或边缘检测方法用于自动确定屏幕区域以降低人力提高效率。完整的源码地址见 https://github.com/openvinotoolkit/openvino_notebooks/pull/1030https://github.com/openvinotoolkit/openvino_notebooks/tree/main/notebooks/203-meter-reader 关于飞桨黑客马拉松第四期 飞桨黑客马拉松第四期活动发布后开发者们反响热烈围绕四大赛道展开了激烈角逐超过2000位社区开发者参与到飞桨黑客松中完成800余次任务认领PR提交200个任务被认领历经三个月脑力激荡的 Hack 时光共有80个团队突出重围累计完成142项任务。本期黑客松活动在任务完成数量、参与团队规模、项目类型丰富度、合作伙伴数量等方面打破了以往飞桨黑客松的记录足可见开发者们建设飞桨生态的热情。 期待这些开发者团队持续在飞桨开源生态中迸发出光彩和力量与飞桨一路同行一起建设更优雅的飞桨开源社区。

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

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

相关文章

温州本地网站平台国外域名注册哪个网站好

虽然单花色胡牌算法面试时写出来了,但是完整的胡牌算法却没有写,既然遇到了,秉着不抛弃不放弃的精神,当然不能原谅懒惰的自己了。下面这篇为一个完整的胡牌算法。胡牌规则除了以下几点,其余与单花色胡牌规则一致&#…

网站建设熊掌号wordpress分类产品

注:新添加的硬盘,如果没有分区,可以直接使用pvcreate进行创建,然后用vgextend进行扩展如果新添加的硬盘经过分区,则要把需要扩展的分区修改为8e格式,则进行扩展以上内容实测~相关概念:pv:物理卷…

优化建站seo门户php做的直播网站

介绍我们知道,把神经网络拆解,可以把它归结为几个元素的排列组合而成,例如,以卷积神经网络为例,其主要由卷积层,池化层,残差连接,注意力层,全连接层等组成,如…

长沙建设网站哪家好关键词优化工具互点

1. 题目 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: ‘A’ (表示苹果)和 ‘.’ (表示空白格子)。 你需要切披萨 k-1 次,得到 k 块披萨并送给别人。 切披萨的每一刀…

山东网站建设优化知名网站制作企业

rgb2gray是matlab内部一种处理图像的函数,通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能,调用这个功能的格式是I rgb2gray(RGB),意思是将真彩色图像RGB转换为灰度强度图像…

域名被墙检测网站网站开发的框架协议

目录原理算法步骤优缺点源码效果原图输出平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文摘自2、Harris角点检测算法 —— 诺亚方舟369 原理 Harris算子是对Moravec算子的改进,包括: (1)Harris算子用…

企业网站建设规划机械外贸有哪些平台

![在这里插入图片描述](https://img-blog.csdnimg.cn/d55799a22b724099930eb7fb67260a12.png 最后 保存就可以了

最全的提交网站入口大全网站关键词 公司

zoj2760:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode2760 题意:给你一张有向带权图,然后问你最短路径有多少条。 题解:这一题用到了网络流,一开始,我想到用找到一条最短路,然后删除这条…

成都外贸建站wordpress创建标签

文章目录1. 题目2. 解题1. 题目 链接:https://ac.nowcoder.com/acm/contest/9887/A 来源:牛客网 牛牛有现在有n个物品,每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品,想使这若干个物品的总重量最大&…

php网站开发技术课程19

欢迎关注专栏:里面定期分享Java架构技术知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。程序员圈内那点事​zhuanlan.zhihu.com经过半年的沉淀,加上对MySQL,redis…

网站建设出找不到网页建设一个网站需要什么人员

算法的备胎Hash和找靠山的队列 备胎Hash Hash,不管是算法,还是在工程中都会大量使用。很多复杂的算法问题都用Hash能够轻松解决,也正是如此,在算法例就显得没什么思维含量,所以Hash是应用里的扛把子,但在算…

襄阳做网站公司有哪些浙江建设人才网

akka2.5最近宣布了Akka工具包 2.3.0版本的发布。 Akka是一个非常有用的工具包和运行时,用于在JVM上构建高度并发,分布式和容错的事件驱动的应用程序。 它是分布式的,并提供了Actor,Future和STM等高级抽象。 它的新版本在2.2.0发布…

一站式营销推广平台怎么免费建个人网站

现在本文也转到了我自己的博客上,地址:月城小馆Apache Common组件是java开发中常用的工具,其中的common-lang包是java基本数据类型的处理工具,包括数字、字符串、日期时间等多种工具类。在org.apache.commons.lang包中有一个随机数…

焦作商城网站建设国外特效网站

文章目录 题目方法一:前序遍历(构造集合) 集合(构造新树)方法二:原地构建方法三:前序遍历--迭代(构造集合) 集合(构造新树) 题目 方法一&#x…

网络营销有哪些功能网站优化排名易下拉软件

Linux学习资料 Linux学习资料 Linux学习资料 基础入门 了解 Linux 基础概念: Linux 是开源类 Unix 操作系统,由内核、Shell 和应用程序组成。学习时要了解其开源、稳定、安全等特性,以及多用户、多任务的特点。 选择并安装 Linux 发行版…

网站的建设与管理系统数字营销的定义

目录 python实现修改3d旋转顺序 矩阵批量计算 因为矩阵相乘不能交换,所以3d旋转顺序不能交换。 python实现修改3d旋转顺序 import numpy as np from scipy.spatial.transform import Rotation as Rdef convert_rotation(y, x, z, from_order, to_order):# 创建一个旋转对象…

电影网站域名需要备案学院网站建设目的

一,Hyperloglog介绍 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。花费 12 KB 内存,就可以计算接近 2^64 个不…

广安门内网站建设网站建设费用价格明细表

目录 购物车效果展示: 购物车代码: 购物车效果展示: 此项目添加、修改、删除数据的地方都写了浏览器都会把它存储起来 下次运行项目时会把浏览器数据拿出来并在页面展示 Video_20230816145047 购物车代码: 复制完代码&#xff0…

建设网站群的指导思想个人网站怎么接广告

导读: 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一部分行为进行抽象。 类配合实现接口 实现(impleme…

网站建设后预期推广方式wordpress网站添加背景音乐

<AtIconclassName"que_header_left_icon"prefixClass"icon"value"icon-share"size"16"></AtIcon>