粉丝323获赞2186

得到这些轮廓所对应的框框之后,那我们接下来就可以尝试在图里面啊,把这些框给画出来,然后来验证一下我们这些框对不对。 那怎样做呢?其实也非常简单,首先啊,就是先要拿到我们的 body rex, 那 body rex 的话,我们可以搞个变量啊,比如说 x y w h。 那这里呢,有个小的语法细节,虽然我们的巴黎 rex 打印出来是一个原组,对不对?但是呢,如果我们这边啊,我用四个变量 来对接的话,那它自动的就会把这个,比如说二十八给 x, 十一给 y, 三十一给 w, 五十四给 h, 这是 拍摄里面这个解包的这样一个语法。好,那有了这 x y w h 之后,那接下来我们就可以画框框了,怎么画呢? c b 二点 rectangle, 那这个函数有这么几个参数要填,第一个就是你到底要在哪张图上画,是不是?那你可能第一反应啊,那不就是在这个一面子上画吗? 对不对啊?那你在英妹子上画的话,你要看一下这个英妹子已经是什么图像了,已经是一个二指图了,对不对? 他不是彩色图了。所以如果你想在这个原图上画一个红色的框框的话,你是根本就画不出来的,因为你只有一个通道。所以呢,如果我们想在这个原图上 把这个几个字符的轮廓的对应的包围框给画出来,画个红色的框的话,那么我们这个图得改,改成什么呢?呃,得改成就是从这开始就不是这个音面子了,而是用另外一个变亮了。 嗯,所以呢,我们假设这样子啊,简单起见, row in mat, 这是原始的图,然后呢把原始的图扔进来,那接下来这个 in mat 就是我们,呃,这个 一路处理下来之后的一面子,然后我们要在哪张图上画呢?我肯定是在肉一面子上,所以呢这里肉一面子。接下来第二个参数,就是我这个矩形的左上角还有一个右下角这两个作 标,那左上角的坐标很好表示啊,那就是 x y, 对不对?那右下角的坐标是不是 x 加 w, 还有 y 加 h, 对不对啊?那就是 x 加 w, y 加 h。 完了之后呢,接下来就是我这个矩形,也就是这个框框他要以什么颜色来画出来,那比如说 b g r 嘛?比如说我要红色,那就零零二五五。 然后呢接下来就是一个我这个方框,他这个线条的粗细,那你这个值越大,那他就越粗,比如说我来个三吧,好吧,然后呢,最后我们在 i am so 的时候呢,我们就把这个肉 给显示出来,好,我们来试一下,哎,大家可以看到是不是五个框啊? 是不是画出来了,对不对?然后呢,由于这个框的那个线条比较粗,就交织在一起了,我们可以搞一个,搞个一试一下走,嗯,大家可以看到很酷吧。



使用欧喷 cv 读取一张图片是通过 im 瑞的方法传入图片的地址,返回读取回来的图像数据,读取回来的图片可以直接打印显示, 可以看到打印显示的结果是数字组成的多维数组。上节视频讲过, c v 二里面使用 num pay 存储图像数据,打印出来的其实就是 num pan 的数组,显示在 im 瑞的方法中 第一个位置参数传入的是图片的路径,这里的路径有两种形式,一,先对路径,二、绝对路径。先对路径是根据程序运行的当前工作目录来写,当前的工作目录下有个 res 的文件夹, 瑞士下有个有 buff 老师的头像,所以可以通过相对路径读取回来图片。绝对路径 是图片文件所在的词盘的完整路径。比如可以这样写, 通过传入完整路径,还可以读取非空城目录下的图片文件。这里特别要注意的是, oppo c v 不支持中文路径和中文图片名称的,在一盘下这张有 buff 点 png 虽然存在, 但是读取后打印的结果是,那 还有一点要注意的是,传入一个全英文的图片路径,但这个图片不存在代码不会报错, 只是读取的结果是烂,所以在操作图像前,要记得对图片进行非空判断。

是淘米,今天继续我们 open cv 学习,那么在上一节课当中,我们给大家讲过,通过我们 opencv 的一个哈尔吉呢去进行人脸检测。今天啊我们继续讲这个人脸检测,不过呢是基于我们的这个叫 deliber 这个库,那 deliber 是什么呢?它其实就是一个深度学习开源工具 啊,这个得力不库啊,是基于 c 加加开发的,不过呢也支持 python 啊,所以我们在应用的时候啊,直接调用这个库就可以,非常简单。 那么这个得利本呢,对于人脸特征提取啊,他的支持比较好,那么也有很多这个训练好的人脸特征提取模型,可以直接拿过来使用。 delete 人脸识别开发呢,非常适合用于一些人脸的一些项目。所以啊,如果以后各位朋友做类似的项目呢,可以调用这个库,非常简单。那在这里,在 在这里呢,我也给大家提供了一个官方地址和 github 上的一个源码库啊,待会呢我也会给大家进行一下演示。那么 deliver 这个算法呢?今天我们会用到其中的一个算法,就这个号的算法啊,号的算法呢,一般是用来进行一个行人检测的, 那这这个号的算法呢,是在二零零五年提出来的,当时呢也是比较有影响力,那号的算法是什么呢?他的中文意思叫做方向梯度直方图, 那这个 hulk 呢,它是一种特征描述子啊,通常用于从图像数据中提取特征,它广泛应用于我们计算机视觉任务中的物体检测。 这里啊有一些这个名词啊,比如说特征描述子啊,他的那什么是特征描述子呢?他是图像的简化表示,仅仅包含 有关图像的重要信息,什么意思呢?比如说我们有一张图片,对吧?那么这个图片当中我们想检测里面的人脸,那么这个人脸有关这个人脸的信息就是一些关键信息,那么这些关键信息呢,我们就可以说他就是一种特征描述字 啊,理解起来啊,可以上去比较形象的去理解啊。那么这里呢,我给大家就提供了一个网址啊,你可以下载这篇论文去看一下,这是作者呢在零五年发表的一篇论文,我觉得讲的比较详细。 关于这个 hold 算法呢,我会在接下来的一期视频当中,专门给大家讲一讲这个 hold 算法的原理,包括它的一个运作的一个方式是怎样的,以及它的一个结果。 ok, 那今天呢,我们主要就是通过我们这个 delete 算法来给大家做一个人脸的检测。首先我们可以呢去到 官网看一下,包括他这个源码库看一下,我们还是看一下他的官网,我这里呢已经给大家找好了,比如说这个就是我们得利不酷的一个官网啊,那么在这里呢,他有介绍了很多这个呃库里面的一些算法,比如说像机器学习算法, 还有呢 s v m 算法,对吧?包括像这个呃 hog 算法,也有里面有一个 hog 算法,在这里有个叫 hog 算法,对吧? 包括像什么目标检测啊,人脸识别。所以呢,感兴趣的朋友啊,可以到他的官网来看一下他这个算法的实现是怎样的。 不过有一点啊,它里面这些算法的实现呢,都是用 c 加加写成的,如果你懂 c 加加,那我觉得读起来是比较比较比较顺畅的啊,不过呢你可以了解一下他这个实现的一个过程是怎样的,可以可以参考一下,那我们这边也 看一下它的这个 github 上的源码库,那么这个这个就是它的一个源码库,你可以把它下载下来啊,如果你没有这个 github 的一个这个账号呢,你就在这里啊进行一个, 进行一个注册就可以了,注册注册好之后你就可以啊,有个叫做 download, 你可以点击 download 就可以了。那么下载下来之后啊,你需要把这个文件文件包进行解压,解压之后呢就能够 解压之后啊就能够看到这个 deliber 这个源码库。我给大家看一下这个 deliber 源码库,它里面呢就是有一些文档,一些文件,哎,你可以自己去看一下的。 我这里呢就不给大家详细的介绍了,包括他一些案例,对吧? examples 你都可以去看一下,包括用 python 写的一些案例,它里面都比较丰富,可以去看一下怎么实现的啊?那么今天呢,我们就 通过代码给大家演示一下如何基于 deliber 来进行人脸的检测。首先啊,我们需要呢打开我们上一节视频当中创建的那个项目 hfs recognition, 如果你是第一次啊这个创建项目呢,你就点击这个叫做 create new project, 你就创建一个新的一个项目工程。那这里我就不给大家介绍了,因为上一节视频包括之前的视频我都反复讲过如何通过拍 charm 来创建一个新的工程项目,首先我们还是打开这个 face recognition, 这个是我们上一节课创建的一个工程项目啊,包括这个这边的代码是我们上一节视频当中写的,是基于这个 hard 这个吉年来进行人脸检测。一个是呢检测图片,一个是通过我们的摄像头来进行人脸检测啊,我就不给大家去细讲了, 感兴趣的朋友可以去看一下上一节的视频。那么在这里呢,我们创建一个新的一个 package, 一个包,比如说我这边叫做 face detection, 对吧?人脸检测 detection, 然后呢是基于这个 deliberate, ok, 然后呢在这个呃这个包下面我们再新建一个 pass 文件,我们新建一个 pass 文件,比如说 face detection, 对吧? deliber 或者说 the lab, 对吧?我们今天主要是呃第一个代码呢,我们主要是用它来检测图片的,我们写一个 emi 九 就可以了,这个就是我们一个建行的一个空的一个拍摄文件。那么想一下我们要实现一个人脸检测,他的步骤有哪些?那么我们还是仿照上一节视频当中讲的那个流程,我们先用中文来描述一下这个,像这个 啊,他的流程是怎样的?比如说第一步我们是不是要导入一个库,对吧?那么第二步我们要干嘛呢?是不是你要定一个方法,用它来显示图片,对吧?显示图片,也就是说显示我们最终的一个检测效果,那么我们就通过这个方法去实现。 那么第三一步是什么呢?我们是不是还是跟呃上次讲的一样,我们还是要定一个方法,这个方法主要是用来绘制这个人脸的矩形框,因为我们这个人脸检测出来之后啊,在他的面部会有一个矩形框,所以这个方法呢,主要是绘制 人年矩形框,它主要是起到一个绘制作用。 ok, 这个就是我们需要定义的两个方法。那接下来呢,我们是不是就要实现我们这个主函数了,叫做 man 函数,对吧?那我这里呢,先提前给大家写一下,比如说 man, 然后这 边是一个程序的一个入口,这这个写法是非常固定的,所以这个是非常固定的,我们其他代码呢,会写写在这个卖函数下面就可以了。 ok, 我们看一下第四步要干嘛?第,因为我们是对一张图片进行软件检测,所以呢,你需要读取一张图片,对不对? 读取一张图片,这是第四步。那第五步我们要干嘛?你是不是要把这张图片,因为他是一张彩色图片吗?你要进行一个灰度转换,对吧?这些步骤啊,我觉得我们已经写了很多遍了,我就稍微一笔带过了,一笔带过, 然后呢?你这个,呃,图片转换之后,那么接下来你是不是需要调用我们这个 delete 库,对吧?调用这个 delete 库,所以我这边可以这样写,调用 delete 库啊,库中的检测器,因为我们今天主要是基于 delete 来做人脸检测,所以我们就调用他这个方法,对吧?用他这个检测器来进行人脸检测就可以了。那么接下来我们第七步要干嘛 啊?对吧?第七步,那你是不是当你检通过这个检测器检测出人脸之后,我是不是需要通过这个方法把这个人脸给他绘制出来,就画出一些矩形框,把这个人脸给他框住就可以了,对吧?所以我这里呢,第七步就是说给检测出的人脸, 给检测出的人脸绘制矩形框,对吧?所以我们这边的每一步其实他都是有依据的,都是啊,在上一步完成之后,我们继续下一步, ok, 那么第八步是不是什么呢?我们是不是要创建一个画布,对吧?创建画布,因为我们要把这个结果显示在这个画布上。那第九一步是什么呢? 我们是不是要把整个检测效果给他显示出来,显示,对吧?最终的检测效果,他的每一步我们就是这样这样去去做的,或者说他的依据就是这样的,他的流程是这样,我们我们稍微浏览一下导入库,显示图片, 绘制人脸矩形框,读取一张图片灰度转换,调用这个库,调用库里面的检测器。然后呢,我们把检测出来的人脸呢,给他画上这些矩形框。 最第八步呢,创建一个画布。第九步呢,就显示最终的一个一个结果。那我们用代码来实现一下,比如第一步很简单吧, 首先呢,我们是需要导入我们的 cv 库,还需要导入什么?导入我们的 delibe 库,对吧?因为我们今天主要是通过 delibe 来实现的。然后呢,我们还需要导入我们的 number 派,对吧?南派库还需要导入一个叫做 mud plot leave 库,这这几个库啊,我们之前基本上都要用到这几个库, ok, 这个是南派,不要写错,是南派, ok, 呃,酷。导入好之后就是定一个方法来显示图片,显示这个效果啊,那么你显示图片,所以呢,你需要传进来一张图片,那么你还需要传进来一个抬头,就一个标题,对吧?一个标题,这个图片的标题, 那么图片传进来之后,它是以它的这个读取的,我们 open cv 是里面是一个 bgr 的一个通道的一个图片,所以我们需要把它转换成一个 rgb, 所以这边呢,我们需要对图片进行一个通道的一个顺序转换, 比如说这个,其实在以前我们这个代码当中啊,我们反复讲过了,这边前面的高和宽不变, 后面的通道给它颠,就是,呃,把它的顺序啊,稍微颠倒一下就可以了,把 bgr 的通道转换成 rgb, 也就颠倒一下就可以了。那么接下来呢,我们要把它的标题哎,给它显示一下抬头, 然后我们还需要显示什么?你是不是还需要显示一下这张图片,对吧?你要把这张图图片给它显示出来, i'm show 这个方法,那把这个 imager, 这个 rgb 的图片给它显示,然后呢我们把整个坐标轴关闭,我们不需要这个坐标轴,所以我们就用 off 把它关闭就可以了。 这个就是啊,我们显示图片的方法就这几行,代码非常简单。那么第三一步呢,就是绘制人脸矩形,怎么绘制呢?那跟我们上一节视频当中啊,这个做法一模一样,一模一样直接是一个呃, d f, 对吧?然后呢绘制,我这边用的是 pro 用的这个方法名 rectangle, 那么你绘制这个人脸矩形框,你是不是要把那个图片给我传进来, 同时呢你还需要给我传进,传进来什么呢?你检测到的人脸,对吧?比如说你,你在一张图片当中检测到了两个两啊,两个人脸,那么你这个人脸这个数据,你是不是要给我传进来我才能绘制? 如果你没有检测到,那我肯定不能绘制吗?你,你得到几个人脸了,那我就给你绘制几个,所以你这边肯定要给我传进来一个 faces, 就说你,你的检测器,也就是你在这里 你的检测器,他到底检测到了几个人脸,你必须要给我传进来, ok, 那么传进来之后我们要干嘛?你是不是要在图片上给他绘制出人脸了?很简单,怎么绘制呢?跟上一节视频当中一模一样。我们这边有个叫做 d e t 表示 detect 简写,然后可以也可以用 face 吧?用 face, 比如说 for face 啊, faces, 就说我会把你传进来的几个人脸一个一个的通过循环给它取出来, 于是我取出第一个人脸,我就给你画出来,第二个人脸我再给你画出来,第三个人脸我再给你画出来,就是说我通过循环一个一个的提取。那接下来呢?我们就给他进一个绘制,用我们的 rectangle 这个方法就是绘制一个长方形。首先你要把图片传进来,我是在你这张图片上绘制, 接下来呢,你需要把你的坐标给我传进来,比如说我们上一节,上一节讲这个哈尔纪念的时候啊,比如说像这张图片,对吧?我们上次给大家讲过,你在他这个人脸上画一个矩形框,你是不是要把这个,呃,你是不是要把这个第一个坐标,也就是 这个坐标你给我传进来,对吧?然后是哪一个坐标?就是这个对角线的坐标,这两个坐标你给我传给我之后,我就可以把你这个矩形光给你画出来。所以呢我们接下来也是获取到他的两个局,两个坐标啊,一个坐标是这里,一个坐标是这里, 所以呢我们代码也是这样去实现的。首先我们获取到它第一个坐标啊,也就是通过我们这个 face 能够获取到他这个左边的,我们通过这个方法叫 left, 就能够获取到他左边的这个坐标。然后呢我们再获取到什么呢?他这个上面的这个坐标上面的叫 top, 我们就能够把第一个坐标给他获取得到。因为这个, 呃,人脸检测到之后啊,他给你传返回的数据呢,他是有坐标的,他是有坐标的啊,这个坐标呢,就说一个是 左上角的一个坐标是这样的,一个是右下角的坐标,所以呢这边你一定要把它括起来,这里啊,它是有一个圆括号,把这两个值放在一起的,所以这边一定要注意括号不要少写了。然后我们再把它的这个,呃右下角就那个斜对角形的坐标给它拿到,一个是 right 方法, 一个是 fasten, 然后是 mountain, 一个底部的一个一个值你会拿到,这样呢我们就把第一个坐标给他拿到了, 第二个坐标也给他拿到了,也就是跟我们 pp ppt 上一样,我先把第一个坐标拿到了,再把第二个坐标拿到了,那么这个矩形框我一下子就能画出来了,所以这边我写的这个作用啊,就是说获取它的坐标值, 那么获取到坐标之后,我再画这个矩形框的时候,我就要给这个矩形复制一个 颜色,比如说一个蓝色,对吧? bg 二嘛,我这个 b 呢给了他一个二五五的值,那个 g 和二全部是零,那么他最终显示呢,肯定肯定就是一个蓝色的值,就一个蓝色的线。 然后呢我再给这个矩形框加粗啊,或者他的这个线条吧,我给他一个四号,就是他粗一点,粗一点就行了, 这个就是我们的矩形框,那么一个循环下来啊,就一个负循环下来呢,他就会把你检测到的人脸全部给他画上这个矩形框,最后呢我们需要把这个, 呃这个图片给他返回,返回去。为什么呢?因为我们这个图片啊,你传进来的时候他没有画矩形框,那么你这个复循框运行完之后,他上面呢都把人脸给你画出矩形框了,所以这个图片呢也就变成了一张新的图片,所以你要把这张图片呢再给他返回,返回去,因为我这边, 因为我这里啊要给他显示图片的,对吧?所以你这边这个图片你肯定要给我返回来的。接下来呢我们这个方法就给他写好了。如何绘制人脸的矩形框, 那么第四一步是什么呢?我们是不是要读取一张图片了,对吧?因为我们要在,我们要检测一张图片,所以这里呢我们可以这样写,比如说 imager, 对吧?我们要读取一张图片, 用我们的 imere 的就可以了。然后我这边比如说我读起一个什么呢?比如像这个 family, 我看我这边有没有,哎,我这边还没有素材,对吧?我就把啊上一件视频当中这个 family, 这个这个图片我给他拷贝过来,怎么拷贝呢?很简单,我这边可以这样写,我看看行不行? 这个右击,然后有个叫 copy, 对吧? copy 拷贝,然后在这里啊,右击粘贴就可以了。呃,粘贴一下, 这样呢,我这个图片啊,这个素材就给我拷拷贝过来了,对吧?那接下来呢,我们就检测这张图片,给我这里将写 检测这个人脸就是发明了吗?对,图片呢,我们已经读取进来了,接接下来我们是不是要对他进行一个灰度转换?灰度转换很简单啦,直接是调用这个 cvt 开了,对吧?然后呢,你把图片传进来,我再给他进行一个灰度的转换, 首先是通过我们的 bgr 转换成一个 gra 就可以了,非常简单。然后转换完之后,我们接下来很重要的一点就是要调用 the leave 库中的这个检测器,这个检测检这个检测器的调用非常简单, 直接是 delete, 对吧?然后点,然后是 get 就可以了。然后呢,因为我们是对人脸的一个正面进行检测嘛,所以我们 就选择这个 frontal face, 呃, detector 就可以了,我们回车一下,我们就调用这个方法来进行啊,就说来啊,调用他的一个检测器,比如说我这边给他负一个值叫 detector 吧,对吧?我现在呢已经获取到了这 glib 库中的这个 这个库中的这个检测器了,那接下来呢,我这个检测器获取到了,那我是不是要对这个人脸啊?对,这对这个图片,这个灰度图片进行人脸检测了,对吧?这个太简单了,直接用这个检测器,比如说 detector, 这是我们刚刚获取到的检测器,对吧?把这张灰度图片给他传进去就可以了,传进去就可以了。然后呢,我这边这里呢,会得到一个返回的检测到的一个值,也就是说它里面有几个人脸,他都会一下子给你检测出来。所以我这里啊,我就用一个变量来接收这个检测 的结果,比如说检测的结果 detects result 就行了,对吧?我可以这样,呃,把这个检测的结果呢复制给了这个变量,就说 我获取,我获取到了,你给我检测出来几个人脸,那这里呢,我可以再加一个参数,比如加个一,为什么就说我想把这张图片给他放大一倍, 让我们这个检测器呢去检测,这样呢能够确保它里面所有的人脸都能够被检测到, ok, 这个一的作用啊,就是说放大,我这边给大家备注一下,一,比如说,哎, 我这边给大家做一个备注,一,代表将图片放大一倍。 ok, 这个就是我们通过检测器来检测人脸,对图片进行一个检测。那么接下来呢,我们是不是要获取据说 给我们这个人脸啊,进行一个绘制矩形框,怎么绘制呢?直接通过我们的 plot 这个 rectangle 这个方法,就通过这个方法来绘制矩形,我们直接调用它就可以了。然后呢你要把图片给它传进去,比如说我这边传一个图片,我把它的备份拷贝一份给它传过去,然后还干嘛? 我们是不是要把这个结果给他传过去啊?对吧?因为这个就是我们检测出来的人脸嘛,我就要把这个结果给他返回过去,那么他画好, 给他画好之后,他又给我返回出一张新的图片,所以我这里呢需要接收一下,接收一下这个新的图片,可是我这边叫做 image result 吧,这个就是我接收到的一个啊,新的一个图片了,上面呢 他给我绘制了,绘制出了所有的人脸,然后接下来呢,我们是创建一个画布,怎么创建呢?通过我们的 p o t 这个 figure 来创建画布就可以了,然后里面我们设置一个画布的大小,对吧?然后呢我们还可以设置什么?设置一下画布的一个标题,比如说 super title, 我们这边写一个 fast detection with deliber, 对吧?我们基于 deliber 来做人脸检测,然后给它设置一下字体的大小,比如说我们就设置一个呃,十四,对吧?然后呢再设置一下它的这个 字体的大小粗细,比如说粗一点啊,他这个标题的字体啊,粗一点。 ok。 画布呢,我们已经创建好了,接下来呢 我们就是要把整个结果给他显示出来,怎么显示呢?直接调用这个修 image 方法就可以了,我们传进去一个结果的照片,传进去一个标题,那么他就帮我们把 整个检测的结果给他显示出来了,所以我们这里直接调用他的方法就可以了,比如说修,对吧? amg, 然后呢我们把这个结果给他传进去,就把 这个结果啊,我们这个绘制好的,绘制好软点矩形的结果给他传进去,然后给他加一个标题,我们就加一个叫做 face detection 就可以了, ok, 然后呢我们把整个画布显示一下, p o t show 就可以。 ok, 那么现那么我们现在把整个流程全部通过代码呢进行了实现啊,哎,这好像有问题,我们少了一个括号,不要写错,不然他会报错, 然后其他的我们全部都写好了。那接下来呢,我们就运行一下,看看他能不能得到正确的一个效果或一个一个结果, 我们让一下看看会不会报错,哎,显示出来了,对吧?我们代码没有问题,我们代码编写没有问题,他就呢把这张图片呢进行了一个人脸的一个检测, 他发现有三个人脸,所以呢他全部给你画上了矩形框,对吧?全部画上了矩形框,然后这这个呢黑色字体啊,这个就是我们的这个超级标题,这个就是我们每一张图片显示的那个小标题,比如说我们的超级标题是不是,是不是这个,对吧?他就显示在这里,然后这个呢就是我们 图片上方的这个小标题,对吧?所以呢这个结,这个这个结果是我觉得没有问题,他的这个检测效果还是不错的,但是一定要注意,我们这个算法,他只能针对正脸进行检测,比如说你要是脸特别歪,特别侧,他就无法检测了,所以这个算法呢,他还是 比较低级的一个算法,比较低级的算法,那么以后呢,我们会讲到深度学习,通过深度学习来进行人脸的检测识别,那个准确率是非常非常高的,基本上能够达到百分之九十五以上, ok, 那么目前我们只是啊算是一个人脸检测的一个入门,入门算法, 这个是针对图片的一个检测效果。那接下来呢,我们就通过代码再实现一下,通过我们笔记本自带的摄像头来实现人脸的检测,这个啊也很好写。那么我还是 啊,那这个是因为我担心这个接下来视频比较长,我就先这这个图图片的人脸检测,我们就先到这里,那下一个视频呢,我就再给大家录制一下关于这个通过摄像头来进行人脸的识别。 好了。那这期视频呢,我们就先到这里,如果有任何疑问可以在视频下方啊给我留言。那么欢迎大家继续学习后续的课程,拜拜。