版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
猜拳小达人一、任务目标知识目标1、了解TensorFlow.js框架2、了解神经网络模型3、了解图像分类技能目标1、能够熟练安装浏览器插件2、具有使用TensorFlow.js框架的能力素质目标1、具有良好的职业道德2、具有持续学习的能力二、任务指南步骤1:插件下载将压缩包下载到本地电脑并解压。步骤2:WebServer插件安装与配置1、首先确认电脑上安装了Chrome浏览器。如没有安装,可以双击安装包ChromeSetup.exe,安装Chrome浏览器。安装完成后打开Chrome,再进行插件安装。2、安装插件方法一:1)打开Chrome,从右上角打开设置,从侧边栏选择扩展程序。2)进入chrome浏览器的扩展程序界面,并将开发者模式打开。3)修改“ofhbbkphhbklhfoeikjpcbhemlocgigb_0.5.2_.crt”文件的拓展名,将其改为“ofhbbkphhbklhfoeikjpcbhemlocgigb_0.5.2_.zip”,具体如下图所示:4)将上图中的zip文件直接拖到扩展程序页面,出现下图所示的插件,即安装完成。方法二:1)按照方法一,将文件扩展名改成zip后,点击zip文件,然后右键选择解压到文件夹中,如下图:2)在扩展程序页面点击“加载已解压的扩展程序”,然后选择解压后的文件夹即可。方法三:从应用商店直接安装插件(注意:使用该方法的前提是:你的电脑可以正常连接谷歌)。1)通过Google搜索找到下图:2)单击“WebServerforChrome”,打开后,选择启动应用,即可。注意:如果在以上安装过程中,插件上显示“错误”,一般不影响任务的正常运行,可以先尝试后续的任务步骤。步骤3:新建本地文件夹在本地电脑中新建一个文件夹,用于存储后续任务的源码,比如D盘TensorFlow_JS。步骤4:插件配置1)打开本地电脑中的WebServer插件。比如下图是win10系统中搜索WebServer应用并打开。2)单击CHOOSEFOLDER,选择步骤3创建的文件夹TensorFlow_JS,另外,Options中的配置可参照下图进行。步骤5:打开浏览器打开Chrome浏览器,并在Chrome中打开下方的URL地址::8887/,即可打开步骤3创建的文件夹。到这里,WebServer插件的安装与配置就完成了。步骤6:源码下载1、下载压缩包“猜拳PK.zip”。2、解压到插件配置的对应目录(TensorFlow_JS目录下)。其中包含了运行猜拳游戏的tensorflow.js脚本代码以及前端html文件。步骤7:源码解读1、retrain.html,在该文件中设计猜拳游戏中出现的按钮、布局等。想要实现网页中的按钮进行实际操作,就需要编写相应的脚本代码来实现,即编写html实际调用的js脚本。在js脚本中我们要实现图像数据的采集、识别模型的训练以及验证。2、webcam.js,该脚本用于调用本机摄像头来捕捉手势图像,构建手势数据集。核心代码如下://用摄像头捕捉的画面来创建图像对应的像素值的张量。constwebcamImage=tf.browser.fromPixels(this.webcamElement);3、rps-dataset.js,该脚本主要有两个函数,一是对不同手势用例添加时的处理,二是将数据类别处理成tenforflowjs能处理的tensor形式。核心代码如下://当某一类手势中添加了一个样本时,通过调用concat并将轴参数设置为0来将新样本连接到现有样本集this.xs=tf.keep(oldX.concat(example,0));//将每一类手势对应的标签(整数)转换为one-hot表示形式tf.tensor1d([this.labels[i]]).toInt(),numClasses)}));4、index.js,该脚本主要用来构建、训练手势识别模型,核心代码如下://模型训练代码示例asyncfunctiontrain(){dataset.ys=null;dataset.encodeLabels(3);//模型结构:两层全连接网络层densemodel=tf.sequential({layers:[tf.layers.flatten({inputShape:mobilenet.outputs[0].shape.slice(1)}),tf.layers.dense({units:100,activation:'relu'}),tf.layers.dense({units:3,activation:'softmax'})]});//设置优化器constoptimizer=tf.train.adam(0.0001);//编译模型pile({optimizer:optimizer,loss:'categoricalCrossentropy'});letloss=0;//使用fit函数开始训练model.fit(dataset.xs,dataset.ys,{epochs:10,callbacks:{onBatchEnd:async(batch,logs)=>{loss=logs.loss.toFixed(5);console.log('LOSS:'+loss);}}});}步骤8:打开网页1、确认插件已开启,同步骤4,搜索本机应用程序,找到WebServeforChrome应用->点击WebServer服务->开始服务。2、检查以上html、js文件在同一文件夹下。3、在Chrome浏览器中打开retrain.html网页,看到摄像头开启提醒,选择“允许”,如下图:步骤9:采集“石头”手势摄像头开启后,我们就可以采集数据了。在页面中可以看到“石头”、“布”、“剪刀”按钮,也就是我们下面要采集这三种手势的图片。 在三个按钮上方,可以看到摄像头实时捕捉的画面。该步骤采集“石头”手势,操作步骤如下:1)握拳,放在摄像头下,确保画面里捕捉到了拳头手势。2)点击“石头”按钮3)确认“石头”按钮下方的“石头用例”次数加14)变换不同角度、不同大小的拳头手势,重复前三步,观察“石头用例”数目,达到50次以上即可。步骤10:采集“布”手势该步骤采集“布”手势,操作步骤如下:1)出布,放在摄像头下,确保画面里捕捉到了布的手势。2)点击“布”按钮3)确认“布”按钮下方的“布用例”次数加14)变换不同角度的布手势,重复前三步,观察“布用例”数目,达到50次以上即可。步骤11:采集“剪刀”手势该步骤采集“剪刀”手势,操作步骤如下:1)比剪刀手势,放在摄像头下,确保画面里捕捉到了剪刀手势。2)点击“剪刀”按钮3)确认“剪刀”按钮下方的“剪刀用例”次数加14)变换不同角度的剪刀手势,重复前三步,观察“剪刀用例”数目,达到50次以上即可。三种手势数据采集完成后,训练集就生成了。在捕捉手势图像时,分别点击“石头”、“布”、“剪刀”按钮,就是给图像打分类标签的过程,即数据标注。确认三种手势都有一定量的数据即可。步骤12:手势识别模型训练点击页面中的“训练神经网络”按钮,开始手势识别模型的训练。查看训练的过程或者进度,可在页面空白处右键,选择“检查”,选择“控制台”选项卡,可看到如下界面:LOSS就是模型训练过程中的损失,随着训练次数的增加,让模型朝着损失越来越小的方向去改进。当网页上方出现如下图所示的弹框,表示模型训练完成。步骤13:进行猜拳PK游戏模型训练完成后,就可以进行猜拳游戏了,在游戏过程中,将会调用训练好的手势识别模型对摄像头下你给出的手势进行识别,然后将识别结果和计算机出的手势进行比较。1)确认摄像头是开启状态2)在摄像头下给出任意一种手势3)点击“开始PK”按钮,进入猜拳游戏状态4)可以看到按钮下方输出了你的手势识别结果、计算机出拳结果及PK结果5)再次点击“开始PK”,可以继续猜拳游戏。在PK环节中摄像头捕捉到你出的手势,然后调用训练好的手势识别模型识别出你出的手势是布、石头或剪刀,此时识别的结果可能不是每次都正确,准确率更多取决于训练数据的好坏与多少。实训内容任务一:安装与配置WebServerforChrome插件。任务二:部署猜拳游戏,并在浏览器中正常运行。任务三:采集剪刀石头布三种手势至少各100张图像。完成手势识别模型的训练。进行至少三组猜拳PK,并保留截图。四、实训环境本项目在个人电脑本地环境中完成。操作系统:Windows系统或MacOSX系统。五、实训评价口罩识别系统一、任务目标知识目标1、了解人工智能的概念2、了解神经网络模型3、了解人工智能应用的实现流程技能目标1、具备图像标注的能力2、具备基于Torch框架实现目标检测模型的训练和预测素质目标1、具有良好的职业道德2、具有持续学习和追求创新的能力二、任务指南步骤1:标注图像数据 1、点击右上方黄色文件夹图标,进入data-sets目录,下载压缩包mask.zip到本地,然后解压,可以看到标注工具labelImage.exe。2、打开图像文件夹 为了便于批量标注,将保存原始图像的文件夹打开,然后逐张图像进行标注即可,具体见下图。开始标注之前,你也可以使用压缩包mask.zip中派Lab提供的人脸图像素材,也可以自己搜集相关图片进行标注。3、图像标注使用“CreateRectBox”,在口罩上画一个矩形框,并填写label为“mask”;4、保存标注文件使用“save”功能生成一个标注结果xml文件,并保存到磁盘目录中,默认是存放在被标注图片的同级目录中后缀为xml的同名文件。点击“NextImage”,就可以打开该文件夹下的下一张图片。步骤2:解压数据资源进入data-sets目录,可以看到压缩包“MaskDetect.zip”,包含了该项目的标注好的图像数据集以及封装好的代码库,使用下面的命令将其解压到当前目录中。!unzip-o-q./data-sets/MaskDetect.zip-d./步骤3:导入相关包该任务实现的源码都封装在“train.py”中,可以使用下面的命令将其导入环境中,在后续的步骤中可以调用它内部的方法。#导入train包,用于神经网络模型训练importtrain#导入yolo包,调用其中的检测方法fromyoloimportYOLOimportcv2fromPILimportImage#导入matplotlib,用于画图显示frommatplotlibimportpyplotasplt步骤4:数据预处理1、处理标注文件在步骤1中,我们标注了一批人脸戴与不戴口罩的数据,标注结果均是xml文件,下面我们要对其做进一步的处理,提取有用信息。调用process_xml方法,配置好图像路径、标注文件的路径、以及结果保存路径即可。2、获取训练数据集、验证数据集#定义图片路径images_path='./face_mask_datasetes/train_mask/images/'#定义标注图片路径annotations_path='./face_mask_datasetes/train_mask/annotations'#定义txt标注文件路径annotations_txt_path='model_data/mask_train.txt'#从train包中调用process_xml()函数对xml文件进行处理cess_xml(images_path,annotations_path,annotations_txt_path)#定义图片路径images_val_path='./face_mask_datasetes/val_mask/images/'#定义标注图片路径annotations_val_path='./face_mask_datasetes/val_mask/annotations'#定义txt标注文件路径annotations_val_txt_path='model_data/mask_val.txt'#从train包中调用process_xml()函数对xml文件进行处理cess_xml(images_val_path,annotations_val_path,annotations_val_txt_path)#从train包中调用process_traindata()函数,#根据以上步骤的文件路径,将数据集划分为训练与测试train_lines,val_lines=cess_traindata(annotations_txt_path,annotations_val_txt_path)步骤5:加载预训练模型由于从头训练一个好模型需要时间较久,我们提前预训练了一个口罩识别模型./model_data/yolov4_maskdetect_weights1.pth,我们可以使用标注的数据在此模型上继续迭代,得到一个效果更好的模型。 调用load_premodel函数,配置好模型路径、类别标签文件路径即可。运行结果中显示“Finished!”加载完成。Cuda=False#不启用Cuda#定义模型文件路径model_path="model_data/yolov4_maskdetect_weights1.pth"#定义模型分类类别classes_path='model_data/mask_classes.txt'#从train包中调用load_premodel()函数进行预训练模型读取model,net,yolo_losses=train.load_premodel(model_path,classes_path,Cuda)步骤6:训练口罩识别模型调用train_model方法,配置好训练集、验证集、迭代次数、学习率、模型结构等参数即可。注:使用cpu环境训练时,把Batch_size设小一点,否则容易报出超出内存的错误。#参数配置lr=1e-3#学习率Batch_size=1#批大小Init_Epoch=0#初始训练批次Freeze_Epoch=2#冻结批次Cosine_lr=True#学习率配置参数#从train包中调用train_model()函数进行模型训练best_model_weights=train.train_model(train_lines,val_lines,model,lr,Init_Epoch,Freeze_Epoch,Batch_size,Cosine_lr,net,yolo_losses,Cuda)步骤7:读取测试图片#定义图片路径image_path='face_mask_datasetes/val_mask/images/songzuer.jpg'#打开图片文件image=Image.open(image_path)步骤8:调用口罩识别模块#实例化YOLOyolo=YOLO()#对yolo调用detect_image()函数,进行口罩识别r_image=yolo.detect_image(image)步骤9:保存并显示检测结果#定义图片保存命名r_image_file=str(image_path).split('.')[0]+'_result.png'#保存图片r_image.save(r_image_file)#读取图片img=cv2.imread(str(r_image_file))#展示图片plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))plt.show()实训内容任务一:图像标注工具的使用任务二:使用labelimage标注至少3张人脸口罩图像任务三:训练口罩识别模型任务四:使用训练好的模型对戴口罩和不带口罩的图像进行检测,并输出结果四、实训环境本项目在个人电脑本地环境中完成。操作系统:Windows系统或MacOSX系统。五、实训评价体育运动的姿态检测一、任务目标知识目标1、了解姿态检测2、了解MediaPipe3、了解人工智能应用的实现流程技能目标1、具备熟练处理图像和视频的能力2、具备熟练使用MediaPipe工具进行姿态检测素质目标1、具有良好的职业道德2、具有持续学习和追求创新的能力二、任务指南步骤1:资料下载步骤1-2,用于体验姿态检测。先下载相关资料;从侧边栏选择文件夹图表,点击文件夹data-sets,下载姿态识别.zip并解压。 步骤2:浏览器配置\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self" chrome浏览器打开:chrome://flags/#unsafely-treat-insecure-origin-as-secure
进行如下图两步设置复制网址进文本框2.点击Disable选项卡,选择Enable步骤3:打开网页\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self" 打开WebServer,选择刚刚解压的文件夹。通过WebServer打开index.html,网页加载速度取决于电脑配置,请耐心等待。
可调参数说明自拍模式:打开则对相机或视频图片输入进行垂直翻转处理。模型复杂度:0,1或2。标记的准确性和计算延迟通常会随着模型的复杂性而增加。默认为1。平滑标点:过滤不同输入图像中的地标以减少抖动。开启画面分割:如果设置为true,除了姿势界标之外,该解决方案还生成分割掩码。平滑分割:过滤不同输入图像的分割掩码以减少抖动。最小姿态检测置信度:人检测模型中的最小置信度值。最小姿态跟踪置信度:跟踪模型的最小置信度值(设置为更高的值可以提高识别的稳定性与准确性,但代价是更高的延迟。)
网页样例视图 如果摄像头拍摄距离有限无法进行全身的拍摄,可以选择下载该小节资源中提供的demo.mp4并在浏览器中进行上传。 注意:每次调整参数都需要再次加载模型。步骤4:解压资源文件并安装MediaPipe步骤4-8是对图片中的运动姿态进行检测。\t"/notebook/pro-pi-lab-platform-jupyter-ai-9-a6ff0859647641d889d7a62d40d99/doc/workspaces/course-creation-64-2179/tree/%E8%AF%BE%E7%A8%8B%E5%88%B6%E4%BD%9C/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%81%8C%E7%89%88/%E4%BB%BB%E5%8A%A11-%E5%A7%BF%E6%80%81%E6%A3%80%E6%B5%8B%E4%BD%93%E9%AA%8C/_self" 1、点击页面右侧侧边栏文件夹图标,进入“data-sets”,可以看到压缩包“姿态检测.zip”,包含了该项目的数据集以及封装好的代码库,使用下面的命令将其解压到当前目录中。!unzip-o-q./data-sets/姿态检测.zip-d./安装mediapipe#安装MediaPipe!pipinstallmediapipe步骤5:将模型解压到所需的位置shutil._unpack_zipfile("modules.zip","/opt/conda/lib/python3.9/site-packages/mediapipe")步骤6:导入相关包cv2用来读取图片numpy用来做运算util里面有封装好的函数mediapipe是实现姿态识别所用到的库matplotlib用来查看图片importcv2importnumpyasnpfromutilimport*importmediapipeasmpimportmatplotlib.pyplotaspltimportshutil步骤7:读取待检测对象并显示npack_zipfile("modules.zip",#通过opencv读取图片name="1.png"image=cv2.imread(name)#将opencv读取的BGR图片转换为RGBimage_rgb=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)#展示图片plt.imshow(image_rgb)plt.show()步骤8:调用模型对图像进行姿态检测我们将MediaPipePose的检测过程放入了make_image函数,所以在这里我们使用了MediaPipe并绘制姿态标点。defmake_image(image):""":paramimage:图片return:经过姿态检测并标点的图片"""#进行姿态检测annotated_image=make_image(image)#展示检测完毕的图片plt.imshow(annotated_image)plt.show()步骤9:调用函数计算关节角度步骤9-13是对图片中的深蹲姿势进行检测。根据三个坐标(x1,y1),(x2,y2),(x3,y3),我们如何计算关节角度?调用angle函数进行角度计算,函数说明:调用angle函数进行角度计算,函数说明:angle(point_a,point_b,point_c):根据三点坐标计算夹角,返回角点b的夹角值。#输入三个测试坐标,b点夹角应该是90°c1=[0,1]#[x1,y1]c2=[0,0]#[x2,y2]c3=[1,0]#[x3,y4]#调用angle()进行角度计算angle(c1,c2,c3)步骤10:调用函数给图片添加文字我们通过imread读取图片,然后进行颜色通道转换。接下来通过调用cv2AddChineseText()方法在图片“1.png”的(250,50)的位置上添加文字"添加文字",并设置颜色(0,0,0)即黑色。cv2AddChineseText(img,text,position,textColor=(0,255,0),textSize=30)参数说明如下:img:要处理的图片text:要添加的文字position:文字放置坐标,输入格式:(0,0)textColor:文字颜色,输入格式:(B,G,R),默认为绿色。textSize:字体大小,默认为30。#通过opencv读取图片name="1.png"image=cv2.imread(name)#将opencv读取的BGR图片转换为RGBimage=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)#指定图片,指定文字,指定字体,指定字体大小,指定颜annotated_image=cv2AddChineseText(image,"添加文字",(250,50),(0,0,0))#展示绘制好的图片plt.imshow(annotated_image)plt.show()步骤11:读取关节坐标计算膝关节弯曲角度需要三个的点的坐标,而调用关节点需要用到关节点的英文名称,我们可以参照以下示意图:23:左髋部,LEFT_HIP24:右髋部,RIGHT_HIP25:左膝盖,LEFT_KNEE26:右膝盖,RIGHT_KNEE27:左脚踝,LEFT_ANKLE28:右脚踝,RIGHT_ANKLE#配置MediaPipe的姿态识别解决方案mp_pose=mp.solutions.pose#使用MediaPipe的姿态识别解决方案withmp_pose.Pose(static_image_mode=True,min_detection_confidence=0.5,model_complexity=2)aspose:#标记姿态结果results=cess(image)#读取图片长宽w,h,_=image.shape#读取所有点的坐标landmarks=results.pose_landmarks.landmark#通过索引读取单个位置的坐标left_23=[int(landmarks[mp_pose.PoseLandmark.LEFT_HIP].x*w),int(landmarks[mp_pose.PoseLandmark.LEFT_HIP].y*h)]print("23:左髋部,LEFT_HIP坐标:",left_23)步骤12:将步骤4、5、6合并到一个函数中除了步骤4、5、6功能的合并之外,我们添加了颜色变化,如果这个深蹲姿势是标准的,有一些更醒目的提示,比如说亮绿色。反之,如果是不标准的,我们可能希望有一些提醒色,比如黄色。defcompute_advanced(annotated_image,results):"""输入:进行过姿态检测的图片与姿态检测结果输出:对膝关节角度进行标点后的图片"""#读取图片长宽image_height,image_width,_=annotated_image.shape#步骤6:生成并打印所需坐标names=["左髋部","左膝盖","左脚踝","右髋部","右膝盖","右脚踝"]#我们将步骤五的坐标读取放进了get_coord()函数coords=get_coord(results,image_width,image_height)foriinrange(6):print(names[i],"坐标:",coords[i])#步骤4:计算两个关节的角度angle_left=angle(coords[0],coords[1],coords[2])angle_right=angle(coords[3],coords[4],coords[5])#步骤5:在图片上添加两个关节的角度ifangle_left<=90:#标准:显示绿色annotated_image=cv2AddChineseText(annotated_image,"左膝弯曲角度:"+str(int(angle_left)),tuple((coords[1][0]-100,coords[1][1]-50)),(0,255,0),40)else:#不标准:显示黄色annotated_image=cv2AddChineseText(annotated_image,"左膝弯曲角度:"+str(int(angle_left)),tuple((coords[1][0]-100,coords[1][1]-50)),(0,255,220),40)ifangle_right<=90:#标准,显示绿色annotated_image=cv2AddChineseText(annotated_image,"右膝弯曲角度:"+str(int(angle_right)),tuple((coords[4][0]-100,coords[4][1]-25)),(0,255,0),40)else:#不标准:显示黄色annotated_image=cv2AddChineseText(annotated_image,"右膝弯曲角度:"+str(int(angle_right)),tuple((coords[4][0]-100,coords[4][1]-25)),(0,255,220),40)returnannotated_image步骤13:对图片中的深蹲姿势进行检测调用make_image_advance函数,它可以输入自定义的一些图像处理函数,并在完成姿态检测后进行处理。make_image_advance函数是从until文件中导入的函数。defmake_image_advance(image,func,**kwargs):参数说明如下:image:图片func:对图片进行操作的函数。该函数输入一张图片和姿态检测的结果kwargs:上述函数的其他输入返回值:经过姿态检测并标点的图片,再根据func对图片进行操作后的图像。 接下来我们进行图片读取,并将上一步骤中的compute_advanced函数输入进make_image_advance()函数,这样就可以在对图像进行姿态检测后,绘制我们自己想加上去的内容,比如膝盖弯曲角度。name="1.png"image=cv2.imread(name)annotated_image=make_image_advance(image,compute_advanced)plt.imshow(annotated_image)plt.show()步骤14:定义函数对视频帧深蹲姿势进行检测步骤14-15开始对视频中的深蹲姿势进行检测,调用make_image_advance函数,它可以输入自定义的一些图像处理函数,并在完成姿态检测后进行处理。make_image_advance函数是从until文件中导入的函数。defmake_image_advance(image,func,**kwargs):参数说明如下:image:图片func:对图片进行操作的函数。该函数输入一张图片和姿态检测的结果kwargs:上述函数的其他输入返回值:经过姿态检测并标点的图片,再根据func对图片进行操作后的图像。 接下来我们进行图片读取,并将上一步骤中的compute_advanced函数输入进make_image_advance()函数,这样就可以在对图像进行姿态检测后,绘制我们自己想加上去的内容,比如膝盖弯曲角度。defcompute_img(image,i):"""img:输入一张图片,当前帧的图片i:输入帧数,当前是第几帧输入:对输入图片按照代码进行处理后的图像"""annotated_image=make_image_advance(image,compute_advanced)returnannotated_image步骤15:对运动视频进行深蹲标准检测调用make_video函数,并将上一步的compute_img函数作为参数传递。make_video函数原型:make_video(videoname,func,**kwargs):参数:paramvideoname:视频名称;paramfunc:处理函数;返回值:经过姿态检测并标点的视频,再根据func对视频进行操作。操作完成后,我们再次通过侧边栏的文件夹处下载out.mp4进行查看,可以看到视频画面中随着人的动作变化,深蹲动作的检测结果也在变化,绿色文字表示动作标准,黄色动作表示还没达到标准状态。make_video("demo.mp4",compute_img)实训内容任务一:姿态检测体验任务二:对图片中的运动姿态进行检测任务三:对图片中的深蹲姿态进行检测任务四:对视频中的深蹲姿态进行检测四、实训环境本项目在个人电脑本地环境中完成。操作系统:Windows系统或MacOSX系统。五、实训评价创意美术体验——基于OpenCV制作苹果橙一、任务目标知识目标1、了解OpenCV2、了解图像拼接与图像金字塔技能目标1、具有使用cv2处理图像的能力2、具有使用图像金字塔进行图像融合的能力素质目标1、具有追求创新的精神2、具有良好的职业道德二、任务指南步骤1:解压资源文件压缩文件data-sets/samples.zip中包含了接下来用来制作创意图片的原始图片。步骤2:导入相关包步骤3:加载原始图像加载绿色辣椒和红色辣椒两个图像,并将其缩放至合适大小,此处为384*384像素。步骤4:分别生成两个图像的高斯金字塔步骤5:分别生成两个图像的拉普拉斯金字塔步骤6:在拉普拉斯金字塔每层图像中添加左右两半图像步骤7:分别以直接融合和金字塔融合的方式重建图像步骤8:分别保存并显示将两种方式重建的图像任务小结本任务以拼接苹果橙为例讲解了使用图像金字塔进行图像融合的方法。在图像拼接中,需要将两个图像堆叠在一起,但是由于图像之间的不连续性,可能看起来不太好。在这种情况下,使用金字塔混合图像可以无缝混合,而不会在图像中保留大量数据。实训内容请参照实现思路完成实训内容,参考任务指南,对给定的图像进行融合,分别输出直接融合与金字塔融合的效果。四、实训环境CV2五、实训评价趣味文本——人工智能对对联一、任务目标知识目标1、了解循环神经网络技能目标1、具有调用模型的能力2、具有文本处理的能力3、具有构建模型的能力素质目标1、具有良好的职业道德2、具有持续学习和追求创新的能力3、了解中国传统文化二、任务指南步骤1:解压对联数据集点击右侧黄色文件夹图标,进入“data-sets”文件夹,压缩包“data_couplet.zip”中包含了我们收集的对联数据,上联和下联分别以文本形式储存与、于两个文本文档中,其中每一行文字代表一条对联的上、下联。共计70余万条。 下面用unzip命令将压缩包解压到当前目录下。解压完成后,再次点击文件夹图标即可看到两个文本文件。步骤2:导入相关包步骤3:文本对联数据集预处理1、将上下联分别按字分隔开为了后续的模型训练,我们需要对原始文本进行预处理。下面我们打开两个文件逐行将文字以空格隔开,便于后续模型的学习和预测。样本示例处理前:欲捧行云空有憾处理后:欲捧行云空有憾2、划分出训练集和测试集在后续模型训练过程中,我们使用数据集的一部分作为训练集,一部分作为测试集。这里调用sklearn中的train_test_split来分隔数据集,其中考虑到数据总量达到70多万,参数test_size设置为0.01,这样测试集的大小为7000余条。将得到的训练集的上联x_train、下联y_train,测试集的上联x_test、下联y_test分别保存起来。其中将训练集保存到train文件夹下,测试集保存到test文件夹下。3、训练数据以字典形式存储,字典中的key代表对联的长度(包含的字数),字典中的value整体是个列表,列表中包含两个元素,一个是输入上联,另一个是输出下联,且上联和下联分别用id(某个字在所以数据集构成的字典中的序号)表示。数据样例:步骤4:构建并训练对对联模型调用train_model函数开始训练,其中最后一个参数表示epochs(训练轮数,可以自行修改)。训练完成后,最优模型将会保存在当前目录下。步骤5:输入任意上联自动对下联任务小结本任务以人工智能对对联为例讲解了自然语言处理技术的有趣应用,并完整呈现了文本数据的处理、模型的构建与训练、使用模型进行文本生成的全部流程。由于本任务以体验为主,对代码做了一定程度的封装,关于模型内部结构的搭建,没有做具体展示,有兴趣的话可以参考train_couplet.py中的build_model函数。实训内容1、读取对联文本数据集,并做预处理。2、构建对对联模型并训练。3、任意输入上联,自动生成下联。四、实训环境TensorFlow2.8五、实训评价聊天机器人一、任务目标知识目标1、了解自然语言处理2、了解意图识别技能目标1、能够熟练操作智能对话机器人平台2、能够设计对话逻辑3、能够构建语料库训练指定意图模型素质目标1、具有良好的职业道德2、具有持续学习的能力二、任务指南任务一:创建机器人步骤1:注册账号 使用浏览器打开网址:/,然后点击“立即使用”,跳转到登录/注册页面,输入邮箱和密码,使用“回车键”【Enter】提交,即完成。步骤2绑定手机号 注册完成并登录云平台后,可以看到提示,即需要用户绑定手机号,按提示操作后才可使用Chatopera云服务。步骤3:创建机器人在云服务首页,点击“创建机器人”,并按要求给你的机器人命名,如下图:步骤4:查看机器人使用数据机器人创建完成后,自动跳到以下界面,即机器人详情页,默认显示的是该机器人不同时间的访问情况。步骤5:机器人设置在机器人详情页上方的工具菜单中,点击右边第2个功能键进入设置页面。这里,你可以设置机器人默认的欢迎语和兜底话术(当回答不了用户的问题或者看不懂用户在说什么时,做出的回复语)。
如下图:步骤6:下载并安装对话设计器多轮对话设计器是可以设计满足业务需求的聊天机器人的PC端应用程序,可以基于聊天机器人云服务,使用脚本语法设计复杂的对话逻辑。 点击页面左侧的文件夹图标,进入文件夹“data-sets”,如果你的电脑是windows系统,选中exe文件并右键下载,并安装,如果你的电脑是macOS系统,选中dmg文件,并右键下载后进行安装。步骤7:添加机器人首先,打开上节任务中的云服务平台,找到你的专属机器人,打开机器人详情页的设置,可以看到“ClientId”和“Secret”,如下图:然后,打开上一步安装的多轮对话设计器,点击添加按钮,添加你的机器人,这里需要输入上图中的“ClientId”和“Secret”,如下图:步骤8:机器人对话添加机器人完成后,在对话设计器首页可以看到聊天机器人列表。打开添加的机器人,比如:Robot小派,如下图:打开后,可以看到一个话题“greetings”,这个话题是在机器人创建时默认生成的。
点击话题对应的“编辑”按钮,可以看到如下界面,在中间的对话窗口,输入“你好”,机器人回复“欢迎惠顾”,这个简单的对话是由右侧的脚本编辑窗口实现的。任务二:客服小助理-回答常见问题步骤1:打开聊天机器人知识库在聊天机器人云服务平台,找到你的专属机器人详情页,比如:Robot小派,从左往右点击第三个选项即“知识库”。步骤2:添加第一个问题 在“知识库”页面,点击蓝底白色的加号,出现下图的问题编辑页面,这里我们主要针对顾客咨询的发货时间做一个问答知识库。“问题”处填写:什么时候发货;“相似问题”处添加几个该问题的相似描述,比如:啥时候发货、几天发货、发货快吗等等。这样,机器人遇到这类问题就可以给出“答案”中的回答结果。步骤3:对话测试 添加好第一个问题之后,我们在“测试对话”中测试一下效果。 点击聊天机器人详情页中“测试对话”,如下图,点击“多轮对话”选项卡,在文本区域输入关于发货的问题,比如:几天发货、什么时间发货,再点击“发送”,可以看到机器人答复:在您拍下的48小时内尽快为您发货哦!步骤4:添加第二个问题 顾客咨询较多的问题还有快递,比如发什么快递。问题添加如下图:步骤5:对话测试任务三:客服小助理-协助下单步骤1:添加词典 在聊天机器人云服务平台,找到你的专属机器人详情页中的“词典”并打开。选择“引用系统词典”,在词典列表中,引用“人名”和“地名”即可,目的是在机器人识别了顾客要下单的意图后,能够从与顾客的对话中获取收货地址和收件人。如下图:步骤2:新建意图 在聊天机器人云服务平台,找到你的专属机器人详情页中的“意图”并打开。点击“新建意图”,填写意图名称,比如:order_pen。填写意图的中文描述:步骤3:编辑意图 点击该意图右侧的“编辑”进行编辑意图: 首先编写该意图对应的可能的“用户说法”,步骤4:设置槽位 在识别用户的意图之后,可以使用槽位的方式来获取关键信息。当没有获取到槽位信息时,就采用追问的方式进行获取。在意图编辑页面中,指定槽位的名称、槽位对应的词典(是人名还是地名)、是否是必填项,如果勾选了必填项,则要填写“追问”,需要机器人识别了用户下单的意图后,对用户提出追问,以获取该槽位的人名或者地址信息。填写完成后点击“添加”即可。步骤5:添加带槽位的用户说法 在意图编辑页面,回到“用户说法”,继续添加带有槽位的用户说法,如下图:步骤6:训练模型 填充用户说法的过程,相当于数据标注,即标注了添加上的这些句子被打上了意图标签“是下单意图”。 点击意图编辑页面最下方的保存按钮,会开始模型训练,由于数据量少,稍等几秒钟,意图识别模型就训练完成了。步骤7:编写脚本 意图识别完成后,需要在多轮对话设计器中配置脚本。因为以上步骤只能完成简单的问答,获取到关键信息。如果想要把意图识别的对话集成到电商下单服务中,就要借助多轮对话设计器。打开多轮对话设计器,从机器人列表打开你的专属机器人。“新建话题”,填写话题名称比如:intents。点击“orders”话题对应的“编辑”按钮,进入如下界面:在“脚本”里填写以下代码://下单intentorder_pen-^handlePenOrder()+${0.6}{没错,下单吧|下单}%^handlePenOrder()-^placeOrder()+${0.6}{不买了}%^handlePenOrder()-^cancelOrder()+${0.6}{信息有误,重新下单}%^handlePenOrder()-^rebookOrder()在“函数”里填写如下代码://确认下单信息exports.handlePenOrder=asyncfunction(){debug("[handlePenOrder]ent",JSON.stringify(ent))letentities=_.keyBy(ent.entities,'name');return{text:`和您确认一下信息,收件地址<spanclass="katex"><spanclass="katex-mathml"><mathxmlns="/1998/Math/MathML"><semantics><mrow><mrow><mi>e</mi><mi>n</mi><mi>t</mi><mi>i</mi><mi>t</mi><mi>i</mi><mi>e</mi><mi>s</mi><mostretchy="false">[</mo><mimathvariant="normal">"</mi><mi>C</mi><mi>i</mi><mi>t</mi><mi>y</mi><mi>N</mi><mi>a</mi><mi>m</mi><mi>e</mi><mimathvariant="normal">"</mi><mostretchy="false">]</mo><mostretchy="false">[</mo><mimathvariant="normal">"</mi><mi>v</mi><mi>a</mi><mi>l</mi><mimathvariant="normal">"</mi><mostretchy="false">]</mo></mrow><mtext>,详细地址</mtext></mrow><annotationencoding="application/x-tex">{entities["CityName"]["val"]},详细地址</annotation></semantics></math></span><spanclass="katex-html"aria-hidden="true"><spanclass="base"><spanclass="strut"style="height:1em;vertical-align:-0.25em;"></span><spanclass="mord"><spanclass="mordmathnormal">e</span><spanclass="mordmathnormal">n</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">e</span><spanclass="mordmathnormal">s</span><spanclass="mopen">[</span><spanclass="mord">"</span><spanclass="mordmathnormal"style="margin-right:0.07153em;">C</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal"style="margin-right:0.03588em;">y</span><spanclass="mordmathnormal"style="margin-right:0.10903em;">N</span><spanclass="mordmathnormal">a</span><spanclass="mordmathnormal">m</span><spanclass="mordmathnormal">e</span><spanclass="mord">"</span><spanclass="mclose">]</span><spanclass="mopen">[</span><spanclass="mord">"</span><spanclass="mordmathnormal"style="margin-right:0.03588em;">v</span><spanclass="mordmathnormal">a</span><spanclass="mordmathnormal"style="margin-right:0.01968em;">l</span><spanclass="mord">"</span><spanclass="mclose">]</span></span><spanclass="mordcjk_fallback">,</span><spanclass="mordcjk_fallback">详</span><spanclass="mordcjk_fallback">细</span><spanclass="mordcjk_fallback">地</span><spanclass="mordcjk_fallback">址</span></span></span></span>{entities["CommunityName"]["val"]},收件人${entities["AddresseeName"]["val"]}`,params:[{label:"没错,下单吧",type:"button",text:"没错,下单吧"},{label:"信息有误,重新下单",type:"button",text:"我想下单"},{label:"不买了",type:"button",text:"不买了"},]}}//下单exports.placeOrder=asyncfunction(){ent.drop=true;letentities=_.keyBy(ent.entities,'name');return{text:"{CLEAR}已帮您下单,请点击支付",params:[{type:'card',title:"订单详情",thumbnail:"/it/u=1105387277,858129327&fm=15&fmt=auto&gp=0.jpg",summary:`收货地:<spanclass="katex"><spanclass="katex-mathml"><mathxmlns="/1998/Math/MathML"><semantics><mrow><mrow><mi>e</mi><mi>n</mi><mi>t</mi><mi>i</mi><mi>t</mi><mi>i</mi><mi>e</mi><mi>s</mi><mostretchy="false">[</mo><mimathvariant="normal">"</mi><mi>C</mi><mi>i</mi><mi>t</mi><mi>y</mi><mi>N</mi><mi>a</mi><mi>m</mi><mi>e</mi><mimathvariant="normal">"</mi><mostretchy="false">]</mo><mostretchy="false">[</mo><mimathvariant="normal">"</mi><mi>v</mi><mi>a</mi><mi>l</mi><mimathvariant="normal">"</mi><mostretchy="false">]</mo></mrow><mtext>,</mtext></mrow><annotationencoding="application/x-tex">{entities["CityName"]["val"]},</annotation></semantics></math></span><spanclass="katex-html"aria-hidden="true"><spanclass="base"><spanclass="strut"style="height:1em;vertical-align:-0.25em;"></span><spanclass="mord"><spanclass="mordmathnormal">e</span><spanclass="mordmathnormal">n</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">e</span><spanclass="mordmathnormal">s</span><spanclass="mopen">[</span><spanclass="mord">"</span><spanclass="mordmathnormal"style="margin-right:0.07153em;">C</span><spanclass="mordmathnormal">i</span><spanclass="mordmathnormal">t</span><spanclass="mordmathnormal"style="margin-right:0.03588em;">y</span><spanclass="mordmathnormal"style="margin-right:0.10903em;">N</span><spanclass="mordmathnormal">a</span><spanclass="mordmathnormal">m</span><spanclass="mordmathnormal">e</span><spanclass="mord">"</span><spanclass="mclose">]</span><spanclass="mopen">[</span><spanclass="mord">"</span><spanclass="mordmathnormal"style="margin-right:0.03588em;">v</span><spanclass="mordmathnormal">a</span><spanclass="mordmathnormal"style="margin-right:0.01968em;">l</span><spanclass="mord">"</span><spanclass="mclose">]</span></span><spanclass="mordcjk_fallback">,</span></span></span></span>{entities["CommunityName"]["val"]},收件人${entities["AddresseeName"]["val"]}`,}]}}//不买了exports.cancelOrder=asyncfunction(){ent.drop=true;return{text:"{CLEAR}好的,下次再帮您下单"}}//重新下单exports.rebookOrder=asyncfunction(){debug("rebookOrderent",ent);return"^topicRedirect(\"intents\",\"order_pen\",true)"}完成后,点击右上角的“保存”,显示“数据上传成功”。步骤8:对话测试 以上步骤完成后,就可以与机器人进行对话测试,如下图,也可以输入用户说法中的其他说法:任务四:客服小助理-自动推送天气步骤1:新建意图在聊天机器人云服务平台,找到你的专属机器人详情页中的“意图”并打开。点击“新建意图”,比如意图名为“ask_weather”,中文名称“查天气”。步骤2:编辑意图同任务三,添加该对话中可能的用户说法:步骤3:设置槽位识别用户的查天气意图之后,要确认用户要查什么地方的天气,所以需要通过槽位的方式获取或者追问到该信息。回到“用户说法”,添加带槽位的用户说法。步骤4:训练意图模型以上关于查天气的数据标注完成之后,就可以点击“保存”,开始训练意图识别模型了。步骤5:集成天气查询API 以上步骤能够实现简单对话,获取用户所要查询天气的地点,所以要实现把实际的天气推送给用户,还要配置多轮对话设计器。打开多轮对话编辑器,打开聊天机器人,编辑intents意图,在“脚本”中插入以下代码://查询天气intentask_weather-^handleSuccAskWeather()-{x}^handleLoseAskWeather()在“函数”中插入以下代码://第三方服务类varWForewast=function(apiKey){if(!apiKey)thrownewError('Invalidtoken,getitfrom/my/service');this.key=apiKey;}WFtotype.getWeatherByCity=function(city){returnnewPromise((resolve,reject)=>{if(!city)returnreject("城市名不能为空");leturl=config["HEWEATHER_URL"]+"/weather?city="+encodeURIComponent(city)+"&key="+this.keyhttp.get(url).then((res)=>{if(res.data.HeWeather5[0]&&res.data.HeWeather5[0].suggestion){resolve(res.data.HeWeather5[0].suggestion);}else{reject("天气建议未返回约定结果!");}}).catch(function(err){if(err)returnreject(err);});})}constwf=newWForewast(config["HEWEATHER_KEY"]);//查询天气exports.handleSuccAskWeather=asyncfunction(){debug("handleSuccAskWeatherent",ent);letentities=_.keyBy(ent.entities,'name');letloc=entities["loc"]["val"];try{letresult=awaitwf.getWeatherByCity(loc);debug("LOC%sresult%j",loc,result);returnloc+"天气:"+result["comf"]["txt"]+"(数据来源:和风天气)";}catch(e){debug(e)return`很抱歉,没有获得${loc}的天气信息。`}}//超过追问次数,进入失败函数exports.handleLoseAskWeather=asyncfunction(){debug("handleLoseAskWeatherent",ent);return"未得到您的查询信息,您可以说:我想查询北京的天气。";}点击“保存”,提示“数据上传成功”。步骤6:添加环境变量 在对话中,机器人在识别意图和地点后,请求第三方接口,通过互联网HTTPAPI的形式,查询天气信息,这个第三方接口需要认证,我们使用【环境变量】添加认证信息。具体认证信息如下:HEWEATHER_URL->/v5HEWEATHER_KEY->182f1b6826d94c6285a489d2414f3ad0步骤7:对话测试实训内容任务一:创建智能对话机器人,并完成基本配置。任务二:创建知识库,能够回答电商客服高频问题(至少三个)。任务三:创建意图,在用户咨询下单时做出合理对话。任务四:创建意图,在用户咨询天气时做出合理对话,并推送天气。四、实训环境本项目在个人电脑本地环境中完成。操作系统:Windows系统或MacOSX系统。五、实训评价刷脸签到系统一、任务目标知识目标1、了解人脸识别2、了解Face_recognition库技能目标1、能够使用Pillow处理图像2、能够使用OpenCV处理视频3、能够使用Face_recognition实现人脸识别素质目标1、具有良好的职业道德2、具有持续学习的能力二、任务指南任务一:基于Face_recognition实现人脸定位步骤1:导入相关包这里导入两个python库:face_recognition用来识别图像中的人脸;PIL中的Image用来显示图像。#人脸识别库importface_recognition#绘图库importmatplotlib.pyplotasplt步骤2:加载图片点击左侧文件夹图标,进入“data-sets”文件夹,可以看到“test.jpg”,下面我们将以这张图片为例,识别图片中的人脸并输出。调用face_recognition的load_image_file函数来加载图片。face_recognition.load_image_file(file,mode='RGB')"""作用:读取图像file:图片文件名或者文件对象mode:图片颜色通道。不输入则默认'RGB',如果显示黑白图像则输入'L'。输出:numpy数组格式的图像内容"""image=face_recognition.load_image_file("./data-sets/马文.png")步骤3:定位人脸位置调用face_recognition中的face_locations函数,可以定位图像中识别出的所有人脸位置信息,返回值是列表形式,列表中每一行是一张人脸的位置信息,包括[top,right,bottom,left]。face_recognition.face_locations(img)"""作用:读取图像img:numpy数组格式的图像输出:人脸位置的的元组列表。每一个元组都包含人脸的像素位置信息(上,右,下,左)"""face_locations=face_recognition.face_locations(image,model="cnn")print("在这张图片中找到{}张人脸".format(len(face_locations)))步骤4:输出人脸#遍历人脸坐标forface_locationinface_locations:top,right,bottom,left=face_locationprint("人脸像素坐标高:{},左:{},下:{},右:{}".format(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届江苏省泰州市高三冲刺模拟历史试卷含解析
- 国潮年货选购指南
- 2026年旅游产业创新模式报告
- 2026年智能导览系统应用报告
- 2025年生态旅游景区智慧化建设绿色出行技术创新可行性报告
- 2026年内容营销未来趋势报告
- 2026年智能定位技术行业分析报告
- 康复评估的循证康复循证实践规范
- 高中语文课堂错误资源化对培养学生语文学习兴趣的研究教学研究课题报告
- 2026年环保材料新能源应用报告
- GB/T 6075.1-2012机械振动在非旋转部件上测量评价机器的振动第1部分:总则
- GB/T 39165-2020电阻点焊及凸焊接头的剥离和凿离试验方法
- GA/T 1442-2017法庭科学摹仿笔迹检验技术规程
- 基本习题及答案-量子力学
- 2015新版《建筑设计服务计费指导》
- 水利工程中鱼道设计的工程伦理思考课件
- 高压输电线路施工的环保水保措施
- 2022年南靖县荆江国有资产投资有限公司招聘笔试题库及答案解析
- 船舶建造技术水平评价指标体系
- 《汉服》PPT课件(完整版)
- 洪涝灾区的消毒问题-班海群
评论
0/150
提交评论