# XEduHub预置任务 XEduHub的预置任务也称内置模型,指预置的各种优质开源AI模型,包含了图像分类、目标检测、关键点检测、OCR等常见的任务。内置模型来自各种开源社区,旨在降低初学者的入门门槛。 **点击这里在浦育平台体验项目XEduHub实例代码-入门完整版** https://www.openinnolab.org.cn/pjlab/project?id=65518e1ae79a38197e449843&backpath=/pjlab/projects/list#public 通过学习“XEduHub实例代码-入门完整版”,可以在项目实践中探索XEduHub的魅力,项目中通俗易懂的讲解和实例代码也能帮助初学者快速入门XEduHub。 ## 1. 目标检测 目标检测是一种计算机视觉任务,其目标是在图像或视频中检测并定位物体的位置,并为每个物体分配类别标签。 实现目标检测通常包括特征提取、物体位置定位、物体类别分类等步骤。这一技术广泛应用于自动驾驶、安全监控、医学影像分析、图像搜索等各种领域,为实现自动化和智能化应用提供了关键支持。 XEduHub目标支持目标检测任务有:人体目标检测`det_body`、人脸目标检测`det_face`、人手目标检测`det_hand`和coco目标检测`det_coco`。 ### 人体目标检测 人体目标检测的任务是在图像或视频中检测和定位人体的位置,并为每个检测到的人体分配一个相应的类别标签。借助此任务,一般可以实现人体画面的识别与提取,为后续的图像处理和分析提供基础。 XEduHub提供了进行人体目标检测的模型:`det_body`,`det_body_l`,这两个模型能够进行人体目标检测,后者为large增强版模型。  #### 代码样例 ```python from XEdu.hub import Workflow as wf # 导入库 det_body = wf(task='det_body') # 实例化模型 result,img_with_box = det_body.inference(data='data/det_body.jpg',img_type='pil') # 进行模型推理 format_result = det_body.format_output(lang='zh') # 将推理结果进行格式化输出 det_body.show(img_with_box)# 展示推理图像 det_body.save(img_with_box,'img_with_box.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf det_body = wf(task='det_body') ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。人体目标检测模型为`det_body`, `det_body_l`。`det_body_l`相比`det_body`模型规模较大,性能较强,但是推理的速度较慢。 - `checkpoint`(str):指定模型文件所在的路径,如`det_body = wf(task='det_body',checkpoint='det_body.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`det_body.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python result = det_body.inference(data='data/det_body.jpg') # 进行模型推理 ``` 推理方式2: ```python result,img_with_box = det_body.inference(data='data/det_body.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`(str|numpy.ndarray):指定待目标检测的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(flag):可取值`[True,False]` ,如果取值为`True`,在推理完成后会直接输出目标检测完成后的图像,默认为`False`。 - `img_type`(str):目标检测完成后会返回含有目标检测框的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,即如果不传入值,则不会返回图。 - `thr`(float):设置检测框阈值,取值范围为`[0,1]`超过该阈值的检测框被视为有效检测框,进行显示,默认值为0.3。 模型推理返回结果: - `result`(numpy.ndarray):以二维数组的形式保存了检测框左上角顶点的坐标(x1,y1)和右下角顶点的坐标(x2,y2)(之所以是二维数组,是因为该模型能够检测多个人体,因此当检测到多个人体时,就会有多个[x1,y1,x2,y2]的一维数组,所以需要以二维数组形式保存),我们可以利用这四个数据计算出其他两个顶点的坐标,以及检测框的宽度和高度。 - `img_with_box`(numpy.ndarray):是个三维数组,以img_type所设置的格式保存了包含了检测框的图像。 ##### 3. 结果输出 ```python format_result = det_body.format_output(lang='zh')# 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str):设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool):设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,共有两个键:`检测框`、`分数`。检测框以二维数组形式保存了每个检测框的坐标信息[x1,y1,x2,y2],而分数则是对应下标的检测框的置信度,以一维数组形式保存。 ``` # 输出结果 {'检测框': [[323.2777170453753, 72.95395088195801, 917.5945354189192, 1130.7357228142876]], '分数': [0.8851305]} ``` ```python det_body.show(img_with_box)# 展示推理图像 ``` `show()`能够输出带有检测框的结果图像。  ##### 4. 结果保存 ```python det_body.save(img_with_box,'img_with_box.jpg')# 保存推理图像 ``` `save()`方法能够保存带有检测框的图像 该方法接收两个参数,第一个参数是图像数据,另一个是图像的保存路径。 ### 人脸目标检测 人脸目标检测指的是检测和定位一张图像中的人脸。XEduHub使用的是opencv的人脸检测模型,能够快速准确地检测出一张图像中所有的人脸。XEduHub提供了进行人脸目标检测的模型:`det_face`,能够快速准确地检测出图像中的所有人脸。 #### 代码样例 ```python from XEdu.hub import Workflow as wf det_face = wf(task='det_face') result,img_with_box = det_face.inference(data='data/det_face.jpg',img_type='pil') # 进行模型推理 format_result = det_face.format_output(lang='zh') # 将推理结果进行格式化输出 det_face.show(img_with_box) # 展示推理图像 det_face.save(img_with_box,'img_with_box.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf det_face = wf(task='det_face') ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。人脸目标检测模型为`det_face`。 - `checkpoint`(str):指定模型文件所在的路径,如`det_face = wf(task='det_face',checkpoint='det_face.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`det_face.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python result = det_face.inference(data='data/det_face.jpg') # 进行模型推理 ``` 推理方式2: ```python result,img_with_box = det_face.inference(data='data/det_face.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`(str|numpy.ndarray):指定待目标检测的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(flag):可取值`[True,False]` ,如果取值为`True`,在推理完成后会直接输出目标检测完成后的图像,默认为`False`。 - `img_type`(str):目标检测完成后会返回含有目标检测框的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,即如果不传入值,则不会返回图。 - `minSize`(tuple(int,int)):检测框的最小尺寸,小于该尺寸的目标会被过滤掉,默认为(50,50)。 - `maxSize`(tuple(int,int)):检测框的最大尺寸,大于该尺寸的目标会被过滤掉,默认为输入图像的大小。 - `scaleFactor`(float):该参数用于缩放图像,以便在检测过程中使用不同大小的窗口来识别人脸。较小的值会导致检测速度加快,但可能会错过一些小的人脸;较大的值可以提高检测的准确性,但会减慢检测速度。通常,这个值会在1.1到1.5之间进行调整,默认为1.1。 - `minNeighbors`(int):该参数定义了构成检测目标的最小邻域矩形个数。如果这个值设置得太高,可能会导致检测器过于严格,错过一些实际的人脸;如果设置得太低,检测器可能会变得过于宽松,错误地检测到非人脸区域。通常,这个值会在2到10之间进行调整,默认为5。 模型推理返回结果: - `result`(numpy.ndarray)::以二维数组的形式保存了检测框左上角顶点的坐标(x1,y1)和右下角顶点的坐标(x2,y2)(之所以是二维数组,是因为该模型能够检测多个人脸,因此当检测到多个人脸时,就会有多个[x1,y1,x2,y2]的一维数组,所以需要以二维数组形式保存),我们可以利用这四个数据计算出其他两个顶点的坐标,以及检测框的宽度和高度。 - `img_with_box`(numpy.ndarray):是个三维数组,以img_type所设置的格式保存了包含了检测框的图像。 ##### 3. 结果输出 ```python format_result = det_face.format_output(lang='zh')# 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str):设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool):设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,只有一个键:`检测框`。检测框以二维数组形式保存了每个检测框的坐标信息[x1,y1,x2,y2]。需要注意的是由于使用的为opencv的人脸检测模型,因此在`format_output`时缺少了分数这一指标。 ``` # 输出结果 {'检测框': [[202, 237, 940, 975]]} ```  结果可视化: ```python det_face.show(img_with_box) # 展示推理图像 ``` `show()`能够输出带有检测框的结果图像。  多人脸检测结果如下:(如果看到很多不该识别为人脸的地方出现了检测框,我们可以在推理是增加`minSize`参数来设置检测框的最小尺寸,将小于该尺寸的目标过滤掉,默认为(50,50),同时也可以增加`maxSize`参数来设置检测框的最大尺寸,大于该尺寸的目标会被过滤掉,默认为输入图像的大小)  ##### 4. 结果保存 ```python det_face.save(img_with_box,'img_with_box.jpg')# 保存推理图像 ``` `save()`方法能够保存带有检测框的图像 该方法接收两个参数,第一个参数是图像数据,另一个是图像的保存路径。 ### 手部目标检测 手部目标检测指的是检测和定位一张图像中的人手。XEduHub提供了进行手部目标检测的模型:`det_hand`,能够快速准确地检测出图像中的所有人手。 #### 代码样例 ```python from XEdu.hub import Workflow as wf det_hand = wf(task='det_hand') result,img_with_box = det_hand.inference(data='data/det_hand.jpg',img_type='pil') # 进行模型推理 format_result = det_hand.format_output(lang='zh') # 将推理结果进行格式化输出 det_hand.show(img_with_box) # 展示推理图像 det_hand.save(img_with_box,'img_with_box.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf det_hand = wf(task='det_hand') ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。手部关键点提取模型为`det_hand`。 - `checkpoint`(str):指定模型文件所在的路径,如`det_hand = wf(task='det_hand',checkpoint='det_hand.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`det_hand.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python result = det_hand.inference(data='data/det_hand.jpg') # 进行模型推理 ``` 推理方式2: ```python result,img_with_box = det_hand.inference(data='data/det_hand.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`(str|numpy.ndarray):指定待目标检测的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(flag): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出目标检测完成后的图像。 - `img_type`(str):目标检测完成后会返回含有检测框的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,如果不传入值,则不会返回图。 - `thr`(float): 设置检测框阈值,取值范围为`[0,1]`超过该阈值的检测框被视为有效检测框,进行显示,默认值为0.3。 模型推理返回结果: - `result`(numpy.ndarray):以二维数组的形式保存了检测框左上角顶点的坐标(x1,y1)和右下角顶点的坐标(x2,y2)(之所以是二维数组,是因为该模型能够检测多个人手,因此当检测到多个人手时,就会有多个[x1,y1,x2,y2]的一维数组,所以需要以二维数组形式保存),我们可以利用这四个数据计算出其他两个顶点的坐标,以及检测框的宽度和高度。 - `img_with_box`(numpy.ndarray):是个三维数组,以img_type所设置的格式保存了包含了检测框的图像。 ##### 3. 结果输出 ```python format_result = det_hand.format_output(lang='zh') # 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str):设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool):设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 ``` # 输出结果 {'检测框': [[354.9846431187221, 171.7757524762835, 993.5257284981864, 867.7952793666294]], '分数': [0.8558253]} ```  `format_result`以字典形式存储了推理结果,共有两个键:`检测框`、`分数`。检测框以二维数组形式保存了每个检测框的坐标信息[x1,y1,x2,y2],而分数则是对应下标的检测框的置信度,以一维数组形式保存。 结果可视化: ```python det_hand.show(img_with_box) # 展示推理图像 ``` `show()`能够输出带有检测框的结果图像。  ##### 4. 结果保存 ```python det_hand.save(img_with_box,'img_with_box.jpg') # 保存推理图像 ``` `save()`方法能够保存带有检测框的图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ### coco目标检测 COCO(Common Objects in Context)是一个用于目标检测和图像分割任务的广泛使用的数据集和评估基准。它是计算机视觉领域中最重要的数据集之一,在XEduHub中的该模型能够检测出80类coco数据集中的物体:`det_coco`,以及加强版`det_coco_l`。  #### 代码样例 ```python from XEdu.hub import Workflow as wf det_coco = wf(task='det_coco') result,img_with_box = det_coco.inference(data='data/det_coco.jpg',img_type='pil') # 进行模型推理 format_result = det_coco.format_output(lang='zh') # 将推理结果进行格式化输出 det_coco.show(img_with_box) # 展示推理图像 det_coco.save(img_with_box,'img_with_box.jpg')# 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf det_coco = wf(task='det_coco') ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。coco目标检测的模型为`det_coco`, `det_coco_l`。`det_coco_l`相比`det_coco`模型规模较大,性能较强,但是推理的速度较慢。 - `checkpoint`(str):指定模型文件所在的路径,如`det_coco = wf(task='det_coco',checkpoint='det_coco.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`det_coco.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python result = det_coco.inference(data='data/det_coco.jpg') ``` 推理方式2: ```python result,img_with_box = det_coco.inference(data='data/det_coco.jpg',img_type='pil') ``` 模型推理`inference()`可传入参数: - `data`(str|numpy.ndarray):指定待目标检测的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(flag):可取值`[True,False]` ,如果取值为`True`,在推理完成后会直接输出目标检测完成后的图像,默认为`False`。 - `img_type`(str):目标检测完成后会返回含有目标检测框的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,即如果不传入值,则不会返回图。 - `thr`(float):设置检测框阈值,取值范围为`[0,1]`,默认值为0.3,分数(置信度)小于该阈值的检测结果被视为无效,将自动过滤(不显示)。 - `target_class`(str|list):该参数在使用`det_coco`的时候可以指定要检测的对象,如:`target_class`='person',`target_class`=['person','cake']。 若要查看coco目标检测中的所有类别可运行以下代码: ```python wf.coco_class() ``` ``` # 输出结果 {1: 'person', 2: 'bicycle', 3: 'car', 4: 'motorbike', 5: 'aeroplane', 6: 'bus', 7: 'train', 8: 'truck', 9: 'boat', 10: 'traffic light', 11: 'fire hydrant', 12: 'stop sign', 13: 'parking meter', 14: 'bench', 15: 'bird', 16: 'cat', 17: 'dog', 18: 'horse', 19: 'sheep', 20: 'cow', 21: 'elephant', 22: 'bear', 23: 'zebra', 24: 'giraffe', 25: 'backpack', 26: 'umbrella', 27: 'handbag', 28: 'tie', 29: 'suitcase', 30: 'frisbee', 31: 'skis', 32: 'snowboard', 33: 'sports ball', 34: 'kite', 35: 'baseball bat', 36: 'baseball glove', 37: 'skateboard', 38: 'surfboard', 39: 'tennis racket', 40: 'bottle', 41: 'wine glass', 42: 'cup', 43: 'fork', 44: 'knife', 45: 'spoon', 46: 'bowl', 47: 'banana', 48: 'apple', 49: 'sandwich', 50: 'orange', 51: 'broccoli', 52: 'carrot', 53: 'hot dog', 54: 'pizza', 55: 'donut', 56: 'cake', 57: 'chair', 58: 'sofa', 59: 'pottedplant', 60: 'bed', 61: 'diningtable', 62: 'toilet', 63: 'tvmonitor', 64: 'laptop', 65: 'mouse', 66: 'remote', 67: 'keyboard', 68: 'cell phone', 69: 'microwave', 70: 'oven', 71: 'toaster', 72: 'sink', 73: 'refrigerator', 74: 'book', 75: 'clock', 76: 'vase', 77: 'scissors', 78: 'teddy bear', 79: 'hair drier', 80: 'toothbrush'} ``` 模型推理返回结果: - `result`(numpy.ndarray):以二维数组的形式保存了检测框左上角顶点的坐标(x1,y1)和右下角顶点的坐标(x2,y2)(之所以是二维数组,是因为该模型能够检测多个对象,因此当检测到多个对象时,就会有多个[x1,y1,x2,y2]的一维数组,所以需要以二维数组形式保存),我们可以利用这四个数据计算出其他两个顶点的坐标,以及检测框的宽度和高度。 ``` # reslut array([[ 4.14969308, 164.72434085, 157.05228533, 260.79559871], [548.76094273, 322.64147513, 585.47729492, 400.10044466], [291.30113874, 216.19574056, 378.10302734, 325.63501167], [362.52070836, 215.27021027, 442.51865932, 318.6803018 ], [547.75268555, 297.44887938, 587.52868652, 399.59864902], [214.87919399, 230.39230279, 302.72096906, 321.90567071], [548.62234933, 330.30918053, 585.72174072, 399.95723615], [198.86025565, 178.02907828, 261.54931205, 215.89466899]]) ```  - `img_with_box`(numpy.ndarray):是个三维数组,以img_type所设置的格式保存了包含了检测框的图像。 ##### 3. 结果输出 ```python format_result = det_coco.format_output(lang='zh') # 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str):设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool):设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 ``` # 输出结果 {'检测框': [[4.149693080357143, 164.72434084756034, 157.05228533063615, 260.79559871128623], [548.7609427315848, 322.64147513253346, 585.477294921875, 400.100444657462], [291.3011387416295, 216.19574056352886, 378.10302734375, 325.63501167297363], [362.5207083565848, 215.27021026611328, 442.51865931919644, 318.68030180249895], [547.752685546875, 297.44887937818254, 587.5286865234375, 399.5986490249634], [214.8791939871652, 230.39230278560092, 302.7209690638951, 321.90567071097234], [548.6223493303571, 330.30918053218295, 585.7217407226562, 399.95723615373885], [198.8602556501116, 178.02907827922274, 261.549312046596, 215.8946689878191]], '分数': [0.74398744, 0.49514472, 0.4024352, 0.3905959, 0.3684283, 0.34017423, 0.33570302, 0.3242398], '类别': ['tvmonitor', 'vase', 'chair', 'chair', 'bottle', 'chair', 'bottle', 'pottedplant']} ``` `format_result`以字典形式存储了推理结果,共有三个键:`检测框`、`分数`和`类别`。检测框以二维数组形式保存了每个检测框的坐标信息[x1,y1,x2,y2],而分数则是对应下标的检测框的置信度,以一维数组形式保存,类别则是检测框中对象所属的类别,以一维数组形式保存。 ```python det_coco.show(img_with_box) # 展示推理图像 ``` `show()`能够输出带有检测框以及对应类别的结果图像。  ##### 4. 结果保存 ```python det_coco.save(img_with_box,'img_with_box.jpg') # 保存推理图像 ``` `save()`方法能够保存带有检测框以及对应类别的图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ## 2. 关键点识别 关键点识别是深度学习中的一项关键任务,旨在检测图像或视频中的关键位置,通常代表物体或人体的重要部位。XEduHub支持的关键点识别任务有:人体关键点`pose_body`、人脸关键点`pose_face`、人手关键点`pose_hand`和所有人体关键点识别`pose_wholebody`。 **注意事项**:这里我们强烈建议提取关键点之前应**先进行目标检测**。既可实现效果更好的单目标的关键点识别,且可以实现多目标的关键点识别。 例如进行人体关键点检测`pose_body`之前,先使用`det_body`在图像中检测中人体目标,提取人体画面,再对每个人体目标进行更加精准的关键点检测,而且当画面有多个人时,也能将画面中每个人的关键点均检测出来。可参考项目XEduHub实例代码-入门完整版中的 **“3-1 综合项目:目标检测+关键点检测”**。 当然关键点识别也可以单独用,但是效果并不保证。  ### 人体关键点识别 人体关键点识别是一项计算机视觉任务,旨在检测和定位图像或视频中人体的关键位置,通常是关节、身体部位或特定的解剖结构。 这些关键点的检测可以用于人体姿态估计和分类、动作分析、手势识别等多种应用。 XEduHub提供了三个识别人体关键点的优质模型:`pose_body17`,`pose_body17_l`和`pose_body26`,能够在使用cpu推理的情况下,快速识别出身体的关键点。 模型的数字表示识别出人体关键点的数量,l代表了large,表示规模较大的,性能较强的模型,但是缺点在于推理速度较慢。 `pose_body17`与`pose_body17_l`模型能识别出17个人体骨骼关键点,`pose_body26`模型能识别出26个人体骨骼关键点。  #### 代码样例 ```python from XEdu.hub import Workflow as wf body = wf(task='pose_body') # 数字可省略,当省略时,默认为pose_body17 keypoints,img_with_keypoints = body.inference(data='data/body.jpg',img_type='pil') # 进行模型推理 format_result = body.format_output(lang='zh') # 将推理结果进行格式化输出 body.show(img_with_keypoints) # 展示推理图像 body.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf body = wf(task='pose_body') # 数字可省略,当省略时,默认为pose_body17 ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。在人体关键点识别模型中,`task`可选取值为:`[pose_body17,pose_body17_l,pose_body26]`,默认为`pose_body17`。 - `checkpoint`(str):指定模型文件所在的路径,如`pose_body = wf(task='pose_body',checkpoint='pose_body.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`pose_body17.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python keypoints = body.inference(data='data/body.jpg') # 进行模型推理 ``` 推理方式2: ```python keypoints,img_with_keypoints = body.inference(data='data/body.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`(str):指定待识别关键点的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(flag):可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出关键点识别完成后的图像。 - `img_type`(str):关键点识别完成后会返回含有关键点的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,如果不传入值,则不会返回图。 - `bbox`(numpy.ndarray):该参数可配合目标检测结果使用。例如在多人体关键点检测任务中,我们先识别人体位置,再检测人体关键点,该参数指定了要识别哪个目标检测框中的关键点。 模型推理返回结果: - `keypoints`(numpy.ndarray):以二维数组的形式保存了所有关键点的坐标,每个关键点(x,y)被表示为`[x,y]`根据前面的图示,要获取到某个特定序号`i`的关键点,只需要访问`keypoints[i]`即可。 - `img_with_keypoints`(numpy.ndarray):是个三维数组,以对应img_type格式保存了关键点识别完成后图像的像素点信息。 ##### 3. 结果输出 ```python format_result = body.format_output(lang='zh') # 参数lang设置了输出结果的语言,默认为中文 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str):设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool):设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,共有两个键:`关键点坐标`和`分数`。关键点坐标以二维数组形式保存了每个关键点的[x,y]坐标,而分数则是对应下标的关键点的分数,以一维数组形式保存。 ``` # 输出结果 {'关键点坐标': [[596.3159722222222, 163.53819444444457], [624.6579861111111, 140.86458333333326], [576.4765625, 149.3671875], [658.6684027777778, 166.37239583333326], [553.8029513888889, 177.7092013888889], [735.1918402777778, 288.24305555555543], [511.28993055555566, 322.2534722222222], [871.2335069444446, 387.44010416666674], [406.4244791666665, 407.2795138888889], [789.0416666666667, 347.7612847222222], [369.5798611111111, 381.7717013888889], [735.1918402777778, 642.5182291666667], [590.6475694444443, 656.6892361111111], [831.5546875, 832.4097222222224], [516.9583333333335, 855.0833333333333], [825.8862847222222, 1013.7986111111111], [488.61631944444434, 1039.306423611111]], '分数': [0.9026135802268982, 0.9218268990516663, 0.9566612243652344, 0.9752001762390137, 0.9569406509399414, 0.9008727669715881, 0.8631673455238342, 0.9160149693489075, 0.7716920375823975, 0.7274723649024963, 0.7813198566436768, 0.8071638941764832, 0.8179947733879089, 0.8660239577293396, 0.8697924613952637, 0.9618276953697205, 0.9472517371177673]} ```  结果可视化: ```python body.show(img_with_keypoints) ``` `show()`能够输出带有关键点和关键点连线的结果图像。  **若此时发现关键点识别效果不佳**,关键点乱飞,我们可以果断采用在提取关键点之前**先进行目标检测**的方式。如当前任务`'pose_body'`,就可以在之前先进行`'det_body'`。详情可参考项目XEduHub实例代码-入门完整版中的 **“3-1 综合项目:目标检测+关键点检测”**。 ##### 4. 结果保存 ```python body.save(img_with_keypoints,'img_with_keypoints.jpg') ``` `save()`方法能够保存保存带有关键点和关键点连线结果图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ### **人脸关键点** 人脸关键点识别是计算机视觉领域中的一项任务,它的目标是检测和定位人脸图像中代表面部特征的重要点,例如眼睛、鼻子、嘴巴、眉毛等。这些关键点的准确定位对于许多应用非常重要,包括人脸识别、表情分析、虚拟化妆、人机交互等。 XEduHub提供了识别人脸关键点的模型:`pose_face106`,这意味着该模型能够识别人脸上的106个关键点。如下图所示是106个关键点在脸部的分布情况,我们可以利用这些关键点的分布特征进行人脸识别,或者对人的表情进行分析和分类等。  #### 代码样例 ```python from XEdu.hub import Workflow as wf face = wf(task='pose_face') # 数字可省略,当省略时,默认为pose_face106 keypoints,img_with_keypoints = face.inference(data='data/face.jpg',img_type='pil') # 进行模型推理 format_result = face.format_output(lang='zh') # 将推理结果进行格式化输出 face.show(img_with_keypoints) # 展示推理图像 face.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf face = wf(task='pose_face') # 数字可省略,默认为face106 ``` `wf()`中共有三个参数可以设置: - `task`(str):选择任务。人脸关键点识别模型为`pose_face106`(数字可省略,默认为pose_face)。 - `checkpoint`(str):指定模型文件所在的路径,如`pose_face = wf(task='pose_face',checkpoint='pose_face.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`pose_face106.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`(str):指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python keypoints = face.inference(data='data/face.jpg') # 进行模型推理 ``` 推理方式2: ```python keypoints,img_with_keypoints = face.inference(data='data/face.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`(string|numpy.ndarray): 指定待识别关键点的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(bool): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出关键点识别完成后的图像。 - `img_type`: 关键点识别完成后会返回含有关键点的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,如果不传入值,则不会返回图。 - `bbox`:该参数可配合目标检测使用。在多目标关键点检测中,该参数指定了要识别哪个检测框中的关键点。 模型推理返回结果: - `keypoints`以二维数组的形式保存了所有关键点的坐标,每个关键点(x,y)被表示为`[x,y]`根据前面的图示,要获取到某个特定序号`i`的关键点,只需要访问`keypoints[i]`即可。 - `img_with_keypoints`是个三维数组,以对应img_type格式保存了关键点识别完成后图像的像素点信息。 ##### 3. 结果输出 ```python format_result = face.format_output(lang='zh') # 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str) - 可选参数,设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool) - 可选参数,设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,共有两个键:`关键点坐标`和`分数`。关键点坐标以二维数组形式保存了每个关键点的[x,y]坐标(face106模型共检测出106个关键点),而分数则是对应下标的关键点的分数,以一维数组形式保存。 结果可视化 ```python face.show(img_with_keypoints) # 展示推理图像 ``` `show()`能够输出带有关键点的结果图像。  **若此时发现关键点识别效果不佳**,关键点乱飞,我们可以果断采用在提取关键点之前**先进行目标检测**的方式。如当前任务`'pose_face'`,就可以在之前先进行`'det_face'`。详情可参考项目XEduHub实例代码-入门完整版中的 **“3-1 综合项目:目标检测+关键点检测”**。 ##### 4. 结果保存 ```python face.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` `save()`方法能够保存带有关键点的图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ### **人手关键点** 人手关键点识别是一项计算机视觉任务,其目标是检测和定位图像或视频中人手的关键位置,通常包括手指、手掌、手腕等关键部位的位置。这些关键点的识别对于手势识别、手部姿态估计、手部追踪、手势控制设备等应用具有重要意义。 XEduHub提供了能够快速识别人手关键点的模型:`pose_hand21`,该模型能够识别人手上的21个关键点,如下图所示。你可以根据自身需要对关键点进行进一步处理。例如:手势的不同会体现在关键点位置的分布上,这样就可以利用这些关键点进行手势的分类和识别。  #### 代码样例 ```python from XEdu.hub import Workflow as wf hand = wf(task='pose_hand') # 数字可省略,当省略时,默认为pose_hand21 keypoints,img_with_keypoints = hand.inference(data='data/hand.jpg',img_type='pil') # 进行模型推理 format_result = hand.format_output(lang='zh') # 将推理结果进行格式化输出 hand.show(img_with_keypoints) # 展示推理图像 hand.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf hand = wf(task='pose_hand') # 数字可省略,当省略时,默认为pose_hand21 ``` `wf()`中共有三个参数可以设置: - `task`选择任务。人手关键点识别模型为`pose_hand`。 - `checkpoint`指定模型文件所在的路径,如`pose_hand = wf(task='pose_hand',checkpoint='pose_hand.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`pose_hand.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python keypoints = hand.inference(data='data/hand.jpg') # 进行模型推理 ``` 推理方式2: ```python keypoints,img_with_keypoints = hand.inference(data='data/hand.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`: 指定待识别关键点的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(bool): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出关键点识别完成后的图像。 - `img_type`: 关键点识别完成后会返回含有关键点的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,如果不传入值,则不会返回图。 - `bbox`:该参数可配合目标检测使用。在多人手关键点检测中,该参数指定了要识别哪个检测框中的关键点。 模型推理返回结果: - `keypoints`以二维数组的形式保存了所有关键点的坐标,每个关键点(x,y)被表示为`[x,y]`根据前面的图示,要获取到某个特定序号`i`的关键点,只需要访问`keypoints[i]`即可。 - `img_with_keypoints`是个三维数组,以img_type设置的保存了关键点识别完成后的图像。 ##### 3. 结果输出 ```python format_result = hand.format_output(lang='zh')# 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str) - 可选参数,设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool) - 可选参数,设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,共有两个键:`关键点坐标`和`分数`。关键点坐标以二维数组形式保存了每个关键点的[x,y]坐标,而分数则是对应下标的关键点的分数,以一维数组形式保存。 ```python hand.show(img_with_keypoints) # 展示推理图像 ``` `show()`能够输出带有关键点的结果图像。  **若此时发现关键点识别效果不佳**,关键点乱飞,我们可以果断采用在提取关键点之前**先进行目标检测**的方式。如当前任务`'pose_hand'`,就可以在之前先进行`'det_hand'`。详情可参考项目XEduHub实例代码-入门完整版中的 **“3-1 综合项目:目标检测+关键点检测”**。 ##### 4. 结果保存 ```python hand.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` `save()`方法能够保存带有关键点的图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ### **人体所有关键点** XEduHub提供了识别人体所有关键点,包括人手、人脸和人体躯干部分关键点的模型:`pose_wholebody133`。具体关键点的序号及其分布如下图所示:  #### 代码样例 ```python from XEdu.hub import Workflow as wf wholebody = wf(task='pose_wholebody') # 数字可省略,当省略时,默认为pose_wholebody133 keypoints,img_with_keypoints = wholebody.inference(data='data/wholebody.jpg',img_type='pil') # 进行模型推理 format_result = wholebody.format_output(lang='zh') # 将推理结果进行格式化输出 wholebody.show(img_with_keypoints) # 展示推理图像 wholebody.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf wholebody = wf(task='pose_wholebody') # 数字可省略,当省略时,默认为pose_wholebody133 ``` `wf()`中共有三个参数可以设置: - `task`选择任务。全身关键点提取模型为`pose_wholebody`。 - `checkpoint`指定模型文件所在的路径,如`wholebody = wf(task='pose_wholebody',checkpoint='pose_wholebody.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`pose_wholebody.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 ##### 2. 模型推理 推理方式1: ```python keypoints = wholebody.inference(data='data/wholebody.jpg') # 进行模型推理 ``` 推理方式2: ```python keypoints,img_with_keypoints = wholebody.inference(data='data/wholebody.jpg',img_type='pil') # 进行模型推理 ``` 模型推理`inference()`可传入参数: - `data`: 指定待识别关键点的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(bool): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出关键点识别完成后的图像。 - `img_type`: 关键点识别完成后会返回含有关键点的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`,默认值为`None`,如果不传入值,则不会返回图。 - `bbox`:该参数可配合目标检测使用。在多人体关键点检测中,该参数指定了要识别哪个检测框中的关键点。 模型推理返回结果: - `keypoints`以二维数组的形式保存了所有关键点的坐标,每个关键点(x,y)被表示为`[x,y]`根据前面的图示,要获取到某个特定序号`i`的关键点,只需要访问`keypoints[i]`即可。 - `img_with_keypoints`是个三维数组,以img_type设置的格式保存了关键点识别完成后的图像。 ##### 3. 结果输出 ```python format_result = wholebody.format_output(lang='zh') # 将推理结果进行格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str) - 可选参数,设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool) - 可选参数,设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`以字典形式存储了推理结果,共有两个键:`关键点坐标`和`分数`。关键点坐标以二维数组形式保存了每个关键点的[x,y]坐标,而分数则是对应下标的关键点的分数,以一维数组形式保存。 ```python wholebody.show(img_with_keypoints) # 展示推理图像 ``` `show()`能够输出带有关键点的结果图像。  **若此时发现关键点识别效果不佳**,关键点乱飞,请在提取关键点之前**先进行目标检测**。如当前任务`'pose_wholebody'`,就可以在之前先进行`'det_body'`。详情可参考项目XEduHub实例代码-入门完整版中的 **“3-1 综合项目:目标检测+关键点检测”**。 ##### 4. 结果保存 ```python wholebody.save(img_with_keypoints,'img_with_keypoints.jpg') # 保存推理图像 ``` `save()`方法能够保存带有关键点的图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ## 3. 光学字符识别(OCR) 光学字符识别(Optical Character Recognition, OCR)是一项用于将图像或扫描的文档转换为可编辑的文本格式的技术。OCR技术能够自动识别和提取图像或扫描文档中的文本,并将其转化为计算机可处理的文本格式。OCR技术在车牌识别、证件识别、文档扫描、拍照搜题等多个场景有着广泛应用。 XEduHub使用的OCR模型是来自百度的开源免费的OCR模型:rapidocr,这个模型运行速度快,性能优越,小巧灵活,并且能支持超过6000种字符的识别,如简体中文、繁体中文、英文、数字和其他艺术字等等。 注意:你可以在当前项目中找到名为**font**的文件夹,里面的FZVTK.TTF文件是一种字体文件,为了显示识别出的文字而使用。 ### 代码样例 ```python from XEdu.hub import Workflow as wf ocr = wf(task='ocr') result,ocr_img = ocr.inference(data='data/ocr_img.png',img_type='cv2') # 进行模型推理 ocr_format_result = ocr.format_output(lang="zh") # 推理结果格式化输出 ocr.show(ocr_img) # 展示推理结果图像 ocr.save(ocr_img,'ocr_result.jpg') # 保存推理结果图像 ``` ### 代码解释 #### 1. 模型声明 ```python from XEdu.hub import Workflow as wf ocr = wf(task='ocr') ``` `wf()`中只有一个参数可以设置: - `task`选择任务类型,光学字符识别(OCR)的模型为`ocr`。 **注意**: - ocr任务并没有使用ONNX模型,也不会以onnx方式下载模型文件,而是自动下载和安装一个Python库,因此不同于之前任务的下载方式,无需指定下载路径。 - 如果在断网情况第一次使用,可以先通过`pip install rapidocr_onnxruntime==1.3.7`预先下载库。 - “rapidocr_onnxruntime”需要指定版本为“1.3.7”,否则可能会出现各种错误。 #### 2. 模型推理 ```python # result = ocr.inference(data='data/ocr_img.png') # 模型推理方式1 result,ocr_img = ocr.inference(data='data/ocr_img.png',img_type='cv2') # 模型推理方式2 ``` 模型推理`inference()`可传入参数: - `data`: 指定待进行OCR识别的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(bool): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出OCR识别完成后的图像。 - `img_type`(str):OCR识别完成后会返回含有识别结果的图像,该参数指定了返回图像的格式,可选有:`['cv2','pil']`。 `result`以一维数组的形式保存了识别出的文本及其检测框的四个顶点(x,y)坐标。 ``` # result [('8-01', [[37.0, 82.0], [226.0, 94.0], [221.0, 177.0], [32.0, 165.0]]), ('消火栓', [[177.0, 282.0], [1109.0, 288.0], [1106.0, 610.0], [174.0, 603.0]]), ('FIREHYDRANT', [[278.0, 580.0], [1010.0, 580.0], [1010.0, 642.0], [278.0, 642.0]]), ('种花元学', [[1111.0, 604.0], [1160.0, 604.0], [1160.0, 618.0], [1111.0, 618.0]]), ('消连道一酒防安全连查点', [[1080.0, 635.0], [1155.0, 635.0], [1155.0, 652.0], [1080.0, 652.0]]), ('地址:文料大楼6楼8-', [[918.0, 647.0], [1000.0, 647.0], [1000.0, 664.0], [918.0, 664.0]]), ('码:3T-00001018', [[1081.0, 652.0], [1147.0, 652.0], [1147.0, 666.0], [1081.0, 666.0]]), ('区中生校区', [[1081.0, 670.0], [1126.0, 670.0], [1126.0, 683.0], [1081.0, 683.0]]), ('查4-1', [[1097.0, 663.0], [1130.0, 663.0], [1130.0, 674.0], [1097.0, 674.0]]), ('工大楼(中)上公#', [[1076.0, 676.0], [1253.0, 678.0], [1253.0, 696.0], [1076.0, 693.0]]), ('消火栓使用说明', [[469.0, 761.0], [901.0, 764.0], [901.0, 821.0], [469.0, 818.0]]), ('How to Use a Fire Hydrant', [[463.0, 822.0], [902.0, 826.0], [902.0, 857.0], [463.0, 852.0]]), ('1.按下消火栓箱门右侧的按钮,并打开箱门。', [[166.0, 1039.0], [525.0, 1037.0], [525.0, 1060.0], [166.0, 1062.0]]), ('Press thebuttonontheright sideof thefirecabinet,thenopen thedoor.', [[178.0, 1061.0], [763.0, 1059.0], [763.0, 1082.0], [178.0, 1084.0]]), ('2.拉出水带,并将水带两端接口分别对准消火栓固定接口和水枪接口,顺时针方向旋转、拧紧。', [[165.0, 1102.0], [924.0, 1102.0], [924.0, 1128.0], [165.0, 1128.0]]), ('Takeoutthehose,andconnect the interfacesof thehosewiththehydrantand thenozzlebyrotatingclockwise.', [[184.0, 1123.0], [1094.0, 1125.0], [1094.0, 1151.0], [184.0, 1149.0]]), ('3.按下消火栓箱内的启泵按钮,指示灯闪亮说明消防泵已启动。', [[165.0, 1169.0], [669.0, 1168.0], [669.0, 1191.0], [165.0, 1192.0]]), ('4.由一人紧握水枪,另一人逆时针旋开消火栓阀门至最大开度。', [[167.0, 1234.0], [668.0, 1234.0], [668.0, 1257.0], [167.0, 1257.0]]), ('Onepersonholdsthenozzle tightly,whiletheother turnsonthevalveanticlockwise tomaximumopening', [[187.0, 1253.0], [1039.0, 1258.0], [1039.0, 1284.0], [187.0, 1279.0]]), ('火警电话', [[295.0, 1327.0], [458.0, 1332.0], [457.0, 1375.0], [294.0, 1370.0]]), ('119', [[466.0, 1330.0], [569.0, 1330.0], [569.0, 1396.0], [466.0, 1396.0]]), ('内部应急电话', [[629.0, 1331.0], [869.0, 1334.0], [869.0, 1375.0], [629.0, 1373.0]]), ('Fire Telephone', [[292.0, 1369.0], [460.0, 1373.0], [460.0, 1400.0], [292.0, 1396.0]]), ('Emergency24/7Hotline(021)62238110', [[624.0, 1372.0], [1072.0, 1374.0], [1072.0, 1401.0], [624.0, 1399.0]]), ('消防设施 请保持完好', [[409.0, 1456.0], [851.0, 1459.0], [851.0, 1503.0], [409.0, 1500.0]])] ``` 如呈现的输出结果所示,数组中每个元素的形式为元组:(识别文本,检测框顶点坐标)。四个顶点坐标顺序分别为[左上,右上,左下,右下]。 `ocr_img`的格式为cv2,保存了ocr识别后的结果图像。 #### 3. 结果输出 ```python ocr_format_result = ocr.format_output(lang="zh") ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str) - 可选参数,设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool) - 可选参数,设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 ``` # 输出结果 {'检测框': [[[37.0, 82.0], [226.0, 94.0], [221.0, 177.0], [32.0, 165.0]], [[177.0, 282.0], [1109.0, 288.0], [1106.0, 610.0], [174.0, 603.0]], [[278.0, 580.0], [1010.0, 580.0], [1010.0, 642.0], [278.0, 642.0]], [[1111.0, 604.0], [1160.0, 604.0], [1160.0, 618.0], [1111.0, 618.0]], [[1080.0, 635.0], [1155.0, 635.0], [1155.0, 652.0], [1080.0, 652.0]], [[918.0, 647.0], [1000.0, 647.0], [1000.0, 664.0], [918.0, 664.0]], [[1081.0, 652.0], [1147.0, 652.0], [1147.0, 666.0], [1081.0, 666.0]], [[1081.0, 670.0], [1126.0, 670.0], [1126.0, 683.0], [1081.0, 683.0]], [[1097.0, 663.0], [1130.0, 663.0], [1130.0, 674.0], [1097.0, 674.0]], [[1076.0, 676.0], [1253.0, 678.0], [1253.0, 696.0], [1076.0, 693.0]], [[469.0, 761.0], [901.0, 764.0], [901.0, 821.0], [469.0, 818.0]], [[463.0, 822.0], [902.0, 826.0], [902.0, 857.0], [463.0, 852.0]], [[166.0, 1039.0], [525.0, 1037.0], [525.0, 1060.0], [166.0, 1062.0]], [[178.0, 1061.0], [763.0, 1059.0], [763.0, 1082.0], [178.0, 1084.0]], [[165.0, 1102.0], [924.0, 1102.0], [924.0, 1128.0], [165.0, 1128.0]], [[184.0, 1123.0], [1094.0, 1125.0], [1094.0, 1151.0], [184.0, 1149.0]], [[165.0, 1169.0], [669.0, 1168.0], [669.0, 1191.0], [165.0, 1192.0]], [[167.0, 1234.0], [668.0, 1234.0], [668.0, 1257.0], [167.0, 1257.0]], [[187.0, 1253.0], [1039.0, 1258.0], [1039.0, 1284.0], [187.0, 1279.0]], [[295.0, 1327.0], [458.0, 1332.0], [457.0, 1375.0], [294.0, 1370.0]], [[466.0, 1330.0], [569.0, 1330.0], [569.0, 1396.0], [466.0, 1396.0]], [[629.0, 1331.0], [869.0, 1334.0], [869.0, 1375.0], [629.0, 1373.0]], [[292.0, 1369.0], [460.0, 1373.0], [460.0, 1400.0], [292.0, 1396.0]], [[624.0, 1372.0], [1072.0, 1374.0], [1072.0, 1401.0], [624.0, 1399.0]], [[409.0, 1456.0], [851.0, 1459.0], [851.0, 1503.0], [409.0, 1500.0]]], '分数': [0.7910715460777282, 0.7438937872648239, 0.8779238214095434, 0.37094803899526596, 0.6871711413065592, 0.8419906993707021, 0.7611332259007862, 0.6775176425774893, 0.43559680581092836, 0.5932324767112732, 0.8621773198246956, 0.896224904518861, 0.9342550689523871, 0.9395184453689691, 0.9641873836517334, 0.9524000250563329, 0.9582841634750366, 0.9612718860308329, 0.9428217871033627, 0.798493766784668, 0.7463672459125519, 0.8557159645216805, 0.8900542497634888, 0.9359333357390236, 0.8789843645962802], '文本': ['8-01', '消火栓', 'FIREHYDRANT', '种花元学', '消连道一酒防安全连查点', '地址:文料大楼6楼8-', '码:3T-00001018', '区中生校区', '查4-1', '工大楼(中)上公#', '消火栓使用说明', 'How to Use a Fire Hydrant', '1.按下消火栓箱门右侧的按钮,并打开箱门。', 'Press thebuttonontheright sideof thefirecabinet,thenopen thedoor.', '2.拉出水带,并将水带两端接口分别对准消火栓固定接口和水枪接口,顺时针方向旋转、拧紧。', 'Takeoutthehose,andconnect the interfacesof thehosewiththehydrantand ' 'thenozzlebyrotatingclockwise.', '3.按下消火栓箱内的启泵按钮,指示灯闪亮说明消防泵已启动。', '4.由一人紧握水枪,另一人逆时针旋开消火栓阀门至最大开度。', 'Onepersonholdsthenozzle tightly,whiletheother ' 'turnsonthevalveanticlockwise tomaximumopening', '火警电话', '119', '内部应急电话', 'Fire Telephone', 'Emergency24/7Hotline(021)62238110', '消防设施 请保持完好']} ``` `format_output`的结果以字典形式存储了推理结果,共有三个键:`检测框`、`分数`和`文本`。检测框以三维数组形式保存了每个检测框的四个顶点的[x,y]坐标,而分数则是对应下标的检测框分数,以一维数组形式保存。文本则是每个检测框中识别出的文本,以一维数组形式保存。 结果可视化: ```python ocr.show(ocr_img) # 展示推理结果图像 ``` 显示结果图像:由两部分组成,左侧为原图像,右侧为经过ocr识别出的文本,并且该文本的位置与原图像中文本的位置保持对应。  #### 4. 结果保存 ```python ocr.save(ocr_img,'ocr_result.jpg') # 保存推理结果图像 ``` `save()`方法能够保存ocr识别后的结果图像 该方法接收两个参数,一个是图像数据,另一个是图像的保存路径。 ## 4. 图像分类 图像分类是一个分类任务,它能够将不同的图像划分到指定的类别中,实现最小的分类误差和最高精度。XEduHub提供了进行图像分类的模型:`cls_imagenet`,该模型的分类类别取自ImageNet的一千个分类,这意味着该模型能够将输入的图像划分到这一千个分类中的类别上。 ### 代码样例 ```python from XEdu.hub import Workflow as wf cls = wf(task='cls_imagenet') # 模型声明 img_path = 'demo/cat.png' # 指定进行推理的图像路径 result,cls_img = cls.inference(data=img_path,img_type='cv2') # 进行推理 cls_format_result = cls.format_output(lang='zh') # 结果格式化输出 cls.show(cls_img) # 展示原图 cls.save(cls_img,'cls_result.jpg')# 保存图像 ``` ### 代码解释 #### 1. 模型声明 ```python from XEdu.hub import Workflow as wf cls = wf(task="cls_imagenet") # 模型声明 ``` `wf()`中共有三个参数可以设置: - `task`选择任务。图像分类的模型为`cls_imagenet`。 - `checkpoint`指定模型文件所在的路径,如`cls = wf(task='cls_imagenet',checkpoint='cls_imagenet.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`cls_imagenet.onnx`。否则将通过网络到浦源平台的专用地址下载。 - `download_path`指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[前文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id4)。 #### 2. 模型推理 ```python # result = cls.inference(data='data/cat101.jpg') # 模型推理方式1 result,cls_img = cls.inference(data='data/cat101.jpg', img_type='pil') # 进行模型推理方式2 ``` 模型推理`inference()`可传入参数: - `data`: 指定待分类的图像,可以是以图像路径形式传入,也可直接传入cv2或pil格式的图像。 - `show`(bool): 可取值:`[True,False]` 默认为`False`。如果取值为`True`,在推理完成后会直接输出原图。 - `img_type`(str):返回原图,该参数指定了返回图像的格式,可选有:`['cv2','pil']`。 推理结果`result`是一个二维数组,表示这个图像在ImageNet的一千个分类中,属于每个分类的概率。  `cls_img`的格式为cv2,呈现的就是一张原图,并非带模型推理结果的图。 #### 3. 结果输出 ```python format_result = cls.format_output(lang='zh') #推理结果格式化输出 ``` `format_output()`能够将模型推理结果以标准美观的方式进行输出。输出结果与`format_result`保存的内容一致。 `format_output()`中共有两个参数可以设置: - `lang`(str) - 可选参数,设置了输出结果的语言,可选取值为:[`'zh'`,`'en'`,`'ru'`,`'de'`,`'fr'`],分别为中文、英文、俄语、德语、法语,默认为中文。 - `isprint`(bool) - 可选参数,设置了是否格式化输出,可选取值为:[`True`,`False`],默认为True。 `format_result`是一个字典,以格式化的方式展示了这张图像最有可能的分类结果。预测值表示图像分类标签在所有一千个分类中的索引,分数是属于这个分类的概率,预测类别是分类标签的内容。 ``` # 输出结果 {'预测值': 281, '分数': 0.5337719, '预测类别': 'tabby, tabby cat'} ```  配合展示原图: ``` cls.show(cls_img) # 展示原图 ```  ## 5. 内容生成 内容生成模型是一种人工智能模型,它能够根据输入的提示或指令生成新的内容,如文本、图像、音频或视频。 XEduHub提供了两个图像内容生成任务:图像风格迁移`gen_style`和图像着色`gen_color`。 风格迁移 ### 1)图像风格迁移模型的使用 图像风格迁移就是根据一幅风格图像(style image),将任意一张其他图像转化成这个风格,并尽量保留原图的内容(content image)。 XEduHub中的风格迁移使用有两类: 1. 预设风格迁移:预设好五种风格,用户只传入一张内容图像,迁移至该风格。 2. 自定义风格迁移:用户传入一张内容图像和一张风格图像,迁移至风格图像的风格。 #### 实例讲解1:预设风格迁移模型的使用(以马赛克(mosaic)风格为例) 每个风格使用的代码风格是类似的,接下来通过学习一个完整示范,可以达到举一反三的效果。 #### 代码样例 ```python from XEdu.hub import Workflow as wf style = wf(task='gen_style',style='mosaic') result, img = style.inference(data='data/cat101.jpg',img_type='cv2') # 进行模型推理 style.show(img) # 展示推理图像 style.save(img,'style_cat.jpg') # 保存推理图像 ``` #### 代码解释 ##### 1. 模型声明 ```python from XEdu.hub import Workflow as wf style = wf(task='gen_style',style='mosaic') ``` `wf()`中共有四个参数可以设置: - `task`选择任务。风格迁移的模型为`gen_style `。 - `style`选择风格迁移所使用的风格。可选的风格有`udnie`、`mosaic`、`rain-princess`、`candy`和`pointilism`,也可以用一张图像作为风格源。 - `checkpoint`指定模型文件所在的路径,如`style = wf(task='gen_style',style='mosaic',checkpoint='gen_style_mosaic.onnx') `。如果没有指定模型路径,Workflow会默认在本地同级的“checkpoint”文件夹中寻找与任务名对应的模型文件,即`gen_style_mosaic.onnx`(任务名加下划线加风格名)。否则将通过网络到浦源平台的专用地址下载。 - `download_path`指定模型的下载路径。缺省情况下,模型文件会下载到“checkpoint”文件夹中,“checkpoint”文件夹不存在则自动建立。如果希望代码在没有网络的设备上也能运行,请同步复制`checkpoint`文件夹。如希望模型保存放在其他路径,则设置`download_path`参数,如`download_path='my_checkpoint'`。注意,`download_path`参数为文件夹名称。 任务模型文件获取与存放请查看[下文](https://xedu.readthedocs.io/zh-cn/master/xedu_hub/introduction.html#id132)。 运行代码`wf.support_style()`可查看当前预设的风格。当前预设风格共有五种,如下图所示。  - udnie: 该幅作品是法国艺术家弗朗西斯·毕卡比亚 (Francis Picabia) 于 1913 年创作的一幅布面油画。这幅抽象画抽象的形式和金属色的反射让人想起机器的世界。 - mosaic: 马赛克是由有色石头、玻璃或陶瓷制成的规则或不规则的小块图案或图像,由石膏/砂浆固定到位并覆盖表面。 - rain-princess:该幅作品的作者是李奥尼德·阿夫列莫夫,他继梵高之后,当代最著名的现代印象派艺术家。风景、城市和人物在他的画笔下(更确切的可以说是刮刀),具有一种独特的风格,用色大胆、明亮,传达他的乐观。 - candy: 该风格通过糖果般绚丽的色块以及象征棒棒糖的圆圈图案,传递出甜蜜童真。 - pointilism: 点彩画是一种绘画技术,其中将小而独特的色点应用于图案以形成图像。 `style`可选参数为:`['mosaic','candy','rain-princess','udnie','pointilism']`,也可以输入一张其他图像的路径来自定义风格,如`style='fangao.jpg'`。为了方便用户使用预设风格,还可以通过输入预设风格对应的标签值来进行设定,如`style=0`。
| 预设风格 | 对应标签值 |
|---|---|
| mosaic | 0 |
| candy | 1 |
| rain-princess | 2 |
| udnie | 3 |
| pointilism | 4 |