今天教大家使用 obc 实现 ai 换脸,首先准备一张学术服照片,再准备一张带换脸的照片, 最后再准备一张学校背景图像。下面来仔细讲讲如何实现。我们使用 opc 图像处理库和体力补机器学习库实现我们功能。体力补库是一个机器学习的开源库,包含了很多机器学习的很多算法,使用起来很方便。第一步,使用体力补获取人脸部的六十八个关键点, 对另外一张做同样的操作。第二步,进行三角破分,三角破分效果图第三步,眼膜叠加 第四步,前后背景叠加高吸率波 查找人体轮廓,获取人体眼膜眼膜区域,反向驱魔眼膜显示前景,眼膜显示背景。大功告成,代码已经全部开源,加我交流群获取。
粉丝91获赞863

你有没有遇到过这样的问题,明明手机像素不低,但是拍出效果却不尽人意,尤其是拍摄纸质类物品时,比如说书卷子。 如果被拍摄的物品只有黑白两种颜色,那么我们可以考虑使用二直化。这里我们使用派送加 omen c v 对图像进行处理,大致思路就是将图片转换为灰度图,然后进行二直化处理,最后简单调整下亮度。话不多说,请欣赏代码。 右边是原始图片,左边是我们处理过后的效果显而易见,我们放大后对比下,效果也是蛮不错的。怎么样,你学会了吗?

大家好,今天要讲的内容是识别并分析视频中人物的面部表情。 在本节课中,我们将详细地讨论如何使用 deep face 和 open cv 提供的 python 接口,对一段视频中的人物表情进行分析,提取人物面部的表情变化。 deeper face 是一个轻量级的面部识别和面部属性分析的框架,它基于 tensor flow 实现。 该框架整合了当前最先进的模型,如 v g g face、 google face net、 open face 等等技。 基于 deep face, 我们可以识别出伤心、愤怒、厌恶、害怕、开心、惊讶、中性等七种表情。 另外,实验显示,人类在面部识别任务上的准确率为九十七点五三,而 deep face 项目已经达到并超过了这个水平。 我们可以在 github 上找到 deep face 的开源代码,有兴趣的同学可以进一步深入研究其中的算法内容。后面我也会安排讲解这个开源项目。 open cv 全程 open south computer vision library 是一个开源的计算机视觉 机器学习软件库。在本节课中,我们主要使用 open cv 的 video capture 接口对视频进行读取、标记和保存结果。 首先使用 konda create 创建一个名为 emotion 的新 python 环境,其中 python 版本选择三点十, 创建后激活环境,输入 type 隐私到 deep face 安装 deep face, 其中 open cv 会随 deep face 一起安装 完成。安装后编写如下测试代码,首先导入 deep face 模块,接着调用 deep face analyze 接口识别图片。 test 点偏激中的表情,这里需要传入参数, actions 等于 motion。 最后打印结果, 运行结果是一个字典,其中包括了七种表情的强度数值,这里 happy 高兴的数值最大为九十九,其他表情强度都较小。从 test 点 png 中也可以看出,图片中的人物确实很高兴。 完成 deep face 的安装和测试后,编写视频分析程序。在程序中首先导入 open cv 和 deep face, 接着设置带分析视频的路径 v 六点 m p 四和分析视频的结果 emotion 点 m p 四, 使用 open cv 的 video capture 接口打开视频文件,返回 cap。 cap 用于从视频文件或摄像头中捕获视频针, 接着获取视频针的速率 f p s 视频针的宽度 from white 和视频针的高度 from height。 要用 video writer 定义视频编辑码器指定视频文件的编码格式,其中 x v i d 是一个流行的 m p g 四视频编辑码器要用 c v r 点 video writer 函数传入输出视频地址。 output v 领 four c 视频编辑码器和视频针的参数。后面通过返回的 alt 可以将处理后的视频针保存在输出文件中。 设置 frame, c, n t 表示当前正在处理第几针。 emotict 保存识别出的情绪结果,然后进入视频分析的循环, 在循环中使用 cap 点 read 读取当前的视频针,保存在 free。 如果返回 r e t 不是真,说明视频结束了。跳出循环,要用 deep face 点 analyze 对当前的真进行分析, 识别出当前视频真钟人物的表情。这里要注意,需要将 inforce detection 设置为 force, 也就是不强制识别出人脸,否则如果没有识别出人脸,会抛出异常。 接着获取结果中强度最高的情感,保存在 emotion 中面部区域的位置和宽高保存在 x, y, w 和 h 中。 freeman, c, n, t 加一记录已经计算的帧数, 接着打印该针日视频的第几针和这一针对应的表情结果。使用字典 emotict 记录每种表情的数量。最后要用 c v 二点 rectangle 将针 frame 中的面部区域 使用矩形进行框选,要用 c v 二点儿 put text 将表情结果标记在矩形框的旁边,要用 out 点 right 将标记好的真 frame 保存在输出视频中。 完成对视频的每一帧的识别后,打印表情统计结果的字典 in addict 运行程序可以看到视频会被一帧一帧的识别。 在这段视频中一共包含了二百三十四针,其中表现最多的表情是 happy, 高兴的有五十六针,占比二十三点九三。其他的比如 said, 悲伤的, surprise, 吃惊的, fear, 恐惧的, angry, 生气的等等 相应的结果。 那么到这里识别并分析视频人物的面部表情就讲完了,感谢大家的观看,我们下节课再会。

大家好,今天我们要用苏梅派, opponc b 和派森做人脸识别,我们需要的设备硬件有苏梅派四 b, 苏梅派摄像头模块,软件有 oppo cv 和派森。 人脸识别有三个步骤,一,人脸收集,二,训练识别器,三,人脸识别。首先我们我们需要创建文件夹,打开 vnc, 打开命令行,输入 macdel, 这接着我们可以随便取个变量名,嗯,文件名这里用的是这里,例子用的是 surgremes, 接着我们 cdelgemes 进入这个文件夹,再创建 max 这个 dna 同级的地方,接着我们进入该 top 点 com, 在输入框搜索框里面搜索 oppo c b 杠 face 刚 rap 那身,接着我这里 搜索,时间太长,我们先跳过,接着我们找到第一个,点击扣, 点击最下面的单位的 app, 下载压缩文件, 等他压缩,等他下载完之后先将他解压,之后打开发要 z 了,传输到我们刚刚设置的嗯,文件,对,对啊, green 里面, 接着找到找到下载的文件当中三个 p y 文件和一个 xml 文件,把它复制到跟对他下载的同级文件夹中。接着我们打开 vnc, 打开编程,编程中 中的托托尼派森 id e, 接着点击 logo, 找到我们刚传输的 surpry 们当中的 efe d 特色的 p y 文件,点击 yes, 我们再导入第二个 facechrana, 继续点击 yes, 接着我们再导入第三个,我们打开第一个文披外文件, 点击 rap, 输入一,这里,这里不用,不能输入零, 假如你发现你的脸是倒着,就按 ese 退出。 找到找到呃,这个这个文件当中的第三十一行,把负一改成一, 接着再次再次点击,让运行程序, 这样就 就输入人脸完成了。接着我们点击第二个拍摄文件进行训练, 训练完成了,我们点击第三个文拍摄文件,点击 rap, 当你发现脸是反的时候,你就你就找到这个拍摄文件中的第四十行,把负一还是改成一, 再点击乱,假如跳出了一个框,上面有有你的名字,这就 正确了。如果你想改名字,就到第二十八第二十五行的内容词当中修改名字,注意他是第二个,不是第一个,因为第一个他的位置是零。 接着你就发现你的名字修改了,这就是人脸识别的教程,谢谢大家。

现在这个器械臂和人脸他有一点稍微的延迟,因为我手机投屏投屏的原因啊,我们可以发现我脸移动到哪里,剁机云台就会相应的转动, 但是因为我这边手机投屏到屏幕上,所以说大家看到的画面可能会有一点延迟的。

哈喽,大家好,我是唐宇迪。太多演艺同学在思考啊,就是导师让我做这个视觉,我也想做跟图像处理相关的东西啊,但是我们该怎么去学?为大家举个例子啊,就是说咱们现在做这个图像处理啊,大家先不用犹豫,拍子还是 c, 我们肯定是先拿拍子去上手,假如说老师,以后我们实际工作当中,咱们部署得用 c 啊,但是大家想一想,我们对于初学者来说,咱们是不是先学起来,先用起来以后我们做出来不一定呢,那是不是学什么容易,学什么上手快,咱们用什么呀? 就是第一件事肯定是去拍子去做的,包括母后用深度学习,都是去拍子。所以说 c 扎吧,你暂时先不用去学。好多人跟我说啊, c 是拍子的基础啊,拍子不需要 c 的基础, 你直接上拍死非常快的一件事。第二个呢,我们先学什么?我建议大家咱们先拿 open cv 做点小例子,就是你不用做特别复杂的,做特别难的东 东西,把咱们欧美思维这些东西啊,简单的事,你去过一过图像的简单处理,什么轮廓提取啊,什么预制量等等,哎,你先把这些事过一过,数一数,记有一个基本印象时间来。我不建议大家看论文, 因为你对这个领域还比较陌生的,你直接看这论文必然是看不懂的,咱们手里啊,起码得先积累一些东西, 比如说你做这个视觉,做这个图像处理,你先做一个物体检测怎么样?比如说咱们最简单这个 ulo, 哎,你先把 ulo 基本思想去熟悉一遍,不要看论文啊,博客人很多解释,包括我视频里边很多解释,千万不要看论文,论文你可看不懂,先把咱们的一些通俗解释去过一过,哎,了解这个方法的一个思想, 咱不用说,第一晚就把全部的知识点掌握,咱们起码先上手,我们能跑出来一个结果啊,有一个呆默出来,有呆默出来之后呢?接来,哎,有说你有时间啊,你再去抵 bug 一遍, 看一看人群网当中啊,是数据怎么处理的,网络就怎么搭建的,模型怎么设计的,你把这些处理完之后,相当于呢,这你才迈出了第一步,才完成了一些基本工作。 所以说建议大家就是我们快速过过 pass, 熟悉熟悉欧本 cv, 跑一个车头,运用模型出来,接下来你再做自己其他任务,这样呢,咱们有循序渐进的过程,能让你在先了解这个领域基础上 再做其他任务,可能就没那么难了,起码咱们心里有个概念,有印象了,是不是?

我是陶美,今天继续我们 open cv 学习,那今天啊,我们主要来讲一个案例,也就是人脸识别,那今天的人脸识别呢?我们主要是基于这个 face 的肯定神来实现的啊,它的原理呢也是非常简单,我们先看一下它的这个效果是怎样的 啊?我呢下载了三张这个图片,分别是三个不同的人物啊,经过我们这个人脸识别系统的时候,他前两个呢都能够正常的识别,那么最后一个呢?他发现啊, 哎,这个人我不认识,就啊 no, 不认识,为什么他不认识呢?因为我们这个数据啊,他没有这个人,所以呢当他检测到一个新的人脸的时候, 他就会给你显示, oh, no, 就是我不认识。如果这个数据库里面他有,比如说有这个刘德华这个图片,他识别到之后他就会,他就会告诉你刘德, ok, 那这个就是我们今天要实现的一个小的人脸识别的一个小的案例。那我们再继续看一下今天啊我们要 用到的哪些方法,因为我们是用这个 face recognition 这个酷来实现它里面呢,首先是有这样一个方法叫 face distance, 这个主要是用来计算两个人脸之间的这个距离,这个距离,因为我们在之前的上一节视频当中也讲过,我们会把人脸的关键点进行一个编码,也就是编编,编码成一百二十八为, 他会计算这两个,一百二十八为这个项链他们之间的一个距离,来判断是否为统一个人。 ok, 那么第二个方法叫做 face locations, 这个方法呢,它主要是用来查找一张图片当中有几张人脸,没事,你给了他一张图片, 里面有三张人脸,他,那么最后他会,他会给你返回什么呢?返回一个列表,这个列表里面有三个数组,每个数组呢都是这个人脸的一个位置,也就是 location 啊。第三个方法叫做 landmarks, landmarks 呢,主要是检索人脸的一个关键点,因为我们在前几页视频当中讲过人脸的关键点呢,他我们目前学到的有六十八个关键点和五个关键点, 一般来说呢,我们会用六十八个关键点,因为他更能够刻画出一个人的一个脸部的一个一个形状, ok。 然后第四一个方法叫做 face includings, 这个方法主要是进行编码的,就是说我把你这个上面找到的这个关键点呢,编码乘一个一百二十八位,我们就是通过这个方法来实现的。那最后一个方法是叫做 这个方法,其实呢他主要是用来比较的,这是我比较你给我的这两个人脸,他们是否是同一个人,如果是,我就给你返回一个 q, 如果不是,我就给你返回一个 force, ok, 然后这边这个叫 tolerance。 零点六,什么意思啊? 我在比较的时候呢,我会设定一个预值,就说如果你小于零点六,那我就说你们两个人这个相似度比比较比较可靠,如果我计算出来这个结果大于零点六,那我就说你们两个人完全是不是同一个人, 他这个就是一个计算的一个过程。那这里啊,我给大家提供了一个 api 的一个文档,叫 face recony 一声的 api 的文档啊,各位朋友可以去看一下,我在这里,这里呢也可以,待会当我们写完整个代码之后,我也会呢,带着大家去看一下它底层 api 的一个实现。 ok, 那接下来 那我们就是开始我们今天的这个项目,首先啊我们还需要打开我们这个拍券,也就是集成开发工具,然后呢打开,打,然后呢打开我们这个啊,项目工程 face reconnation, 对吧?那在这里呢,我们要重新命名一个,呃,拍成 package, 一个一个包,比如说我们今天是人脸识别,对吧? face recognition, 然后呢我们用的是 face recognition, 我们就用这个叫 f r g 吧,对吧? face f r g 来表示,呃,就这样, 然后回车,在这里呢我们要新建一个文件,也就拍摄文件用,主要用来实现我们这个功能的,也就人脸识别这个功能。在这里呢,我们就说 face 吧, f r f s 这样写,行,可以随便写 face r g 啊,回车,然后接下来因为我们要实现 这个人脸识别吗?那我里面是不是要有一些数据啊?这个数据就是用来对比的吗?那我在这里呢,我要放两张图片进去,在这里我先 review, 找到这个文件夹,然后呢双击打开它,在这里啊,我要放放进去两张图片, 这个呢是我刚才从网上下载了两张图片,一个呢是郭富城的这个图片一,一张呢是刘德华的这个图片 啊,一共是两张图片,因为我们毕竟是一个小的案例吗?主要是给大家看一下效果到底是怎么实现的。 ok, 我们现在呢在这个小的这个项目里面,项目里面放了两张图片了, 第一章,第二章,对吧?那接下来我们就来开始写代码实现这个功能,我们稍微捋一下,你怎么去实现这样一个人脸识别呢?那是不是跟过去一样? 我们是不是要加载库?我们这边写一下你要加载库这第一步吧,那第二步你要干嘛?那你是不是,呃,要加载我们的图片,因为我这边提供了两个素材,对吧?我们待会要先我们第一步呢,我们肯定要去。 呃,实现就说把他们的人脸给他找出来,同时给他这个人脸呢进行一个 encoling, 也就是给他进行一个编码,包括他的关键点我们都要找出来,然后呢进行一个编码,那这个图片也是一样的,首先我们要在这张图片当中找出这个人脸在哪里, 然后呢给他这个绘制或说找到他的关键点,也就是他脸部的六十八个关键点,我们全部给他找到。最后呢我们给他进一个编码。呃,流程是这样的,我们这边首先是加载图片吧,或者加载素材都可以。然后这第二步,那第三步我们要干嘛?因为我们这个 open cv 呢, 他默认的这个通道是 b g 二,我们这边必须要给他转换成 r g b, ok, b g 二,我们要进行一下转换,转换成什么呢?转 转啊? rgb, 对吧?这第三步我们要转换一下图片的一个通道格式或顺序。那第四步我们要干嘛?我们这边这样写也行, 就说因为我们这边加载图片之后嘛,这第三步是这样的。第四步,我们是不是要去对这个加载的图片进行一个人脸检测,就像我们刚才讲的,你要给我检测人脸,对不对?所以第四步呢?就是检测 人脸, ok, 第四步,那第五步我们要干嘛呢?人脸检测到了,那我是不是要进行一个编码了,对吧?就说我要给这些人脸给他进行一个编码,就一百二十八位的一个编码,那我这里可以这样写,比如说人脸特 编码,对吧?我可以这样写吧。那么第六步干嘛呢?就说我们编码之后,我是不是要把这两张数图片当做一个数据库啊?当做一个数据库,为什么呢?因为我待会通过我的这个摄像头打开之后呢,我会和我的这个数据来进行比较对比,就说 我检测检测到的这个人脸,他是不是我这个数据库里面存放的这两张人脸?如果不是我就给你说一个叫做啊? no, 我不认识你, 如果是的话,那我就给你说说,他对应的这个名字就是刘德华,这个名字就是郭富城,对吧?就这里呢?第六步,也就是说我要把它放在一起组合成一个数据库,把 所有人脸放在一起当做数据库使用,对吧?这个数据库的作用啊,就是说当我通过 摄像头来识别人脸的时候,我要和这个数据会里面所有的人去比较,一一比较。如果我发现有一个非常相似这两招人脸,那我就判断这是同一个人,我再给你说出一个名称,比如说刘德华,对吧?就这么简单。那第七步要干嘛呢?我们是不是要打开我们的摄像头了?所以我们这边可以这样写,打开摄像头,要打开摄像头了, 读取视频流,对吧?你说打开摄像头读取视频流, ok, 这第七步,那第八步我们干嘛呢?那我们是不是把我们摄像头读取到的每一针,也就每一张图片 转换成一个啊?这个 rgb 格式啊,所以我们这边还是要再做一个转换, b g 二,对吧?转 rgb, 对吧?这第八步,那么第九步我们要干嘛呢?那么是不是我们也要对这个摄像头啊,这个读取到的每一张图片进行一个人脸的 检测,对吧?我们摄像头开就一直打开着,那么他会读取到每一针,我就对每一针进行一个人脸的一个检测,所以我这边呢,肯定是还是跟上面一样进行一个人脸检测, 这第九步,那么第十步我们要干嘛呢?那是不是还是和这里一样,我们要进行一个人脸的一个特征编码,对吧?这我们这边还是一样的,人脸 特征编码是第十步。那第十一步呢?那我们这边进行人脸特征编码之后,那首先啊,你看一下我们这边数据库是不是已经准备好了,然后这里呢,我们又发现了一个新的人脸,也给他进行了编码,那是不是我要进行比较了?我要把这个新的特征编码和语言,这个原来的这个, 这个数据库数据里面的所有的这个特征,这个人脸特征进行一个比较,如果发现相似或相等,我就 判断是同一个人。所以这里呢,肯定是说与数据库中的所有人脸 进行什么进行匹匹配吧,对吧?我我要和他进行一个匹配吧,那第十二步是什么呢?第十二步就是说我在匹配的时候, 我是不是要通过一个循环,因为我这个人脸啊?因为我这边才两张图片,对吧?非常少,这是才两张。那如果我这个数据会有一百万张图片,那你这里是不是还是要通过一个循环去一个一个的去匹配?所以我们这边肯定会写一个循环的。那么之后呢?我们会进行一个匹配, 比如说我这边进行开始进行匹配了,对吧?进行匹配,然后呢?第十三步,干嘛?那我这边进行匹配的时候,你怎么去匹配呢?我是不是要计算你两张图片这个编码的距离啊?刚才 我们就一直在讲,就说我们把所有图片进行一个人脸特征编码之后,他们也就说有各自的一个特征了,那怎么去来判断他们是否相似为同一个人呢?那我这里肯定是要去计算他们之间的一个距离, 这个计算距离啊,我在上一节视频当当中讲过,讲过了那个通过欧式距离去进行一个比较,如果这一块不太了解啊,可以看一下上一期的一个视频计算距离,对吧?对,第十三步。那么计算距离之后, 接下来我们要干嘛?我们是不是要做一个判断?就是说我要判断你这个距离到底是近还是远?如果发现很近,也就是说你匹配了,那我就给你说出一个名字吗?如果我发现你们两个人之间的距离很远,那我就说你们不是同一个人,对吧?所以我这边肯定是要做一个判断的,对吧?肯定会做一个判断, 如果匹配,那么就输出或者获取这个名称吧,对吧?名字,因为我每张图片都对应了名字的,我待会会给他复一个名字,比如说郭富城、刘德华,对吧?我都会给他复一个名字的, ok, 那继续, 这是第十四,那第十五干嘛呢?第十五,我们是不是当我们如果匹配之后了获取到名字了,我们是不是要在这张图片上画出一个矩形框,对吧?把它一个矩形框画出来, 就把他这个人脸给他框住,是不是?那同时呢,我们要在这个他这个下方,这边我会画一个长方形, 显示这个人的名称,就显示在这个矩形框的下方,所以我这边肯定是显示吧,对吧?所以显示呢,肯定是说绘制人脸的矩形框,对吧?绘制 人年举行框,这第十五步,那第十六步干嘛呢?那你是不是也要写上他对应的一个名称,对吧?绘制或说啊,显示吧,对应 人脸的名字,对吧?这你肯定要显示吗?不然你只是把一个人脸框给他框出来了,你下面也没写名字,这肯定,这肯定是不行的。那第十八部是干嘛呢?那最后是不是我们要把整个图片给他显示出来,整个效果给他显示出来,对吧?显示整个效果, 对吧?就这么简单。然后最后呢,我们说要关闭啊,关闭所有所有的资源,关闭所有资源,我们要释放所有资源,对吧?这第十八步,一共就十八步。先我这边呢把一些很小的一些这种操作也给他进行了细化。像我们在写代码的时候啊,你就像那个建房 房子呀,就一块砖一块砖的往里面去垒就可以了,这样呢也比较清晰,我们就接下来呢,就写一下代码吧。首先我们是加入库,一步一步来,是不是你要导入库啊? input, 对吧? input 什么库?是不是 cv 库?还要导入什么库?是不是导入我们的 nan pie, 对吧?我们这个也会用到的, 还需要导入我们很重要的一个库,叫 face recognition, 这个库你必须给我导入进来,因为我们要调用它的方法,刚才 ppt 里面我们着重强调了这几个方法,我们待会儿都会用到。 ok, 我们接下来呢,我们首先是加载图片,比如说我这边留吧,对吧?就是刘德华对应的图片吧, i am ready 的 读取这个图片,这叫刘,对吧?然后呢,我还有读取谁的?这个是郭富城的,对吧?我这边读取郭富城的图片,这边郭, 对吧?点接 bg, ok, 然后呢,这个图片我读取之后,我是不是第三步进行一个 bg 二转二 gb 啊?因为欧本思维默认是 bg 二 bg 二的这种格式或顺序,所以我这边还需要给他做一个通道的一个转换,很简单, 直接是这样,前面的高和宽不变,把后面的通道就颠,呃,颠倒一下顺序就可以了啊,颠倒顺序直接用这种这种写法就可以了,前面两个不变啊,一个负一嘛,这个就是我们列表的一种用法,对吧?所以我们这边一个,然后接下来是国嘛,郭富城的郭, 然后是通道给他做一个颠倒,这样就可以了。 ok, 这样的我们就把 b g 二转换成了 rgb, 那接下来一步呢?是不是我们要检测人脸了,对吧?我们这个图片你你输给了他,他也不知道人脸 在哪里,所以我需要对他进行一个人脸的检测,看看人脸到底在什么方位。所以我这边呢,肯定是有个叫给他一个变量叫六流 face, 对吧?通过我们的 face recognition 调用里面这个方法,通过 face, 然后呢他会提示你的叫 locations, 这个方法呢,主要是用来检测人脸在哪里的,你看他里面,他这里就提示你输入哪些参数了,对吧?他默认用的是 hog 这个算法来进行一个人脸的检测,当然 他还有一个,呃,还有个还有一种选择,就是用 cnn, 也就是通过我们的神经网络卷机神经网络来进行一个人脸检测。他为什么默认用耗子呢? 因为号码它的速度比较快一点,虽然它的精度不高,但是它速度比较快,如果你把这里的默认改成了 cnn, 它的速度就比较慢,速度比较慢啊,如果你的机器啊,你的电脑的性能比较 包,我建议你算用成 c n n, 他的这个精度比较高,我们这边呢就全部选择默认的了啊,这样速度就比较快一点。然后我们这边首先把这个图片你要给他扔进去,对吧? 我们的图片是不是我这边这样写一下,因为我们转换成 rgb 了吗?所以我这边给他做一个标记, rgb, 对吧? 我们就把这个留的这张转换后的 rgb 图片给他扔进去,这样呢,他就能够自动去检测这个人脸了。看看你这个图片里面有几张人脸,他都他都会给你检测出来,最后给你返回他的位置。 ok, 接下来呢,我们就检测一下郭富城的人脸郭, 然后呢 face, 然后再用,再调用这个方法 locations 就可以了,然后是锅而击毙,这样呢,他就会把图片里面所有人脸,这个图片里面所有人脸都会检测出来,这个也会检测出来。人脸检测出来之后, 我们是不是要对他进行一个啊特征的编码了,也就是编码成一个一百二十八位的特征项链,所以我们这边呢,还是调用这个叫 reconnesse 方法,然后调一个叫 face including 这个方法 includings, 他就会给你去做一个编码的一个工作。首先呢,你要把他图片放进来,留 rgb, 对吧?同时呢,你还需要把刚才检测到的人脸的数据给他放进来。为什么?因为你这个留 face, 我们现在这个图片他只有一个人脸在里面,那如果我们这个图片里面有很多张人脸,那你这边 得到的这个留 face 是不是它是一个数组里面有多张人脸的一个坐标,所以你这边呢要把它给它传进来,因为我们现在看到的它这个是一张人脸,但是呢,如果这图片里有多张人脸,多张人脸怎么办呢?所以你这个肯定要传进来,对吧?它这个留 face 可能是一张 人脸,有可能是有多个人脸在里面,然后呢,这样他就可以进行一个人脸的编码,对每一个人脸他都会进行一个一百二十八位的一个特征的一个一个编码。 ok, 那接下来呢,我们看一下锅 那说,呃,锅的一个 recognition re 锅,哎, sorry, 应该是 face reconnession, 我们对他已经一个编码,然后把锅的这个图片先给他传进来 说 rgb 的图片,然后把锅刚才在图片上检测到的这个人脸给他传进来,对吧?没有问题吧?然后给他复 把它,首先啊,付给一个变量,为什么呢?因为我这个减编码之后啊,他会,他会得到什么呢?他会得到很多张人脸的编码,所以我这边一定要给他复制一个变量的,比如说留,对吧? including, 当然我可以加 including, 因为我们我,我们现在知道他这个图片上就一张人脸,所以我这里呢,我就这样去命名了,但这样命名其实不太好,因为你这个刘嘛,刘德华,你这个太,对吧,你就已经知道结果了嘛。但是我们今天主要是演示嘛,我们就先这样写, ok, 然后呢,这这样呢,我们就拿到了每张图片上每个人脸的一个编码,我们全部就拿到了, ok, 那接下来我们就把他们放在一起啊,当做一个数据库去使用,怎么放呢?啊?太简单了。首先是我们,比如说我这边这样写,叫做 incoling spa, 因为是所有的嘛,我都放在一起了,比如第一个是留的 incoling 放,放里面, 然后锅的 encoding 放里面,就是这样就可以放在一起了。然后呢,我要给他们一个命名,就 names 把,就给这两张图片进行命名,因为我们一旦进行人脸识别,我要给他显示个名 称的,所以我这边呢,比如说刘德华,对吧?郭,你要用字符串,郭富城,对吧?这样就可以了,两两张图片,然后呢两个人,两个人点吧,两个人我就给他两个名称,如果你这里有很多姓名的话,你这边可以再放很多姓名都可以, 这个这样呢,我们就组合成了一个,一个数据库,一个数据库,这个是编码,这个是名称。接下来呢,我们就打开摄像头,你看我们这个每一步是非常清晰的,我建议各位朋友写代码呢,也可以这样去写,你先用中文去描述,然后你再写代码,就像那个 啊,建房子一样,你先把骨架搭起来,然后再往里面填这个砖头。然后首先呢,我们打开我们的摄像头,是不是因为我们的 cv, 然后是 v 六 capture, 对吧? ok, 打开摄像头,然后呢,我们 是不是你要判断一下我们这个摄像头他是否正常的打开了,如果没有,那我就要报错,我就要给你一个错误, io arrow 这个错误,比如说 camera row arrow, 对吧?我就会告诉你摄像头错了,你的摄像头设备有问题。 ok, 这样就可以了。那接下来呢,我们是不是要通过一个外循环去不断的读取我们这个摄像头啊?直播间,所以我这里用一个外循环, 然后这边写法很固定啊,然后是 cap, 然后 read, 对吧?这样我就能够读取到每一针了吧,也就是每一张图片这个 frame, 也就是每一张图片 读取号。读取到之后,我是不是要和上面一样进行一个呃, rgb 到 b 教的一个转换,所以我这里呢,直接给他进行一个转换,怎么转啊?是不是跟刚才的一模一样?今天是 frem 吧, fram, 对吧?然后呢?哎,然后是,呃, frem, rgb 吧,还是跟上面写法一模一样吧,这样我们就知道这个 frem 是不是已经转换,转换之后的了, 我们这边还是一样高和宽不变,把它的通道顺序变一下就可以了,这样我们就把它通道给转换好了。那接下来我们是不是和上面一样进行一个人脸检测了吧?就第九步进行人脸的检测, 检测是不是用这个方法,这个 location 一样吧,对吧?所以我们这边还是用这个 location 来进行一个人脸的检测,是不是 fast recognition, 然后呢 location 看一下啊,是 face locations, 这样呢他就会检测你这个图片上的人脸到底有几张人脸在上面。 friend rgb, 然后给他啊,把这个 返回的结果呢复制给一个变量,比如我这边就叫做 faces locations, 据说可能他有好几张人脸的一个图片,这个好几张人脸的这个数据啊,我都给他赋予了这个变量,对吧? 那接下来我们要干嘛?那么我这个人也检测到了,我是不是要给他进行一个编码,跟上面这个步骤是一模一样的,我要对他进行编码,怎么编码?是不是用这个 face recognition 里面有个叫 face includings 啊? 他这个方法都给你写好了,待会我们会看一下他底层的实线是怎样实现的。这里呢,首先我们需要把这个 fram rgb, 你要给他这个原始图片给他,然后呢你还要把这个刚刚找到的这个啊, face faces, faces locations, 刚刚给我们找到的所有的人脸的数据,你要给他,我们给他往里面一放就可以了。最后呢,他会给 给我们返回一个数组,就是一个一个列表,这个列表里面是所有人脸特征的一个编码,所有人脸的一个人脸特征的一个编码,下面这里呢也给他一个命名叫 faces, 对吧? accordance, 这样就可以了,我们就拿到了他的所有的这个人脸特征的一个编码了,全部拿到了,那么接下来是是做什么呢?你是不是要 与我们的这个数据库啊进行一个对比了,就说我通过摄像头识别到的检索到的人脸,我要和我们这边的数据库里面进行对比, 看看到底是不是刘德华还是郭富城,还是说你是其他人,对吧?我这边呢就要进行一个对比,对比你肯定要用一个负负循环嘛,因为我们数据库里面有可能有很多人,我们现在才两个人, 那你如果有一百万一一百万张图片怎么办呢?所以我们这边要用一个负循环做一个对比,对吧?这个对比呢,我们可以这样写,比如说,嗯,我能, 我可以把这个 locations 和 including 可以把它们放在一起,我们可以这样写啊,首先是啊,我先写,写完之后我再跟你讲,为什么我这么写 top, 然后是什么是 right, 然后是 bottom, 然后是什么是 left, 然后呢,这边是一个 locations, 一个 face including, 我先这样写,你还不知道我为什么这么写,对吧?啊? in zip, 然后是我们的 face is locations, 然后是 face is includings, okay, 这样就可以了,我为什么这么写啊?首先我用这个 z 盘数,就是将我的这个刚刚检测到的人脸数据和这个 includings 每个人脸对应的这个 includings 放在一起。这个 zip 函数呢,就是一个粘合函数,把他们组合起 起来,组合在一起,然后我通过一个,通过一个负循环呢,不断的去读取他们里面的每一对数据,我通过一个负循环都是不是在读取啊?那么这个 location 我刚才讲过了,他返回的是什么?返回的是坐标,对不对?就是你的,你的,你,你的这个四个坐标,所以这边呢,给他返回了 top, right, bottom, left 四个点的坐标,我都给他,我都全部给他拿到了, ok, 全部给他拿到了,然后这个 face including 呢?其实就是我们拿到的这个里面每一张人脸的一个特征编码,一一个一百二十八位的一个特征编码, ok, 这个就是负循环的一个作用,就是循通过循环拿到他们相对应的坐标和编码,就这么简单。那接下来我们要干嘛?是不是你拿到了这个编码之后,我需要进行一个匹配啦,对吧?我需要进行匹配,匹配怎么匹配呢? 很简单,我这里,哎,我把这个这个备注放到里面去,接下来就是进行一个匹配,匹配啊,我们也是有一个方法的,叫做 face 啊, recognition, 对吧?然后呢? face 里面有个叫做,看一下啊,叫做 compare, compare faces, 就我们可以用通过这个方法来进行一个比较,或者说通过一个 啊,通过这个方法来进行匹配。它里面你看你要传进去两个编码,一个是已知数,已知的人脸的编码,你要给我传进来,说白了就我们这个数据库吧,刚刚准备的还有一个呢,就是你摄像头检测到的这个 人脸的一个编码,这两个编码你要给我传过来,然后这个是一个默认值,也就是零点零点六一个预值,你不用管他,这个你不用管他,我们找一下刚才这个数据库的编码,叫做 mcolins, 这个你给他拷贝过来,然后呢,我们 通过循环读取到的每一个人脸的编码,你要给我考过来,这啥意思啊?就是说我把我检测的这个第一个人脸和我已知数据库里面所有的人脸进行对比,我看看你们两个人之间是否相似,我会计算出一个,就就是进行匹配嘛, 我会判断你们之间是否相似,会得到一个距离,你这边肯定会给我返回一个距离的,这个就是进行一个距离的一个计算。 ok, 那么,呃,我拿到啊,这边应该是一个匹配, sorry, 不是距离,距离是在下面计算,我们这边应该是因为这边是一个距离,对吧?我们在第十三步,我们会进行距离计算, 这边呢,你会拿这个匹配,他会进行判断,比如说这两个人是否相似,如果相似我就给你一个 choo, 不相似我,我就给你一个 force, 所以这边是一个匹配,叫 matchs, m, a, d, c, h。 我们这样写啊,然后接下来我们才是计算距离, 计算距离也很简单,通过我们的 face, 那肯定是里面有个叫做啊,看一下在哪里叫做 face distance, 对吧?通过这个,通过这个方法,它是计算距离的,而这个是用来进行比较的,所以我们这里呢,可以进行一个距距离的计算,也很简单,直接是 in call things, 然后呢 face including, 这样就可以了,这样就可以了,我们现在呢就可以通过这个方法来计算他们的距离,最后我们就拿到了这个距离,比如说叫做 distance is, 我们现在就拿到了啊,这个人脸和数数据库里面所有人脸进行这个计算之后的这个距离,所以这边呢也是一个列表,他有很多距离的,对吧?因为我这个数据库我现在才两张人脸,如果我有很多张人脸,那么他这个 返回的结果呢?就是有很多很多的这个数据,也就是距离嘛在里面这是一个列表, ok, 那这个距离我们就计算好了,那接下来我们要干嘛?我们是不是要做一个判断,就说我们也就是第十四步,我们要做一个判断, 就说如果匹配我们就获取到他的名字,这个判断怎么判断呢?也很简单,直接是用我们的这个易腐语句,易腐语句我这里啊,我要先将用个内内幕来做一个,就说如果我们这摄像头读取到的这个人脸 不在数据户当中,我就给你返回一个叫 oh no, 我不认识这个人,结果这边呢先给他定一个啊,这个字串的一个一个变调名,就是叫 name oh no。 然后接下来我会做一个匹配,用一个一辅一句来判断,比如说我会说 f matches, 这个里面呢,我会用的就是我们这个叫做呃 呃,距离,那么你在这里写呢?为什么我要用距离啊?其实我们你看我这个图片和数据库里面所有的人呢,做了一个距离的计算,对吧?那么这里呢,其实我会拿到一个,我想拿到一个最小的,什么意思啊?比如说 我摄像头检测到一个人脸了,对吧?我和这里的两张人脸作为一个对比,他最后给我出出来的数据,比如说和他比较相似,那么和他比如说不相似,那么他的距离就比较短,就比较小, 那么这个纸呢?和他的距离就比较大,对不对?那我就想拿到这个最小的一个距离,就说最相似的那个距离,那么这里呢?我就可以这样写,可是我想拿到一个最相似的距离或最小的距离,他又叫 mp, 里面有个叫二哥,对吧?好,二哥 mix, 二哥 mi, 对吧?拿到一个最小距 距离,通过这个方法呢,这个呢?派这个方法呢?他就可以拿到一堆数据当中所有距离当中一个最小的,说白了我就挑那个和我最相似的那个人脸的一个距离,这样我就拿到了,对吧?拿到之后我这里就可以做判断了,我会把这个最相似的距离拿过来。这个匹配,哎, 你是否和我是就你我拿到的这个人呢?或这个距离是否在我这个数据库里面存在?如果存在呢?我就说,哎,匹配上了,如果不存在,那我就说没有匹配上,结果这边呢?可以这样写, 对吧?就说如果他能够匹配上,能够匹配上,那你就去我这个数据库里面嘛,在这里在这个内幕词里面找对应的名称就可以了,对应的名字,对吧?就这里呢?如果你匹配上了,我就这边给你返回相对应的名称。 ak, ak, 其实这个这个二嘎,他的结果呢?他不是一长串的什么什么距离,那个很小,数点特别长,不是他返回的,可能就是一些什么零,对吧?什么一二正下标,就这个返回的他不是具体的数值,而是他对应的下标 啊,所以这个我这边如果这样写,各位不太明白,我就可以这样写, index 就下标的意思吗?我可以这样写,这样呢,可能大家理解起来就比较简单一点,就是 他最后返回的是一些下标,你知道吧?所以我通过这个 max 呢,就可以去找他那个对应的下标,对吧?去找他那个下标,如果他在我们这个呃赢这个数据库里面,那我就给我就说你已经匹配匹配上了,所以呢,我就可以把你这个下标拿过来,去 找他对应的这个 name, ok, 就是在这个 names 里面去找对应的这个 names, 可以,最好可以这样写,因为如果我不嫌 index 呢?很多朋友可能以为就是,哎,你这个距离那么长的数字,对吧?怎么匹配的?其实它返回的是一些下标, ok, 这样我们就能够匹配上了。 那接下来呢,匹配上之后我们要干嘛?我们是不是你要绘制这个人脸的矩形框了,对吧?我把这个备注拿拿过来, 然后绘制。人家举行过,怎么绘制啊?是不是用我们的 rectangle, 对吧? record tango, 首先是我们的 fram, 对吧?然后呢是不是你要坐标给他一个坐标?一共是两个坐标吧,对吧?我们这样先写一下, 然后呢我会这样写边框,举行的边框给他一个颜色粗细,对吧?里面的坐标,第一个坐标就是第一个点的坐标嘛?这个点的坐标很好写哦。首先是一个类 吗?然后呢是一个套,对吧?这个我们在前面的几期视频当中也给大家讲过,我这里就不再重复了。为什么这么去写?因为你一个矩形啊,你一张一拖,对吧?他这里有一个点,然后呢?然后他对角线也有一个点,这样我们就能画出一个矩形, 画出个矩形框,所以这个就是第一个点的一个坐标,那这个呢?就是一个对角线的一个坐标。 ok, 这样我们就能够把一个矩形框给他画出来, ok, 举行框我们已经画出来,那接下来你是不是还要把下面就那个,我要,因为我要显示对应的一个名字嘛,所以那个我也要画一个小的举行框,对不对?因为我要在这个举行框下面显示名称,结果呢?还想再画一个小的举行框, 那怎么画?是不是还是用 rectangle 来画,对吧? recotangle, 然后呢?是 frame, 然后这里的坐标呢?一定要注意这里的坐标,我先不写坐标,然后呢, 我先这样,不然大家可能容易弄混,然后这里还是有一个有零点二五五, 然后呢?有时候宽度还是三八,比如说,因为,呃,我还是给各位看一下 ppt 照,一定要看一下的,不然不容易了解。你看我上面一个这种绿色的一个框,把人家框住了,对吧?然后在下面,下面也就说我想显示人的一个名字在这里,对吧?那你这边是不是 往下就是,呃,他的的第一个点,就是这这个点的坐标和他的横横坐标,呃,和他的这个横坐标是相似的,重坐标是,对吧?呃,重坐标是相似的,横坐标是不同横坐。呃,看一下,哦, 横坐标相同,重坐标是不同的,对吧?第一个点就这个点,他的横坐标是相同,重坐标是不同,对吧?因为重坐标低, 是在这边是零零吗?那你这边的动作标肯定不是零零了,对吧?那这里呢,也是一样的,这里和他的众坐标,众坐标是一致的,但红坐标又不同,所以我们这边可以这样去计算,这个就主要是一个计算的一个 计算的一个过程,比如我们这边可以说他的横坐标相同,对吧?第一个点的横坐标相同,动作标不同,那我就这样写吧, ot 点三十,比如说,因为我是显示在各位朋友,再看一下,我是显示在他下方,对不对?下方,所以呢,我用这个 bottom, 其实这边不用减加也行,我用加吧啊,当然我们待会可以看一下效果, 加一下就行了,因为剪的话这个效果感觉有点丑。然后这边呢,继续一个 right, 这样 bottom, 我们具体待会会看一下效果,来调整他这个坐标的一个位置,我们可以调整的,因为 这边呢,我也是感觉应该是这样的,我们待会可以试一下。啊,这样呢,我们就把这个名称的矩形框给他绘绘制出来。名字的矩形框绘制出来了,那接下来我们要干嘛?你是不是要在这个矩形框里面写上他的名字呀?对吧?所以我们这边可以这样写, 显示啊,啊,显示吧名字,我们把这个改成时期显示名字, ok, 然后呢,我们实现一下,怎么显示啊?是不是我们 cv 库里面叫做 put text 这个功能,对不对?然后呢,是我们的 fram 这个图片,原始图片,然后是我们的要显示的名字,这个名字呢,我在这里已经给大家注视了, 如果他不认识就显示,哦, no, 不认识,如果认识他就会去这个 name 里面根据下标去检索 检索,如果是第一个就是刘德华,第二就郭富城,他会一一对应的去检索,然后这边呢就会显示,然后呢给他一个坐标,比如说这样写吧, let 也是左边的,对吧?这我给大家加个十吧, 这个比较好理解。坐标,这个比较好写,这个显示你只需要,呃,加三十吧,加三十,对,然后呢这个跟这个和上面的要一致,就这个这两我们先一致的看一下,加三十,然后呢我们这个 bottom 减三十,我们这样试一下,然后看一下效果,然后我们的字体,字体是不是之前讲过啊?你不用去记,用这个 complex, 默认的 complex, 然后是一,然后呢是我们的啊,字体颜色,我们就这样写, ok, 然后呢字体的一个大小粗细, ok, 这样就可以了,这样就可以了,我们继续这样,我们就把字体给他写上去了,对吧?写上去之后我们是不是要看一下整体的一个显示效果啊?整体的显示效果,呃,这个很简单,直接是用我们的这个 c v m 秀就可以了, 比如说我们这边叫 face recognition, 对吧?然后呢把这个 flip 给它显示出来就可以了,这边应该是十八了,对吧?我们这边写一下,改成十八, 显示整体效果,这样就可以了,看有没有问题,哎,不对,那这个应该出来,不能在负循环里面,不然会爆错,这样就可以了。那接下来我们是不是要做一个判断,就说如果你这边按下了这个 esc 键,或者说 q 键, q 键,那么我就退出,如果你按下了这个 q 键,我就退出,只用一个 f 一句,然后呢用个 y k, 这个我们在之前讲了很多遍了,我就不去讲这个 功能了,他很固定你,如果你按下了 q 键,我就退出,整个这个循环也就关闭啊,就把整个程序都给他终止了。最后呢,我们会关闭所有的资源。二十 说关闭所有的资源,怎么关闭呢?是不是我们有个叫 cap, 对吧?哎,我看一下是不是在 这边有个叫 cup, 对吧? frake 应该是我们的 cup 点 release release, 然后呢? 然后是什么?是我们的 cv, destroy or windows, 没问题吧?我们会释放所有的资源,对吧?然后我们看一下有没有问题, 没问题,看一下。我担心这个坐标显示的时候可能会有点乱,因为这个坐标你需要算一下的他那个位置,不过影响不大。我们先看一下有没有问题,我们先运行一下,看一下效果。 哎,好像有问题哦好像有问题哦。在这里他说 list index out of range 超出了界限,在四十八号,在这里我们看一下是哪里的问题 啊?二个,对吧? indexes, 然后我们这边用了一个 f matches, 对吧?匹配,我们进一个匹配,然后呢,如果如果他匹配上了,我们就找到他对应这个 names, 对吧?看一下哪里的问题 哦,错呢?你看到他这里说超出了这个范围,其实啊,这里是没有问题的。错,是错在哪里呢?我们这边啊漏写了一个,一漏写了一步,就是在这里漏写了一个东西,在这里出错了, 就我们这边必须要加上他的一个坐标,不一个啊?这个零为什么呢?要提取一下呢?因为我们这边呢,你会发现我们这边是一个人脸,对吧?那么我刚才讲过了,如果这张图 边上有多张人脸的话,那么你这边他肯定就说你这个返回,如果我不写零的话,他返回的是一长串的这个这个 encoding, 就所有的编码,比如说三张人脸,那么他这边拿到的 就是三张人脸的一个特征变吧。那今那我们这边是一个数据库,我们知道他只有一张人脸,所以说我们就只只取第一个人脸的一个数据,所以我们这边必须要加上零, 这个他的作用就是说我们提取里面第一个人脸的一个特征编码,第一个人脸特征编码,我们比如我们这个图片他就一张人脸,对吧?那么我这边计算出来之后,你一定要把它提取一下,就加上这个零, 他就提取他的这个第一个特征编码,如果你这边不加上的话,他就会报错,而且报错呢还很奇怪,他还报错在这里,这里根本就没有超出他的界限和 范围,所以呢我们这个写代码呢,他有时候我们一旦一不小心啊这个就报错,而报错之后你会花很多时间去找这种小问题,这种小问题有时候你很难去一下子找到的,就是,所以我们这个一定要注意,一定要注意,那我们在运行下看看 有没有问题,如果有问题我们就再找问题,我们运行一下让一下, 哎,现在是没有问题,对吧?只是呢他有点卡, 他只是有点卡而已,我们先退出。 呃,有点卡,主要是第一个呢卡可能和我们这个算法有问题吧。还有一个呢, 就是我们这边这个视频,可能这个框窗,这个窗口太大了,我把这边稍微调小一点。怎么调?我在这里稍微调小一点,比如 friend, 对吧?然后点 recise, 我把它呃,把它 recise 一下就行了。应该是这样 re recise, 然后呢?我们的 frame, 然后原图我把它调小成一半吧,就把窗口缩小为一半,这样一半大小,这样会快一点。可能会,我们这样试一下,我们再运行一下,看一下 把窗口调小一点,这样可能会速度快一点,哎,这样就可以了,对吧?你看这样它的速度会比较快一点,只是我们这个字体它显示到上方去了,我们要把这个 这个这个位置要调一下,不然那个字体在上方,对吧?我们再推出再改一下字体,再改一下这个坐标,这个坐标我们这个坐标要改一下,我看一下他往上跑了,往上跑了,就字体在这里,他往上跑了,我们只要改这里就可以了。把这几个改一下。 怎么改呢?他这个应该是不对的,这个应该是因为他往上跑了,往上跑了,我们这边肯定要减十,减十,然后左边左边加十吧, 试一下看下效果怎么样就行了。然后这边不是加,应该是减往下跑,往上跑了,这样我们再再运行,看下效果是怎样的。我们再运行一下这个,这是一个坐标的调整,如果你发现这个坐标他跑的就是 有点偏了,你可以调整一下。哎,这样就这样就可以了,你把坐标调整之后啊,他这个大小这样就可以了,对吧? 你看他现在有时候识别,是啊, no, 无法识别,然后有时候又能识别出刘德华,对吧?把我识别错误了,对,他,因为为什么他会识别错?主要就是我们这边的 数据库的素材太少了,就两张图片,所以呢,他的特征是太有限了。那么接下来呢,我们有另一门课程,就是深度学习,也就轻松学这个拍 touch, 也就深度学习的一个框架。那这是我们新的一门课程。接下来呢,我会通过卷机神经网络来给大家讲一些这种人脸识别的一些项目,它的精度包括速度啊,比这个要快的多。我们这个是算法比较传统,用的是 他集成了一个算法,比较传统,然后呢也比较慢,当然也和我的机器有关,因为我是笔记本,所以他跑起来速度就比较慢,如果你的这个设备比较高级高配, 那可能速度就比较快点。好了,那今天我们这个任务呢,就就先讲到这里,应该刚才出现一个问题啊,主要就是我们这边 要把它提取,第一个我们这个没有提取,所以他就会报错,他会报错这种小问题,其实有时候你你很难发现的,要去找一下。 ok, 那今天任务呢,我们主要是这样的,已经实现好了,那这个代码,包括整个项目的代码我都会分享在我这个云盘里面, 各位朋友可以在视频下方去找一下这个链接啊,可以找到所有的这个项目,包括代码、 ppt、 k。 那我们再稍微看一下这几个方法吧,这是我们今天调用的几个方 方法,像 distance, locations and the marks, 关键点对吧? includings, 然后比较人脸。然后呢,这边有个 ipa 的文档,改进去的朋友呢,可以去看一下,去看一下他这个官方文档。 ok, 那今天我们任务呢,先到这里,如果啊,你有任何疑问呢,可以在视频下方给我留言,那么我将及时啊进行一个回复。那欢迎各位朋友呢,继续学习后续的课程,拜拜。