版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论研究目的及意义随着科学技术的发展,自动分拣技术得到了广泛应用[1]。自动分拣系统集成了可编程控制器、机械传动和气动控制、人机界面、电机拖动等技术的应用,其中应用可编程控制器技术是自动化的重要组成部分[2]。也随着人们生活水平的提高,糕点种类为了迎合大众的审美与口味层出不穷[3]。因此设计一套基于单片机技术的基于AI视觉的糕点分拣系统,帮助糕点师去分拣使得顾客找到自己需要的。在国内,人工视觉的研究都还处于初级阶段,其中最著名的研究团队是以北京大学生物医学工程的任求实教授所在的C-Sight团队,其申报的采用多学科交叉综合研究的国家973项目《视觉功能修复的基础理论与关键科学问题研究》开启了我国人工视觉研究领域的先河,其研究的人工视觉修复手段主要就是视神经植入法[4]。该团队在过去的5年里已取得一定的研究成果,但还未进入人体相关的临床试验和产品的开发[5]。其他国内从事相关视觉修复研究的人员还有上海交通大学的柴新禹教授,重庆大学的郑小林教授,西南交通大学的苟先太副教授以及复旦大学的汪源源教授等等[6]。国内外研究现状这么多年来,国内外诸多研究人员在此领域的研究从来没有间断过。在2022年,国内的研究人员周树强在《基于FactoryIO的视觉分拣系统仿真》中对于PLC学习者,FactoryIO仿真可以帮助理解自动化生产线程序控制过程[7]。通过设计视觉分拣控制流程,配置FactoryIO场景中传感器、开关、传送带、推送机构等的I/O信号,进行PLC程序设计与调试,实现生产线视觉分拣操作。系统视觉传感器检测到物料并将物料特征转化为编码,不同种类物料有不同的编码值,通过比较编码值进行识别分拣[8]。实时观察场境中的动画,直观地监测PLC程序的执行过程和运行结果,弥补PLC实验设备缺乏问题[9]。在2022年九月,全兴科等人的团队在《智能分拣系统在电商仓储行业的应用》中阐述立体库储存系统将产品运输至机器人分拣(播种)和交叉带分拣的货到人控制技术的实现,并将播种盒暂存的自动化系统技术的设计与应用[10]。该应用基于第三方供应链云仓储业务环境对智能设备的设计,使得不同自动化设备在整体系统作业中,在满足不同产品的自动化需求,提高发货效率和订单准确率,减少操作人员数量等方面起到帮助[11]。在2022年十月初,张丹在《基于并联机器人的单片装火腿缺陷识别与分拣系统设计》中提升单片装火腿的分拣效果以Delta并联机器人为基础,结合自动控制、机器视觉等技术,设计搭建了一种能够识别单片装火腿缺陷的分拣系统[12]。建立2自由度Delta并联机器人的运动学与动力学模型,并对Delta并联机器人进行优化设计,还设计了控制系统的组成与图像处理的算法[13]。结果:该系统能够成功识别异物缺陷与折痕缺陷,识别率高达95%;能够准确、高效地分拣单片装火腿,分拣成功率达到98%,分拣效率为160包/min。结论:该系统可实现单片装火腿识别、抓取、搬运、分拣、剔除的连续化作业[14]。在2022年国外的AbbasAbbasFadhil在《DevelopedanAutomatedDesignSortingSystemAccordingtoOuterEdgesofObject.》一文阐述了自动化分拣系统被应用于工业部门以提高生产率[15]。本研究开发了分拣系统,利用视觉机器检测采集图像与存储基图像的匹配情况。该系统将与5cm/s传送带速度实时匹配和分拣。视觉系统是基于三个阶段来达到排序决策。第一阶段是将采集到的图像转换为二值图像,第二阶段是对产品进行边缘检测,第三阶段是将结果与基础图像进行匹配。该系统成功地对任何形状复杂、效率高的产品进行了分类[16]。系统排序可以在任何位置或方向检测和排序任何产品/机器元素。系统使用实时分析以提供所需的结果。结果到达分拣门在系统的末端传送带如果打开意味着产品匹配。为了考察响应和结果的准确性,选择了3种不同的产品。发现在所有情况下,检测产品的最大误差不超过2%[17]。2021年AgrawalAnubhav在《DesignandImplementationofRadioFrequencyIdentificationbasedSortingSystem》中提到分拣作业在各行业一直是一个具有挑战性和繁琐性的过程。随着技术的进步,人工排序已被自动化排序算法所取代。本文提出了一种新型的基于射频识别(RFID)的自动分选计数系统,该系统利用电磁场对附着在物体上的标签进行自动识别和跟踪[18]。RFID系统的有效性和高效性为工业应用贡献了巨大的潜力。为评估所提系统实时运行的性能,研制了微型样机[19]。基于RFID的自动分拣和计数系统的工作原型包括将物体放置在固定的工作站上。自动扫描是在放置的对象上进行的。扫描标签后,自动收集物品类型及其计数的信息并显示在LCD上[20]。主要研究内容本课题研究的内容为基于AI视觉的糕点分拣系统。该套系统主要由摄像头模块、AI模块、K210单片机、舵机、LCD等部分组成;采用K210单片机技术处理对摄像头模块和AI感应模块采集到的参数,根据相识度识别到糕点;若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣反之就是第二种。
系统的总体结构2.1设计方案文献研究法。通过查阅文献来获得研究资料,对系统设计中所涉及到的相关内容,如分拣系统、单片机技术等,初步构想系统要实现的功能及其运用的技术并搜集相关资料,作为系统设计的素材。功能分析法。功能分析法是社会科学用来分析社会现象的一种方法,是社会调查常用的分析方法之一。本系统通过功能分析法,对软件的各项功能进行具体分析,从而明确开发目标。定性分析法。通过对文献的研究,运用归纳和演绎、分析与综合以及抽象与概括等方法,深入了解软件和硬件开发的相关技术,从而熟悉系统中各个功能模块之间的关系,掌握系统的工作原理及其本质,确定开发流程。经验总结法。希望通过已有的每一块功能的结合进行总结,设计出一套优良的系统,并规范的编写程序。2.2功能需求分析2.2.1技术路线(1)硬件部分需要单片机K210、摄像头模块、LCD、舵机、AI模块。(2)画原理图用AD;(3)编程语言用python语言;2.2.2预期结果(1)系统实时显示监测到的画面;(2)系统学习两种糕点外观;(3)系统可根据相似度,判断识别到的糕点;(4)若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣;(5)若检测到第二种糕点,360度舵机逆时针旋转,完成第二种糕点的分拣;(6)若没有检测到糕点,此时检测的是操作台,不改变上次旋转方向;总体结构框图如下。图2.1系统总体结构框图2.3总体方案设计第一:理论知识准备阶段,理解设计课题,认真研究课题所涉及到的内容,能够较好的掌握有关题目的知识;第二:确定系统各个模块,理清各个模块之间的关系,收集相关得到软硬件资料;第三:规划课题,确定系统组成结构,勾画出大体系统框架并在结构框架的基础上提出原理框图;第四:利用软件完成硬件电路部分设计并画出各部分电路图,将系统部件通过接口电路集合在一起,并画出电路图;第五:根据系统控制过程完成软件设计部分,绘制出主流程图;第六:进行模拟仿真,检查系统是否能够按照要求实现控制功能,整理论文。2.4单片机型号选择主控制芯片选择K210单片机K210是嘉楠(Cannaan)科技的一款集成机器视觉与机器听觉能力的系统级芯片(RSIC-VCPU)。使用台积电(TSMC)超低功耗的28纳米先进制程,具有双核64位处理器,其拥有较好的功耗性能,稳定性与可靠性。该方案力求零门槛开发,可在最短时效部署于用户的产品中,赋予产品人工智能(AI)。可以说是集性能强劲与高性价比于一身。K210号称最强单片机,其最突出的特点是可以达到1TOPS算力,这是树莓派4无法比拟的,所以目前用它来做视觉方面的项目是最佳的选择。OpenMV提供了机器视觉功能最核心和最复杂的部分(包括硬件和核心算法),使用者们可以把自己的精力放在自己的想法和产品设计上,实现自己的各种创意。原理图如下。图2.2K210单片机最小系统原理图
系统的硬件部分设计3.1系统的总体设计该套系统主要由摄像头模块、AI模块、K210单片机、舵机、LCD等部分组成;采用K210单片机技术处理对摄像头模块和AI感应模块采集到的参数,根据相识度识别到糕点;若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣反之就是第二种。实现功能如下。(1)系统实时显示监测到的画面;(2)系统学习两种糕点外观;(3)系统可根据相似度,判断识别到的糕点;(4)若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣;(5)若检测到第二种糕点,360度舵机逆时针旋转,完成第二种糕点的分拣;(6)若没有检测到糕点,此时检测的是操作台,不改变上次旋转方向;总体原理图如下:图3.1系统总体原理图3.2系统的主要模块设计3.2.1LCD显示屏模块设计12864LCD液晶显示模块是一款4位/8位并行、2线或3线接口方式,内部含有国际一级、二级简体中文字库的图形点阵液晶模块。显示分辨率为128*64,内置8198个16*16点汉字,和128个16*8点ASCII字符集。该型号液晶模块具有接口方式简单,指令操作便捷的特点,可构成全中文人机交互图形界面。可显示8*4行16*16点阵的行字,也可完成图形显示。LCD12864分为带中文字库和不带中文字库两种,有并行传输和串行传输两种方式通常并行速度快。从电源地开始引脚依次为:电源地、电源正。其原理图如下所示。图3.2LCD显示屏模块原理图3.2.2TF内存卡模块设计TF卡即是T-Flash全名(TransFLash,2004年更名为MicroSDCard)的缩写出,这是Motorola与SanDisk共同推出的最新一代的记忆卡规格,它采用了最新的封装技术,并配合SanDisk最新NANDMLC技术及控制器技术。大小(11mmx15mmx1mm),约等于半张SIM卡,Trans-FlashCard为SDCard产品成员的一员,附有SD转接器,可兼容任何SD读卡器,TF卡可经SD卡转换器后,当SD卡使用。T-Flash卡是市面上最小的闪存卡,适用于多项多媒体应用.Trans-flash产品采用SD架构设计而成,SD协会于2004年年底正式将其更名为MicroSD,已成为SD产品中的一员。原理图如下。图3.3TF内存卡模块原理图3.2.3GC0328摄像头模块设计GC0328摄像头具有200万像素(1632x1232像素),其体积小、工作电压低,提供单片UXGA摄像和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率10位采样数据。该产品UXGA图像最高达到15帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。OmmiVision图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。原理图如下。图3.4GC0328摄像头模块原理图3.2.4分拣模块设计分拣模块主要是通过SG-90舵机实现的。舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统。舵机上有三根线,分别是GND(棕色线)、VCC(红色线)和SIG(黄色线),也就是地线、电源线和信号线。舵机通过接收PWM信号,使其进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。即给舵机一个特定的PWM信号,舵机旋转到特定角度。控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。原理图如下所示。图3.5舵机模块原理图3.2.5按键输入模块设计在矩阵键盘按键较多时为了减少IO口的运用,通过按键排列成矩阵的方式,采用逐行或者是逐列扫描,就可以读出按键的状态。扫描的概念:数码管扫描(输出扫描)原理:显示第一位>显示第二位,然后循环这个过程,最终实现所有数码管同时点亮的效果。矩阵按键扫描(输入扫描)原理:扫描第一行>扫描第二行>>>>>扫描第一列>>扫描第二列>>得出按键位置。原理图如下。图3.6按键输入模块原理图
系统的软件设计4.1软件的主要流程采用K210单片机技术处理对摄像头模块和AI感应模块采集到的参数,根据相识度识别到糕点;若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣反之就是第二种。步骤为:系统先实时显示监测画面后,系统进行学习两种糕点外观,学习后可以根据相似度判断识别到的糕点,若检测到第一种糕点,360度舵机顺时针旋转,完成第一种糕点的分拣;若检测到第二种糕点,360度舵机逆时针旋转,完成第二种糕点的分拣;若没有检测到糕点,此时检测的是操作台,不改变上次旋转方向。工作流程图如下。图4.1系统总体流程图
4.2LCD显示屏模块软件设计当单片机初始化完成后,系统开始正常工作。LCD显示屏会收到来自单片机的摄像头实时画面,以进行远程监控。工作流程图如下。图4.2LCD显示屏模块工作流程图
4.3TF内存卡模块软件设计当单片机初始化完成后,系统开始工作。摄像头开始对画面进行采集随后发送给单片机,单片机经训练后可识别分辨两种类型的糕点,进行工作时对分拣的糕点进行拍照,随后TF内存卡开始对录像和照片进行储存,以便日后查看,方便管理。工作流程图如下。图4.3TF内存卡模块软件设计
4.4GC0328摄像头模块软件设计当单片机初始化完成后,系统开始工作。摄像头将实时拍摄并发送画面给单片机,单片机经过事先的学习,可对摄像头拍摄出的画面进行识别和分辨,随后进行相应处理。工作流程图如下。图4.4GC0328摄像头模块软件设计
4.5舵机模块软件设计当系统初始化完成后,开始正常工作。摄像头拍摄照片给单片机进行识别,若识别到是第一种糕点,则舵机进行360度顺时针翻转,若是第二种糕点则360度逆时针翻转,若无糕点则不改变翻转状态,以此进行分拣动作。工作流程图如下。图4.5舵机模块工作流程图
4.6按键输入模块软件设计当系统初始化完成后,开始正常工作。按下不同按键分别执行不同功能。工作流程图如下。图4.6按键输入模块工作流程图
系统测试5.1系统实物图图5.1系统成品实物图5.2测试原理图5.2按下中间按键对两种糕点和环境进行学习,每一种糕点学习五张图5.3分别检测及其结果按下按键三开始检测,当检测到第一种糕点时,显示屏显示MAYBEPASTRY1,舵机顺时针旋转;检测到第二种时,显示MAYBEPASTRY2,舵机逆时针旋转;无检测到时显示Surroundings,意为只有工作环境,舵机旋转方式保持在上一种(第二种)。
总结与展望6.1总结在整个设计过程中,硬件方面主要设计了K210单片机的最小系统、舵机接口电路、LCD屏幕及显示、摄像机拍摄电路。软件方面借助各个渠道的资料,主要设计训练学习程序、显示程序、舵机运行程序、拍摄识别程序。系统的调试主要是通过一块K210开发板,再借助于AD以及自己搭建的电路实现的。分部调试时偶尔会出现一些问题但解决方案都有迹可循。此管理系统能够实现检测后不需要人为干预,自动进行操作。节省了大量人力资源,方便人们生活。为了画出自己满意的电路图,图表等,我仔细学习了绘图技术。在设计电路初期,由于没有设计经验,觉得无从下手,空有很多设计思想,却不知道应该选哪个,经过导师的指导,我的设计渐渐有了头绪,通过查阅资料,逐渐确立系统方案。毕业设计对于每个大学生来说是一门必修课程,在大学这一个求学阶段只有一次。完成了电路设计这一部分的工作内容,我觉得自己将曾经学习过的知识再次学习了一遍,对于各个元器件的设计规则,又有了进一步的熟悉。在这个的过程中,遇到的问题也非常多,在经过遇到问题,思索问题到解决问题的过程中,收获是最多的。以往没有注意到的问题,都在这一次的毕业设计中得以体现,这培养了我的细心,耐心和专心。指导老师给予的指导、同学的帮助让我受益良多,无论是理论工作上的计算,还是实际的操作,老师都给我们做了详细的分析,让我在设计各个量时更能理论结合实际,更合理的进行安排设计。6.2展望科技的发展日新月异,人工智能领域的发展更是迅速,随着人工智能技术的不断提高,其相关应用也越来越广泛,其中最为显著的是在图像识别、语音识别和自然语言处理方面的应用,这些技术的发展给人们带来了很多便利。机器视觉可以说是人工智能的基础设施层,它的应用领域是非常深、非常多的,从整个产业链的全景图来讲,中国的人工智能产业模块处在快速的生态构建期。总而言之,人工智能领域的发展和应用有很大的前景,但此次设计的智能AI糕点分拣系统也存在不足的地方,以后有待改进。参考文献[1]蒲睿强,吴封斌,王璐,岳洪吉.基于eM-Plant的异型烟分拣系统仿真技术应用[J].科技与创新,2022(22):166-168.DOI:10.15913/ki.kjycx.2022.22.047.[2]杨旭东,胡渊富,蒲睿强,徐明阳.异型烟分拣系统码垛作业优化研究[J].机械设计与制造,2022(11):139-143.DOI:10.19356/ki.1001-3997.2022.11.028.[3]王凤娟.基于PLC控制的物件识别与分拣系统设计与实现[J].电器工业,2022(11):68-71.[4]谢金涛.物料循环分拣系统PLC控制系统设计[J].南方农机,2022,53(21):75-77.[5]王银明,张丹.基于并联机器人的单片装火腿缺陷识别与分拣系统设计[J].食品与机械,2022,38(10):104-109.DOI:10.13652/j.spjx.1003.5788.2022.60080.[6]杨恒源,陈宇,姚晨彧,孟祥祥,胡骁原.基于RFID技术的智能书本分拣系统[J].机械工程师,2022(10):42-44.[7]杨旭东,蒲睿强,徐明阳,胡渊富.基于eM-Plant的异型烟分拣系统仿真优化及应用[J].机械设计与制造,2022(10):125-128.DOI:10.19356/ki.1001-3997.2022.10.004.[8]廖耿斌.基于PLC的物料分拣远程监制系统[J].电子制作,2022,30(19):42-44+18.DOI:10.16589/11-3571/tn.2022.19.014.[9]周丽霞,龚勤慧,周树强.基于FactoryIO的视觉分拣系统仿真[J].成都航空职业技术学院学报,2022,38(03):54-56+81.[10]龚博阳,鲍光海.基于图像处理的接触器动态特性测试方法[J].电器与能效管理技术,2020,0(5):10-14.[11]郭壮,曹冬梅,童一飞.基于树莓派4B的运动目标追踪研究[J].现代电子技术,2019,40(15):14-16.[12]吴忠文,费树岷.基于树莓派4B目标跟踪算法的优化[J].工业控制计算机,2018,31(4):77-79.[13]冯志刚,贾宁宁,朱琳琳.基于树莓派4B的视频跟踪系统的设计与实现[J].沈阳航空航天大学学报,2018,35(6):68-74.[14]魏立梅,谢维信.模糊联想记忆系统规则提取的新方法[D].西安电子科技大学学报,2019,26(4);420-425.[15]徐恒,郭晓莹.欧姆龙FH视觉系统在物料分拣中的应用[J].电脑知识与技术,2022,18(27):18-20.DOI:10.14004/ki.ckt.2022.1755.[16]GuoHuiling,WangJuan,RenSu,ZhengLangFan,ZhuangYiXuan,LiDongLin,SunHuiHui,LiuLiYing,XieChangchuan,WuYaYing,WangHongRui,DengXianming,LiPeng,ZhaoTongJin.TargetingEGFR-dependenttumorsbydisruptinganARF6-mediatedsortingsystem[J].NatureCommunications,2022,13(1).[17]MichaelLevans.Roboticsortingsystemcansortsmallitems[J].MaterialHandlingProductNews,2022,44(5).[18]ZhuangZilong,LiuYing,YangYutu,ShenYinxi,GouBinli.ColorRegressionandSortingSystemofSolidWoodFloor[J].Forests,2022,13(9).[19]XuXianhao,ChenYuerong,ZouBipan,GongYeming.Assignmentofparcelstoloadingstationsinroboticsortingsystems[J].TransportationResearchPartE,2022,164.[20]ChenSsuHan,JangJerHuan,ChangYuRu,KangChihHsiang,ChenHungYi,LiuKevinFongRey,LeeFongLin,HsuehYangShen,YouhMengJey.AnAutomaticForeignMatterDetectionandSortingSystemforPVCPowder[J].AppliedSciences,2022,12(12).附录电路图源代码importKPUaskpuimportsensorimportlcdfromMaiximportGPIOfromfpioa_managerimportfmimporttimeimportgcfrommicropythonimportconst#导入constfromboardimportboard_infofrommachineimportTimer,PWM#ServoimportSG90_360_Drive###########################################config#################################################class_num=3#类数量sample_num=15#样本数量THRESHOLD=11#阈值class_names=['Surroundings','Pastry1','Pastry2']#类名称:环境、糕点1、糕点2board_cube=0Identify_Results={'Identify_Situation':"",'Identify_Index':''}#识别结果SYS_Status='END'#系统状态:状态cap_num=0#抓取训练数量train_status=0#训练状态last_cap_time=0#上次训练抓取时间last_btn_status=1#上次按键状态############################################################################################################################################SG-90360#################################################tim1=Timer(Timer.TIMER2,Timer.CHANNEL0,mode=Timer.MODE_PWM)Ctr_Sg90_360_1=PWM(tim1,freq=50,duty=0,pin=board_info.PIN_Ctr_SG90_360)Sg90_360_1=SG90_360_Drive.SG90_360(Ctr_Sg90_360_1)Sg90_360_1.Init()#initSG-90360##############################################################################################################################################KEY######################################################KEY_BOOTfm.register(board_info.PIN_KEY_BOOT,fm.fpioa.GPIOHS0)KEY_BOOT=GPIO(GPIO.GPIOHS0,GPIO.PULL_UP)#KEY_SYSfm.register(board_info.PIN_KEY_SYS,fm.fpioa.GPIOHS2)#注册IO-KEY2KEY_SYS=GPIO(GPIO.GPIOHS2,GPIO.IN,GPIO.PULL_UP)#构建KEY_2对象defexit_KEY_SYS_fun(KEY_SYS):#KEY_2中断回调函数globalSYS_Status,train_statusiftrain_status!=0:time.sleep_ms(10)#消除抖动ifKEY_SYS.value()==0:#确认按键被按下ifSYS_Status=='END':SYS_Status='RUN'else:SYS_Status='END'KEY_SYS.irq(exit_KEY_SYS_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#########################################################################################################################################文字显示######################################################defdraw_string(img,x,y,text,color,scale,bg=None):ifbg:img.draw_rectangle(x-2,y-2,len(text)*8*scale+4,16*scale,fill=True,color=bg)img=img.draw_string(x,y,text,color=color,scale=scale)returnimg#########################################################################################################################################异常/正常######################################################Operation_State=''defOperation(operation_state):ifOperation_State!='':ifOperation_State=='SYN':#System--ENDSg90_360_1.Stop()#舵机关闭elifOperation_State=='operation_waste_1':#类1--正转Sg90_360_1.Clockwise()#舵机正转elifOperation_State=='operation_waste_2':#类2--反转Sg90_360_1.Anticlockwise()#舵机反转elifOperation_State=='surroundings':#环境--surroundingspass#保持else:passelse:pass#####################################################################################################设置摄像头sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_windowing((224,224))#ifboard_cube==1:#sensor.set_vflip(True)#sensor.set_hmirror(True)#lcd.init(type=2)#lcd.rotation(2)#else:#lcd.init()#初始化LCDlcd.init()#设置摄像头水平与垂直镜像sensor.set_vflip(True)sensor.set_hmirror(True)#再次运行删除模型try:delmodelexceptException:passtry:delclassifierexceptException:passgc.collect()model=kpu.load("/sd/sipeed_learn_model.smodel")#加载模型#model=kpu.load(0x300000)classifier=kpu.classifier(model,class_num,sample_num)#模型初始化while1:Identify_Results['Identify_Situation']=''Identify_Results['Identify_Index']=''img=sensor.snapshot()#采集图片ifboard_cube:img=img.rotation_corr(z_rotation=90)img.pix_to_ai()#captureimgiftrain_status==0:#如果训练状态:0(未训练)ifKEY_BOOT.value()==0:#如果按键值为:0(按下)time.sleep_ms(30)#延时30msifKEY_BOOT.value()==0and(last_btn_status==1)and(time.ticks_ms()-last_cap_time>500):#如果按键按下&&上次按键状态==1&&时差大于500last_btn_status=0#上次按键状态=1last_cap_time=time.ticks_ms()#更新上次抓取时间ifcap_num<class_num:#如果抓取数量<类数量index=classifier.add_class_img(img)#添加类图片,并获取当前添加图片的indexcap_num+=1#cap_num自增1print("addclassimg:",index)#打印当前添加的类elifcap_num<class_num+sample_num:#如果:类数量<抓取数量<类数量+样例数量index=classifier.add_sample_img(img)#添加样例并获取当前添加样例的indexcap_num+=1#cap_num自增1print("addsampleimg:",index)#打印当前添加的样例else:#如果:按键弹起img=draw_string(img,2,200,"releasebootkeyplease",color=lcd.WHITE,scale=1,bg=lcd.RED)#请松开按键else:#如果未按下按键time.sleep_ms(30)#延时30msifKEY_BOOT.value()==1and(last_btn_status==0):#如果按键按下&&上次按键状态==0last_btn_status=1#上次按键状态=1ifcap_num<class_num:#如果抓取数量<类数量img=draw_string(img,0,200,"pressbootkeytocap"+class_names[cap_num],color=lcd.WHITE,scale=1,bg=lcd.RED)#显示请按键抓取类xelifcap_num<class_num+sample_num:#如果类数量<抓取数量<类数量+样例数量img=draw_string(img,0,200,"bootkeytocapsample{}".format(cap_num-class_num),color=lcd.WHITE,scale=1,bg=lcd.RED)#显示请按键抓取样例x#trainandpredictiftrain_status==0:#如果训练状态:0(未训练)ifcap_num>=class_num+sample_num:#如果类数量+样例数量<抓取数量print("starttrain")#print开始训练img=draw_string(img,30,100,"training...",color=lcd.WHITE,scale=2,bg=lcd.RED)#显示training...lcd.display(img)#显示classifier.train()#训练print("trainend")train_status=1#训练状态=1else:#如果训练状态:1res_index=-1try:res_index,min_dist=classifier.predict(img)print("{:.2f}".format(min_dist))exceptExceptionase:print("predicterr:",e)ifres_index>=0andmin_dist<THRESHOLD:#如果返回Index>=0&&特征值<阈值print("predictresult:",class_names[res_index])#预期结果,类名字img=draw_string(img,2,2,class_names[res_index],color=lcd.WHITE,scale=2,bg=lcd.RED)#显示Identify_Results['Identify_Situation']="predictresult"Identify_Results['Identify_Index']=class_names[res_index]else:#如果:(<0&特征值<阈值)(>0&特征值>阈值)<0&特征值>阈值print("unknown,maybe:",class_names[res_index])img=draw_string(img,2,2,'maybe{}'.format(class_names[res_index]),color=lcd.WHITE,scale=2,bg=lcd.RED)Identify_Results['Identify_Situation']="unknown,maybe"Identify_Results['Identify_Index']=class_names[res_index]ifSYS_Status=='END':Operation_State='SYN'else:ifIdentify_Results['Identify_Index']==class_names[0]:#class-0环境Operation_State='surroundings'elifIdentify_Results['Identify_Index']==class_names[1]:#class-1糕点1Operation_State='operation_waste_1'elifIdentify_Results['Identify_Index']==class_names[2]:#class-2糕点2Operation_State='operation_waste_2'else:passOperation(Operation_State)img=draw_string(img,2,32,'SYS_Status{}'.format(SYS_Status),color=lcd.WHITE,scale=1,bg=lcd.GREEN)lcd.display(img)#Youcansavetraineddatatofilesystemby:#classifier.save("3_classes.classifier")#Thenload:#model=kpu.load(0x300000)#classifier=kpu.classifier.load(model,"3_class.classifier")'''文件名称:SG-90360舵机驱动文件版本:v1.0日期:2023.01.12作者:--说明:需要使用资源:PWM'''classSG90_360:def__init__(self,ctr_sg90_360):self.ctr_sg90_360=ctr_sg90_360defServo_SG90_360(self,speed):self.ctr_sg90_360.duty((speed+90)/180*2*5+0.5*5)defStop(self):#停止范围:-3~2(设置0)self.Servo_SG90_360(0)defClockwise(self):#正转self.Servo_SG90_360(-20)#负数为正转,绝对值越大,转速越快;范围:-4~-90defAnticlockwise(self):#反转self.Servo_SG90_360(20)#正数为反转,绝对值越大,转速越快;范围:2~-90defInit(self):self.Stop()importKPUaskpuimportsensorimportlcdfromMaiximportGPIOfromfpioa_managerimportfmimporttimeimportgcfrommicropythonimportconst#导入constfromboardimportboard_infofrommachineimportTimer,PWM#ServoimportSG90_360_Drive###########################################config#################################################class_num=3#类数量sample_num=15#样本数量THRESHOLD=11#阈值class_names=['Surroundings','Pastry1','Pastry2']#类名称:环境、糕点1、糕点2board_cube=0Identify_Results={'Identify_Situation':"",'Identify_Index':''}#识别结果SYS_Status='END'#系统状态:状态cap_num=0#抓取训练数量train_status=0#训练状态last_cap_time=0#上次训练抓取时间last_btn_status=1#上次按键状态############################################################################################################################################SG-90360#################################################tim1=Timer(Timer.TIMER2,Timer.CHANNEL0,mode=Timer.MODE_PWM)Ctr_Sg90_360_1=PWM(tim1,freq=50,duty=0,pin=board_info.PIN_Ctr_SG90_360)Sg90_360_1=SG90_360_Drive.SG90_360(Ctr_Sg90_360_1)Sg90_360_1.Init()#initSG-90360##############################################################################################################################################KEY######################################################KEY_BOOTfm.register(board_info.PIN_KEY_BOOT,fm.fpioa.GPIOHS0)KEY_BOOT=GPIO(GPIO.GPIOHS0,GPIO.PULL_UP)#KEY_SYSfm.register(board_info.PIN_KEY_SYS,fm.fpioa.GPIOHS2)#注册IO-KEY2KEY_SYS=GPIO(GPIO.GPIOHS2,GPIO.IN,GPIO.PULL_UP)#构建KEY_2对象defexit_KEY_SYS_fun(KEY_SYS):#KEY_2中断回调函数globalSYS_Status,train_statusiftrain_status!=0:time.sleep_ms(10)#消除抖动ifKEY_SYS.value()==0:#确认按键被按下ifSYS_Status=='END':SYS_Status='RUN'else:SYS_Status='END'KEY_SYS.irq(exit_KEY_SYS_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#########################################################################################################################################文字显示######################################################defdraw_string(img,x,y,text,color,scale,bg=None):ifbg:img.draw_rectangle(x-2,y-2,len(text)*8*scale+4,16*scale,fill=True,color=bg)img=img.draw_string(x,y,text,color=color,scale=scale)returnimg####################
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于2025年度区块链技术应用合作协议3篇
- 2025年度汽车租赁市场拓展合作协议合同4篇
- 2025年度二零二五年度猕猴桃包装设计及品牌推广合同4篇
- 二零二五版建筑工程安全施工许可证申请合同3篇
- 2025版信托资金借贷合同争议解决争议管辖条款3篇
- 2025年度健康管理机构临时健康管理师劳动合同4篇
- 二零二五年度海上旅游船租赁服务合同范本3篇
- 个人住宅买卖法律合同(2024年修订)版B版
- 2025年度户外运动用品门店承包管理服务协议4篇
- 二零二五年柑桔加工副产品回收利用合同2篇
- 道路沥青工程施工方案
- 《田口方法的导入》课件
- 内陆养殖与水产品市场营销策略考核试卷
- 票据业务居间合同模板
- 承包钢板水泥库合同范本(2篇)
- DLT 572-2021 电力变压器运行规程
- 公司没缴社保劳动仲裁申请书
- 损伤力学与断裂分析
- 2024年县乡教师选调进城考试《教育学》题库及完整答案(考点梳理)
- 车借给别人免责协议书
- 应急预案评分标准表
评论
0/150
提交评论