课程实录-质检系列之定制喷油器阀座质检模型
May的山楂木 发布于2020-05 浏览:3644 回复:2
1
收藏

主题:经典版物体检测模型训练及FZ9部署瑕疵检测模型

时间:2020年5月14日(线上)

讲师:广西科技大学物联网工程专业导师 李老师

           百度高级研发工程师 木木老师      

李老师:大家好,我们开始今天晚上的分享。

我是来自广西科技大学物联网工程专业导师李老师,我今天想要跟大家分享一下如何使用百度EasyDL经典版来定制喷油器阀座质检的模型,开始之前我想跟大家介绍一下,我比较喜欢有互动,如果大家能发弹幕,我们在分享的过程中也能够做及时沟通,如果没有人发我就只能自己编弹幕了。

我的分享主要分为两个部分。

第一部分是我们做喷油器阀座质检项目的一些简单的介绍,就是这个项目的来源和项目的难点、痛点在哪里。

第二部分就是给大家介绍一下使用EasyDL平台经典版部署一个喷油器阀座质检的模型,结合我们的分拣机械臂使用。

我们这个项目和学校是来自于广西柳州市,这一段时间内,柳州市比较出名的是一个叫做螺蛳粉的东西,不知道大家有没有了解过,疫情期间螺蛳粉上了四次热搜,因为疫情期间发不了货,柳州还有一个五菱汽车,整个汽车产业也是柳州市的一个支柱产业。

柳州市是全国最重要的汽车生产基地之一,年产量超过130万辆,也是全国人均汽车生产量最高的城市,上汽、东风汽车、一汽、中国重汽四大汽车集团在柳州都有生产基地,配零部件企业超过400家,从业人员6.6万人,汽车产业带动了我们城市很长时间的发展。微型汽车零部件本地配套率是达到了60%,商用汽车零部件配套是30%,还有其他零部件,上下游产业是被汽车产业带的,对城市作出了很大的贡献,有弹幕说五菱汽车是被上汽通用收购了,叫做上汽通用五菱。

这是一个校企合作的项目,我们的合作伙伴是柳州源创电喷技术有限公司,它属于汽车产业中的配套环节,生产汽车喷油器,它在整个汽车发动机里是很关键的部位,设备有着相当高的壁垒,长期被国外的企业把持住,源创电喷技术有限公司突破了这个壁垒,能够大量生产汽车和摩托车的喷油器,所以也是属于一家高新企业。

我们可以看一段小的视频,关于这个项目介绍的。

拍这个视频的时候,我当时去相亲了,没机会上镜,感觉是人生的遗憾。

关于92%的准确率实际够不够用,我们一会会介绍到。有一个手误,应该是60万,我改成70万了

我们这个合作项目它的初始来源是这样的,源创电喷技术有限公司副总是我的一个小学同学,我们小学一起下象棋,一起打篮球,还曾经一起打过架,是非常好的兄弟。毕业以后我回到学校,他来到这个生产喷油器的公司,我们就有这种校企合作的愿望,为传统企业进行智能化、自动化改造的意向。之前我们给源创电喷技术有限公司做生产管理系统,有幸在2018年我们学校跟百度公司校园品牌部合作了一个PaddlePaddle人工智能创意大赛,为了参加这个大赛,我们就去找找了很多企业,寻求他们一些实际的需求。在跟源创电喷技术有限公司沟通的时候,发现确实有一个环节,像质检环节可以用到人工智能用来做质检的,所以就有了这个项目的来源。

也如视频中介绍到,在2017年质检环节上,人力成本达到60万,如果我们使用了这个平台做人工智能的图像识别,能够为它节省极大的成本。实施之后,我们就只需要有人关信息化设备就可以了,检验效率还是能得到整体的提高。

我介绍一下具体的项目。在传统的人检过程中,这个阀座是喷油器当中非常关键的环节,它有点像螺丝帽,所以我们要把这个类似螺丝帽外层和内部通道的瑕疵检测出来,所以我们分为两个步骤,第一个步骤,先对它的内层瑕疵做检测,用一个摄像头采集,上传到平台上检测。第二个步骤是对外层瑕疵做检测,检测完以后再进行一个复核检测,最终完成了这个检测过程,传统就是靠肉眼去做检测的。

在这个检测过程中遇到了很多问题,这些问题都是常见人工视觉检测遇到的问题,比如长期做一个动作容易疲劳,注意力容易不集中,也会导致效率低。我们在实际工厂需求调研的时候,发现检测工人在检测到一段时间必须要起来走动一下,视力会感到疲劳。而且随着人工成本不断增加,企业在这个环节需要投入的成本需要提高,并且检测生产率也相对不是很高。

目前市场上能够检测的这些设备都是非常昂贵的,都需要做到定制化,少则就要十几万,像康泰斯这样的企业,它还是做大的设备,就是广泛平台的。如果想要适配每一种阀座,它的设备研发成本是非常高的。所以我们想通过自己去做检测算法,就是用人工智能,尤其是深度学习的这些办法做检测,确实也能达到很好的效果。

这个是我们在设计过程中,用深度学习方式做的集成的自动化检测流程。首先第一部分就是通过一个抖料盘,不断的把零件抖动到上料等待区,有一个上料机械臂夹取零件放到摄像头等待区域,采集好以后我们用下料机械臂把零件放到等待区当中,在这个缓冲的过程我们会上传到EasyDL平台,然后会有一个API接口,我们会调用,再进行分类,就是上传识别,识别完以后我们就会进行分类,这是分类的分装盒。

我们的硬件设计的思路就是有几个组成部分,一个是上料机,第二部分就是机械手,分为两个,一个是上料机械手,一个是下料机械手。因为我们是要实现内外层的识别,所以我们会用到双摄像头的方案,现在我们在后期的更新当中,找到了一些大景深的摄像头,我们最后使用单摄像头进行数据采集和识别。最后在等待区当中就是等待识别结果,然后进行分类,这是我们硬件的设计方案。软件方面,主要是依托我们的EasyDL平台,EasyDL平台在训练模型上,因为它的底层系统设计的非常完善,可以快速上传训练集,然后进行标注,标注好了以后可以一键式地训练模型。第二步,需要我们做一个硬件的控制,有很多种方式,我们选择的是Qt软件。在设备兼容器上来说是非常好的,我们可以针对不同的阀座训练不同的模型,我们可以在Qt软件通过调用不同模型接口实现多种类型的检测,这么设计我们的UI界面也非常的人性化,操作起来也特别的简单。

在我们使用机器检测以后,和传统的人工检测相比,我们可以在检测率和检测时间上和检测间隔上有一些区别。人工检测率上准确率由于人类的特点,人眼长期检测会有一些疲劳,容易造成一些错检,所以复检的准确率一般在75%到85%之间,机械检测正确率保证在95%以上,也跟我们的训练模型是有关系的。这个阀座的检测上,检测时间机器慢一些,因为我们的机械结构决定的,因为要对内层和外层元件进行检测,要转动摄像头,所以生产节奏就被托慢了。检测的件数就不用说了,机器可以长时间不间断的进行检测,只要我们需要检测的物料能够持续供应,人工检测的话大概每天在1000到2000件左右。一会我和大家分享一下我的一些看法,比较粗浅的看法。

我先讲讲我们训练的过程。首先,我们要登录EasyDL经典物体检测模型平台,点击物体检测模块,点击前往。然后要在这个检测模型当中创建一个模型,比如我们叫阀座的检测,创建好模型以后会把真实采集到的样板进行上传,并在线进行标注,标注好了以后可以点击训练,平台就可以自动帮我们训练,然后还会提醒我们,有短信通知告诉我们什么时候完成这个模型的训练,当时使用的是云服务API这个方式调用,就是我们在实际生产当中需要联网,联网之后通过API调用识别结果。当然在后期,咱们这里还可以选择设备端SDK的部署,服务器端SDK部署,以及硬件EdgeBoard的部署方式,这样的方式能实现离线预测,因为在实际生产当中,企业对于联网方式其实是不太喜欢的,首先是数据的泄露风险,第二个是在工厂当中要拉一条专线做联网,其实也是成本非常高的,在后期的实践当中我们也要推荐设备端的部署和EdgeBoard的部署方式。

怎么判断零件好坏,我们是有一些实际的标准,在实际训练当中,我们采集了好几万张图片,工作量是非常非常大的。我们在瑕疵检测模型当中标注,比如像这里有一些图片,这个零件上很明显的,就是边缘部分有一些毛疵,这个就是我们可以标注为毛疵类型。右下角这个部分有一个很短很小的毛疵,在它的质检标准里不超过0.3毫米都认为是合格品,左下角这个因为过于长,所以认为这是一个严格意义上的瑕疵。还有一个就是刮痕,另外还有一些,在实际生产当中像锈点、黑点、白斑在外层看的更多,在内层的图片当中,很明显可以看到主要是毛疵和刮痕两种类型。我们训练好模型以后,在实际的图片校验过程中可以返回这个结果。这是大概的训练和实际使用部署的过程。

之后我们给大家看一下实际的情况。这个是把零件送到等待区,机械臂会把零件放到待采集的区域,这是一个上料的过程,因为涉及到内外采集,有两个摄像头采集,然后进行下料,放到等待区,回来以后进行分类,有些是组合的瑕疵,像毛疵加刮痕,处理方式不一样,就分开,黑点和锈点也是一组瑕疵。等待下料,这是我们采集训练的过程。

好的,这个就是大致的分享。一会到QA环节和大家交流,接下来欢迎百度高级研发工程师介绍一下EasyDL怎么实际部署到一个工业场景中进行使用。

 

工程师:非常感谢李老师的精彩演讲。下面由我给大家介绍一下EasyDL的软硬一体方案。

EasyDL软硬一体是高性能硬件与图像分类模型以及物体检测模型的深度适配,可应用于工业分拣,就像刚才李老师讲的喷油器阀座的质检以及分类过程,就可以将软硬一体集成到机械臂中达到这样的一个效果,除此之外软硬一体方案还可以应用于视频监控方面,比方说在工业安全生产方面的监控,像口罩识别、安全帽识别等,还有道路车辆的监控,识别车辆等等这种应用在设备端的离线计算场景。总之,EasyDL软硬一体方案能够实现项目的快速部署,并且还可以达到一个很好的效果。目前,针对不同的应用场景,EasyDL也推出了不同性价比的软硬一体方案,我们可以大致看一下,有英伟达的xavier、TX2、nano软硬一体方案以及百度大脑推出的EdgeBoard系列软硬一体方案,具体的价格和介绍可以登录EasyDL官网中的软硬一体介绍中查看,我们今天重点介绍一下EdgeBoard,EdgeBoard包含FZ系列和VMX系列,vmx的内容昨天老师已经介绍过了,今天就看一下FZ计算盒的软硬一体方案。

FZ系列又包括了FZ5和FZ9两种计算盒,使用的是xilinx zynq mpsoc高性能平台,其中FZ9性能是最高的,他的算力是3.6Tops,高于cpu 40倍的计算性能,并且软件上深度适配了EasyDL模型以及这种计算盒的设计可以直接并且快速的部署到应用场景,比如今天介绍的这种场景,预测速度要求毫秒级的,就可以使用。

这里给大家列出了FZ9常见的模型推理性能,图像分类模型像mobilenetv1的性能是5ms,模型越大,FZ9就越能表现出高性能的优势,比如说,常用于物体检测的模型yolov3,他的性能是在70ms左右,相比较其他离线设备来讲,性能可以说很高了,而且EdgeBoard的性能也在不断的优化,后期随着版本的升级,模型的性能也会越来越好,针对我们的软硬一体方案,在使用EasyDL的专业版训练模型时,可以对照这个性能列表,自主选择合适的神经网络进行训练。

下面来简单介绍一下EasyDL模型如何部署到FZ9上,首先我们需要将训练好的模型先下载到本地,然后从本地上传到EdgeBoard的系统中,上传方式比较便捷的就是通过网络上传,可以使用FTP服务,也可以使用samba网络服务。后面这个图是EasyDL SDK的文件结构,我们看到一般里面包含三个文件夹,cpp是就是模型推理的相关程序,RES是模型文件,tools是模型更新的脚本文件。第一次使用SDK时,需要联网激活,首先需要将EdgeBoard的时间修改成当前时间,修改方式就可以参照下面这个命令,然后配置联网方式,EdgeBoard的网络配置信息是在etc/network/interfaces文件里,然后根据自己的路由器进行相关配置,可以是自动获取ip的方式,也可以设置ip和路由器在一个网段,然后,解压SDK中的cpp文件,出现demo工程,把EasyDL获取到的软硬一体序列号填写到demo的代码里面,保存,编译,编译完成后。再将预测图片放到工程里,执行demo程序就可以看到预测的结果。关于这部分我们也提供了详细的操作流程,EdgeBoard FZ系列的部署方式都是相同的,大家扫描右下角的二维码就可以观看。

下面给大家放个视频,这是一个用FZ9集成的AI抓拍机,使用软硬一体方案实现的螺丝螺母的检测和分类,并且将检测的结果实时的输出到显示器上。

好,下面进入QA环节,大家有什么问题可以提到直播间或者是我们的微信群中都可以。我们看一下大家都提了哪些问题。

   

李老师:我还有一些东西可以跟大家分享一下,关于我们选择什么样的模型来进行训练的问题,或者在工程应用上和实际做研究的区别。

我们刚开始考虑使用Tensorflow或者PaddlePaddle这样的模型做检测的,这样的模型检测首先是开源算法,就像我们之前用FastRCN,各家的框架都是支持的,训练起来也并不困难,甚至我们都不需要很好的GPU集群都可以做到很好的训练。但是会出现几个问题,首先,第一个问题,因为我们的特征库不完整,很容易造成过拟合。就是你在验证的过程当中准确率是非常高的,但是实际到了测试环节,就是上了很多新的数据,你会发现很多没有瑕疵的零件会检测出瑕疵出来,这就导致实际采用训练的模型变得非常不可靠。

其次就是使用EasyDL也是一个契机,在2018年百度开发者大会的时候,我们来到北京参加了这个大会,大会之后我们有幸见到了AI生态部的于总,他也给我们做了推荐,因为EasyDL我猜测它的底层的模型特征库肯定是非常的完善,它可以做一个迁移,相当于泛化性变得非常好。举个例子,所有东西见过了,很容易识别出猫狗,如果只见过猫,很难识别狗,这是很理想的状态。

 

Q:人的准确率怎么统计出来的?

A:这个统计不是特别准确,我们有一个初次检测,之后会把这些抽样进行复检再进行统计,复检过程中也有可能有错误,这个统计相对来说不是绝对的准确率,就是不能从上帝视角去评判它到底检测率是多少,我们只能说复检的检测率大概在什么状态下。

前面还有小伙伴提到准确率在汽车零件里是不是可接受的?

其实是可以接受的,因为我们整个喷油器是由多个环节组成的,不能保证每一个环节,每一个零件都非常非常准确率达到100%它采用使用。

刚才有小伙伴提到跟传统的检测的关系,深度学习。其实我们在这个项目之后还接到过一个项目,要求做键盘的外观瑕疵识别,它提的要求是一定要基于良品检测。什么意思呢,我有一个键盘的键帽是良品,我需要根据这个良品进行训练,之后这些检测环节不是良品的就是残次品,是这样的逻辑。我们这个喷油器检测是从瑕疵品作为训练的,不是瑕疵品的我们就认为是良品,所以这两个逻辑是不一样的。这两个逻辑的背后使用的技术就不一样,如果你要基于良品,你首先就得用传统的机器视觉的检测方式,就得自己做特征共存,那可不是一群本科生能够做得到的,而且你自己做特征共存成本非常高,像这些康泰斯这些大厂不会做不同用的,深入到很垂直领域的目标检测。深度学习的出现,相当于识别的过程交给卷积神经网络做预测的,它的通用性非常强,只要你能保证足够高的可见度的数据集,就像我们采集了几万张,不停的标注来训练,当然这个过程是非常痛苦的,也因为深度学习可能表面上看起来去掉了一些检测的职位,但是生成了很多数据标注的公司,就是养活了另外一批人。所以,这是我的一些简单的感觉,不知道实际深度学习和特征共存可能需要一些专家给出更好的理解,就是我个人的理解。

检测的类别。我们是分了几个类,有瑕疵、刮痕、黑点、锈点、白斑,当然在实际过程中,最后我们分成瑕疵和非瑕疵更好,更有利与我们的检测效率,本来我们想做分类以后做分类的处理,分类的处理后面的自动化又实现不了,所以多分类就变得意义不是特别的大。

 

Q:软件是如何集成的?

A:我们之前是调用的EasyDL的API接口,训练好模型以后它会提供一个网络接口,我们通过Qt软件做访问,我们上传一张图片会返还图片识别的结果,有了这个识别结果就可以进行分类。

有个小伙伴问基于良品的检测,那就是传统的机器视觉的算法。

 

Q:老师,看到群里有人在问,您这次讲解的案例是用哪一款软硬一体产品,是部署在Windows上吗?

A:是部署在Windows,后来我们发现有EdgeBoard以后,有一个边缘的图像识别,能够极大的减少我们的成本,我们要有一个工控机,的Windows系统,我们要开发Qt软件,球体软件就是用了CSharp做了硬件的集成啊。

我还是想回答关于良品如何检测的问题。良品检测是传统的  机器视觉,就要做特征工厂,比如我们有一些OPNECV的算法,你通过处理一些,或者用数学算法找到它的特征,比如识别一只猫,传统的机器视觉首先要把猫的轮廓识别出来,你有两个耳朵,尾巴,四只腿,这个就是类似于小动物,或者说你能识别出一个圆形,做边缘检测就是传统的基于良品的检测。这个特征工程需要很多很多视觉的基础知识,一般都是由一些硕士博士来做特征工程的,这些特征工程在高校里特别好发paper,但是神经网络是暴力检测,就是通过卷积神经网络帮我们做识别,我们是基于一种瑕疵做识别。

 

Q:老师还有人提问,您当时把所有异常类型都要标注出来吗?

A:对的,标注的越多,最后在检测的环节能够分类出来,但实际我们在升级生产环节当中觉得没有这个必要,你可以把全部的瑕疵都标为瑕疵这一类,但是有瑕疵的地方一定要标注出来。

 

QA:有同学问离线部署的价格,我们这边提供永久授权的SDK价格,是从200元到3万元不等,可以在官网查看我们详细的价格类型。

 

Q:分拣的算法只用EasyDL里吗,要不您讲讲在EasyDL里是怎么训练您这个模型的吧?

A:我能不能只讲这个图片,因为我没办法再打开这个平台。

Q:可以,描述一下,看您当时用的是经典版还是专业版,具体用了什么模型,遇到过什么困难之类的。

A:好的,我再共享一下屏幕。

A:这就是咱们EasyDL经典版物体检测模型的平台。因为改版了,之前跟现在的可能不太一样,这是现在平台的模样,我们选择的是物体检测的环节,点击前往,然后创建模型,创建好模型以后,就可以上传图片,并且是可以打包上传的,上传好以后有一个训练的环节,可以做标注的环节。比如创建好数据集以后,可以在数据集当中找到上传的图片,就像之前上传了499张,就可以对它进行标注,标注框不是这样,这是我自己画的图,大家可以自己尝试一下,因为这个真的是操作很简单了,在这边可以添加一个标签,比如刮痕,我就会标注刮痕,黑点或者毛疵就可以添加,添加好了以后就可以用四方的框子标出来,就会看到这是哪一个类型的,这是毛疵,我标注为毛疵这个类型的,其实实际操作起来比较简单。

 

QA:刚有小伙伴问,如果数据集很少怎么办。少量数据集,模型的效果跟你如何标注也有关系,标注越准,最后得出来效果越好。另外训练集的背景和各种情况要和应用的时候相同,这样保证效果更加优秀。

QA:标注后的数据集能下载吗?下载到本地?目前还是不支持的。

 

Q:如果有新的瑕疵您这边会怎么处理呢?

A:我们都是根据人工检测的流程来的,首先从项目角度来说要调研清楚有哪些瑕疵,一般来说不太可能出现新的瑕疵。

 

Q:所以这是一个历史数据,我们得出来有哪些瑕疵再进行标注对吧。

A:对,从工厂的季度来说,如果确实有可能出现新的瑕疵,我们再对模型进行重新训练也可以得到新的模型,只要调用这个新的模型就可以做新的检测算法。

 

QA:好的。刚才看到有小伙伴问,如果用EasyDL训练出的模型效果不好怎么办?最快捷的方法就是从页面上直接提交工单,我们有研发老师在值班,随时给大家解决问题。

有人问视频回放,这个肯定有,前提是要加小助手微信,之后公布视频回放的地址,大概一到两个工作日就会给到大家。

 

Q:当时的数据集大概有多大?

A:我们自己采集了有几万张,具体我没有统计。但是这个数据集应该用了四五百张吧,就是我们实际在部署到实际生产环境当中的模型,训练了四五百张。

 

Q:您当时的数据有先做过什么处理吗?

A:实际处理没有做过太多,之前因为数据集不够的时候做过一些黑白处理,做了分割处理,但是后来发现检测效果并没有太大的提升,而且在深度学习里有一个概念叫做端对端,有可能你做过处理以后反而不见得,相当于你把特征自己做了一个区隔,可能在神经网络当中,可能就少了一个维度的特征,也不见得是好事情。

 

Q:明白。好,老师有小伙伴问,您这次质检项目里用的摄像头分辨率是多少?

A:500万,但是跟实际的采集有关系。

 

Q:就是在应用过程中吗?

A:对,针对不同的项目,需要的分辨率是不一样的,只要你能保证采集到清晰那就是好的,如果你30万的摄像头也能采集清晰,首先成本上就降低了,主要目标是为了采集到清晰的图片和数据就可以了。

 

Q:了解。您这边的数据标注都是自己人工标的吗?

A:对,肯定是人工标的。

A:明白。我这个地方补充一下,数据标注这个地方,因为我们也提供智能标注,如果大家使用物体检测这个模型,也可以使用我们的智能标注,大概标30%左右的图片,让智能标注跑,如果标注不好,大家再标标可能效果就很好了。

Q:我拆一个台,好像这个功能我测试了一下,好像效果并不是特别好。

A:是吗,那您可以提交工单,我们后台可以帮您查一下,说不定明天就知道为什么不好了。

好的。

 

Q:您遇到过拍摄瑕疵的时候有光源反光的问题吗?

A:这也可以作为一个课题和大家分享一下。其实在目标检测这个领域,难的真的不是识别算法,首先因为这个算法是开源的。其次,像EasyDL平台或者谷歌的Tensorflow平台,它都能做到很好的检测效果,但是其实真正难的是在于你怎么采集到这个有效的数据,是非常难的。像刚才这个小伙伴问到光源反光,这个就完全不能工程运用,一旦反光,采集的东西是无效的,就没有办法做实施。

还有我们之前还接到一个案子,它是做汽车挡风板的,板子上有几十个点需要做检测,还有凹凸,它需要做智能检测的方案很大的成本都花在了采集图片上,首先我要多轴的机械臂技术数据的采集,因为要不停转换角度进行图像拍摄,这个成本是非常非常高的,有可能这个机械装置很可能比人工的检测成本高出很多,实际这个装置的生命周期可能三年,你要付出几百万,人工可能只付出几万就可以做检测了。所以在目标检测或者说视觉瑕疵检测里最关键是数据采集和数据标注上,后期的算法现在真的非常成熟,各家都有非常好的产品做支撑。

 

明白。我看到虽然还有一些问题,但是咱们时间缘故,线上回答问题就到这里。有其他问题的小伙伴,建议大家加一下我们小助手的微信,和小助手在群里提一下问题,我们会联系导师再给大家解答。

加小助手的方式呢,可以打开微信直接搜索BaiduEasyDL,微信号就是这个,也可以在二维码里加小助手就可以,备注质检,就可以进到我们的直播群。

 

谢谢李老师的分享,回到最后的作业和大促的介绍,谢谢您。

 

我们现在有一个518大促活动,参与本次课程学院在5月13到6月13号这一个月时间,购买任意一套EasyDL软硬一体方案赠送专业版脚本调参等价训练时长。

举例:购买一套EasyDL-VMX加速卡软硬一体方案,699元,可获得软硬一体方案一套+专业版脚本调参26小时GPU-V100训练时长/32小时GPU-P40训练时长/41小时GPU-P4训练时长(任选一种)。扫描左侧二维码可以到百度AI市场中,了解更多的软硬一体方案的介绍。

本次课后作业:使用EasyDL专业版 图像分类/物体检测模型训练检测模型脚本调参/NoteBook方式,有一个参考训练数据下载地址。提交扫描屏幕二维码提交作业,我们有最佳布道师的奖品,参与有奖评选2-读书笔记 、使用心得、使用教程、场景方案介绍等文章,在活动贴留言,参加优秀文章有奖评选,可以扫描屏幕下方的二维码。

下期预告,利用EasyDL进行视觉定位,提高机械臂定位精度,并进行线路板焊接质检,演示多个有趣的定位DEMO,大家可以扫描一下抖音码,他发的抖音非常酷炫。

非常感谢大家的参与,谢谢大家,晚安,也谢谢我们两位老师。

收藏
点赞
1
个赞
共2条回复 最后由q17821959241回复于2022-08
#3wangwei8638回复于2020-05

学习了

0
#2wangwei8638回复于2020-05

案例教学,多多益善

0
TOP
切换版块