文心快码 - 助力《垃圾智能AI识别系统》从开发到上线“全链路环节”增效
完美句号 2024-08-17 15:31:03 阅读 57
一、前言:
最近公司有一个项目需求需要使用到AI智能识别的功能《垃圾智能AI识别系统》,之前也没接触过这个赛道,刚好前段时间参加过“Baidu Comate智能编码助手”的活动,在公司的项目也是一直在使用,在很多地方帮助程序员开发人员更好地理解和优化代码,提高软件的可维护性和可靠性、安全性。
今天刚好也是接触新的技术领域,经过“Baidu Comate智能编码助手”的几个月的使用的经验,来帮助我从0到1来实现这个《垃圾智能AI识别系统》的项目。
1.1 项目需求描述:
客户有一个自动化垃圾分拣设备,需要装一个开发板,在AI技术加持下,作业单位可以通过识别不同的生活垃圾图片进行实时分析处理,来决定这个垃圾将要分拣到哪个区域,将AI识别技术用于垃圾分类质量来提高人工的效率,以实现对湿垃圾分类品质的智能管理和监督。
1.2 技术挑战:
与之前接触的Web领域不同,这次的项目是几个部门一起联合协作,IT、AE(自动化工程)、ME(机械工程)等几个部门,IT部门需要做的事情就是通过开发板将垃圾的图片识别出来进行分类,将结果的数据传给AE部门,再通过机械手臂来分拣到对应的区域,因为也是刚刚接触硬件相关的开发,所以,下面大概列举一下这次挑战的技术点:
硬件开发板(基于香橙派的OrangePi AIpro(8-12T))图片智能识别领域(基于Python)环境部署(Linux Ubuntu)
因为本人一直在使用PHP进行开发,接下来,就由“Baidu Comate智能编码助手”边问边做,来一步一步的实现完成《垃圾智能AI识别系统》的项目。
二、基于“Baidu Comate 智能编码助手”实现《香橙派垃圾识别的AI项目》的最佳落地实践:
开发板的主要目的是帮助开发人员快速搭建嵌入式系统原型,进行软硬件联合调试和测试,从而提高开发效率和减少开发成本。
本人也是刚刚接触开发板,从“Baidu Comate 智能编码助手”给出的解释是:开发板(Demo Board)是一种用于嵌入式系统开发的硬件平台,它通常包含了一系列必要的硬件组件,如中央处理器(CPU)、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等。
在我个人的理解中是相当于一个小型的主机,由于成本比较低、体积比较小,可以在智能家居、物联网、机器人等项目中,开发板作为核心硬件平台,支持项目的快速开发和部署,本文中我们使用香橙派的OrangePi AIpro(8-12T)开发板来开发运行的环境。
2.1 上传OrangePi手册打造私有在线“AutoWork”知识库:
刚刚接触这个开发板,有点无从下手,需要准备什么样的东西,如何开机使用等问题,从官网下载了一个 使用手册,有近12M的一个PDF,而且有近170页,从头看到尾,估计要花费很长的一段时间,从上个文章了解到“Baidu Comate 智能编码助手”有一个“AutoWork”功能,让我们将这个使用手册上传到在线知识库,让AI来帮助我们使用和理解PDF手册。
在VsCode中的“Baidu Comate 智能编码助手”中,点击“知识模块 -> 知识集 -> 新增知识集”即可在VsCode中打开知识集管理列表,新增一个“OrangePi手册”的知识集,保存后可以在列表中查看,此时,知识集里面是没有文档的,可以⽀持 上传.pdf、.md、.txt、.docx、.doc、.zip、.gz等格式的文件,⼤⼩要小于100M。
将PDF手册上传时,发现有一个错误“包含xss脚本代码”,上传不了,在之前的体验是没有的,只能将PDF手册通过百度的工具转化为可编辑的wrold文档,去掉相关的xss代码即可上传成功。
可以看到在官方这次更新迭代中,增加了不少安全方面的验证,如在编码阶段发现安全问题:通用漏洞、供应链漏洞、机密防泄漏。
这里需要注意一下,刚刚上传的world会显示一个“未激活”的tag,表示当前知识集是否已完成向量化,即上传的文档左上角未出现『未激活』字样,需要等待向量构建,如果构建完成的话,搜索的结果都会优先查找上面的world。
2.2 开发板开机准备:
上面看到可以使用“AutoWork”搭建完成知识库,从知识库问一下,开发板如果需要开机的话,需要使用到哪些配件,需要准备哪些配件:
Type-C电源线、插头SD卡、SD卡读卡器HDMI插头散热风扇
通过上面提到的准备的配件后,我们组装在一起,可惜知识库没有提供图片,这里建议后面AI能够生成图片,比如“OrangePi板子如何进行组装配件”,回答的文案跟上面也是接近,无奈这部分只能去看看官方提供的PDF文档,可以看到如下图所示,基本上使用了4个位置的地方:键盘和鼠标USB插头、显示器HDMI插头、电源Type-c插头、SD卡插槽。
插入USB的鼠标和键盘、显示器HDMI线、自带的type-c电源线后,即可以去插上电源了,经过上面配件的组装后,一插入就自动启动了,没有什么开机键,即一通电就自动启动了。
但是有一个问题,等了5分钟除了风扇一直响外,只有一个灯在闪,但是显示器不显示画面,因为开发板肯定是刚买的,大概率问题不大,而且显示的线也是在当副屏幕在使用,所以,硬件坏掉的可能性比较低,让“Baidu Comate 智能编码助手”帮我分析一下是有什么原因导致的?从哪些方面入手处理?
结合“Baidu Comate 智能编码助手”给出的原因与定位的问题点,我们可以使用排除法来确认不能开机的原因:
序号 | 可能存在问题点 | 解决方案 | 难度 |
---|---|---|---|
1 | 检查一下控制启动设备的两个拨码开关,要想从TF卡启动,需要都是右 | 检查无问题 | 1星 |
2 | 可能烧录的时候出现上面异常,导致无法亮灯 | 可以尝试重新烧录一下 | 2星 |
3 | 手里是否有备用TF卡,不过最好使用容量大点的,32G以上,推荐64G | 需要买一张备用卡 | 3星 |
4 | 可能开发板子存在问题 | 这个需要专业人员来解决 | 4星 |
因为手里没有备用的TF卡,只能通过第二种方案重新进行烧录试试。
在询问“如何进行烧录系统”时,可以看到下载操作系统的镜像并没有给出下载的地址,这里也是为了演示,“AutoWork”私有库如何的进行迭代维护,将几个重要的下载地址,通过编辑一个txt文档,上传到对应的知识库中。
首先打开balena烧录工具地址,因为个人办公是Mac电脑,借用了同事的Windows电脑来进行此次的测试,我们选择OS为“WINDOWS”的X86|X64版本下载。
打开下载的balena烧录工具,不用安装,直接就打开了,非常的方便,不用在电脑上安装软件:
点击“从文件烧录”选择好我们提前下载的Linux镜像(百度云真的慢)点击“选择目标磁盘”选中我们插入的TF卡(我提前格式化了)点击“现在烧录”就可以开始进行烧录了
经过2个阶段,一个是验证阶段,一个是烧录阶段,最后烧录提示“出了点问题”,这里不用管,下面会解释为什么。
小细节:
烧录时,提示U盘找不到,需要重新插入,此时,不用管他的提示。在烧录完成后,提示要格式化,也不需要管,因为在烧录时,就已经开始写成Linux的启动镜像盘了,此时,在windows系统是无法识别的,是正常的。
通过重新烧录系统之后,我们的系统就可以正常启动了,但是界面显示需要输入一个用户名和密码,才能进入系统。
通过使用“Baidu Comate 智能编码助手”查找知识库,马上给我们得到了结果,并且经过测试,输入以下这组用户名与密码之后,即可正常进入系统的桌面。
用户名:HwHiAiUser密码:Mind@123
以上就是通过“Baidu Comate 智能编码助手”的“AutoWork”私有库,我需要面对冗长复杂的技术手册,往往需要花费大量时间阅读和理解,占用了开发者大量精力,也会拖慢项目开发进度,只需要简单的将pdf、world、txt等之类的文件,上传到知识库中,能够无缝链接团队的私域知识,即可以挂载各种开发文档、需求文档、API文档等。
通过挂载这些文档,开发者不再需要花费大量时间去翻阅文档、理解新业务逻辑,AutoWork能够直接利用这些现有文档资源,完成理解和分析,加速代码生成,快速实现开发需求。
2.3 开发版本远程链接:
远程连接就是在远程连接另外一台计算机,当某台计算机开启了远程桌面连接功能后,就可以在网络的另一端控制这台计算机了,通过远程桌面功能就可以实时的操作这台计算机,在上面安装软件,运行程序,所有的一切都像是直接在该计算机上操作一样。
一般来说,像开发板的话,会使用使用远程连接来提高工作效率、促进团队协作和资源共享,在询问“Baidu Comate 智能编码助手”如何进行开发板的远程链接,也给出了方案:
由于办公环境没有网线,用的是Wifi,所以,先将开发板连上Wifi查看IP地址,使用ip addr命令来查看eth0网卡的IP地址,因为在同一个Wifi中,算是同一个局域内网,可以进行通信开发板上的环境是Linux环境,所以我们使用SSH进行登录登录上开发板环境
上面通过“Baidu Comate智能编码助手”的“AutoWork”构建私有库可以加快对文档的搜索,更好的帮助我们检索想要的答案,而且可以通过不断的更新文件来弥补垂直领域的空缺,将开发板从组装、烧录、开机等阶段的辅助,当然,其中,也会存在一些问题,只有一些文案的描述,如果里面能生成图片就更好了。
2.4 准备开发环境:
因为本人一直是使用PHP和vue在开发项目,没有接触过其它的语言,这次首先使用“Baidu Comate 智能编码助手”帮助查询一下用什么语言开发一个垃圾识别的项目,以下在“Baidu Comate 智能编码助手”的输入框中,输入需要搜索的问题,点击“发送”即可轻松的完成检索。
序号 | 功能 |
---|---|
1 | 活动栏中打开“Baidu Comate智能编码助手”,可以打开一个Baidu Comate窗口。 |
2 | 在问题输入区域,输入我们想要搜索的问题,回车或者点击“发送”按钮。 |
3 | “Baidu Comate智能编码助手”交互式返回答案。 |
从“Baidu Comate智能编码助手”的回答提示来看,可以看到基于当前AI和机器学习领域的流行趋势,推荐使用Python语言。
“Baidu Comate智能编码助手”搜索一下,如何进行python版本的查看,可以判断一下我当前的环境中是否有python环境,给我推荐了一条shell命令行“python --version”,经过在开发板中查看,发现确实没有python运行环境,需要进行手动安装一下环境。
搜索“怎么在Ubuntu安装ptyhon环境”,根据提示的在开始安装之前,建议先更新一下Ubuntu软件包列表,以确保安装的最新的版本的软件包,需要输入shell命令“sudo apt update”,可以看到命令执行,开始下载和更新软件列表,但是在这个过程中,更新很缓慢,等了10几分钟也没更新完,在我的笔记中有更新镜像源的方法,但是查找的过程比较多,让“Baidu Comate智能编码助手”来几秒回答我。
“Baidu Comate智能编码助手”给出的答案,可以分为4步来进行手工来操作切换镜像源:
需要备份源文件,因为怕误操作,还可以还原回来,备份/etc/apt/sources.list文件编辑sources.list源文件,但是给出的答案是使用gedit来操作,不过,我个人比较常用vi来进行编辑文件(不过,看个人的喜好)复制清华大学的镜像源,不过,在实际的生产,我个人比较倾向于阿里云的镜像源保存文件后,再使用apt-get update命令进行更新Ubuntu软件包列表,来获取最新的版本的软件包
更新完软件包列表后,继续进行安装python环境,因为现在都是使用python3的版本了,所以,建议使用python3的环境,安装完成后,使用python3 –version查看版本为3.8.0,表示python3的环境是安装成功了。另外,也更新安装一下pip的包管理工具的安装,最终也是安装成功了。
【新知识扩展】:
这里不得不学到一个新的知识,就是虚拟环境,按照理解,就相当于docker一样,会启动一个隔离项目依赖的轻量级环境,非常适合刚入门的开发者,避免环境的问题导致排错困难,弄坏了一个环境,再新建一个虚拟环境即可。
小提示:如果刚接触Python的同学,可以参考一下,Python相当于Node是一个开发语言的环境,而Pip相当于Npm是一个包的管理工具,可以通过pip来安装一些包。
2.5 AI项目智能调试工具 – Jupyter:
在以前跟朋友交流的时候,了解到python有一个Jupyter的在线调试工具,非常的方便,只需要装个软件,就能以web的方式进行访问,然后,可以在web页面进行调试工具,而不需要每个人登录到命令控制台,这样可以减少服务器登录的次数,并且提高了安全的风险,接下来,就让我来使用“Baidu Comate智能编码助手”来了解并使用Jupyter。
Jupyter是一个开源的、基于Web的交互式计算环境,它允许用户创建和共享包含实时代码、数学方程、可视化和文本的文档。Jupyter最知名的组件是Jupyter Notebook,它是一个允许用户编写、运行和分享包含实时代码、方程、可视化和文本的交互式笔记本的Web应用程序。
Jupyter是一个功能强大、易于使用的交互式编程环境,它非常适合数据科学家、研究人员和教育工作者等人群使用。
2.5.1 安装Jupyter:
安装Jupyter Notebook通常很简单,用户可以通过Python的包管理器pip来安装。不过,在安装过程中可能会遇到一些常见问题,如网络连接问题或版本兼容性问题等。为了解决这些问题,用户可以尝试使用国内的镜像源来加速下载,或者更新pip到最新版本。
使用“pip3 install jupyter”命令后,等待几分钟后,提示报错:“pip install jupyter时,提示HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.”,网络超时了,使用Comate搜索的答案,给了7种方案,可以根据自己的情况来逐一排查,在我这里我觉得第2个方案是最适合的方案。
pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple -vv
前面3个步骤,因为在上面安装Python3环境时,已经更新过软件包列表和安装过Pip3了,这里可以直接省略不需要再次重复安装一遍,在安装Jupyter时,使用“pip3 install jupyter”时,发生了报错Timeout超时的情况,我们可以看到上面通过后面加镜像源解决了这个问题。
当然,这里其实还是推荐上次“Baidu Comate智能编码助手”提到的python3虚拟环境,这样可以隔离安装的环境依赖。
三、“Comate”最佳实践方案 – 基于“MobileNet”的模型的训练:
上面通过“Baidu Comate智能编码助手”,从开发板子的组装到开机、再到安装环境,已经基本上具备了项目的开发,接下来,再接再厉,让“Baidu Comate智能编码助手”继续给我们生成基于“MobileNet”的模型的训练模型。
为了在香橙派的开发板子上,先体验一下图像识别的项目,让“Baidu Comate智能编码助手”帮我们推荐一款适合香橙派Python的垃圾识别图像分类的模型,可以看到推荐了一个“MobileNet”的模型,通过“数据准备”、“模型训练”、“模型部署”和“图像分类”4个大块,可以完成一个垃圾识别系统的开发。
顺藤摸瓜,上面“Baidu Comate智能编码助手”推荐了一个适合嵌入式设备loT设备使用模型 – “MobileNet”模型,通过上下文有效的结合后,帮我生成一个“MobileNet”模型垃圾分类的项目,大概分为5个步骤来实现:“数据准备” -> “数据预处理” -> “模型搭建” -> “模型训练” -> “模型测试”。
同时,“Baidu Comate智能编码助手”也给了一些注意事项与建议,就是在垃圾图片识别中需要图片样本数量最好都一样,而且图片的质量也要比较高,否则容易受到光照、遮挡、角度等多种因素的影响,从而导致模型识别准备率下降。
上面通过“Baidu Comate智能编码助手”生成的《基于MobileNetv2的垃圾分类》的代码,可以看到生成的代码是根据上下文环境来关联的,将代码复制到JupyterLab中执行,发现报错:
ModuleNotFoundError: No module named 'torchvision'
提示’torchvision’模块没有找到,通过“Baidu Comate智能编码助手”的分析是开发板中的Python环境中没有安装torchvision这个模块。
torchvision是PyTorch的一个扩展库,它提供了很多用于计算机视觉的常用数据集、模型架构和图像转换工具。
解决方案:可以通过Python的包管理工具pip来安装torchvision模块,安装成功后,会显示“Successfully installed torchvision-0.19.0”,表示安装成功了。
pip install torchvision
安装模块后,再将生成的代码,复制到Cell中,再进行执行,发现提示“NameError: name ‘train_dataset’ is not defined”,这个问题还是比较简单的,就是说明变量或名字没有被定义,可以自行解决,不需要进行AI询问了。
将修改的代码,再复制到Cell中,再次执行,会提示“FileNotFoundError: [Errno 2] No such file or directory: ‘path_to_train’”,如上,这个提示也是比较简单的,就是找不到对应的文件与目录,此时,需要去找一下需要的数据集,包括2个部分:
需要训练的数据集需要测试的数据集
从“Baidu Comate智能编码助手”中,找了不少的方案也没有提供相关的现成的数据集(垃圾图片相关的),没有办法,只能通过在网上和群里询问大家,最后得到了一个公开的垃圾分类相关主题的数据集,里面包含训练和测试的数据集,一共有25个分类的样本图片。
将这些图片直接拖动到JupyterLab中即可上传到开发板中,还是比较方便的,否则只能靠FTP的工具来进行上传了,顺便将以下代码修改为对应正确的路径:
# 假设你已经有了train_dataset和test_dataset
train_dataset = datasets.ImageFolder(root='/home/xxx/data_en/train', transform=transform)
test_dataset = datasets.ImageFolder(root='/home/xxx/data_en/test', transform=transform)
将修改的代码,再复制到Cell中,再次执行,发现又报错了“参数从0.13开始就被弃用,将来可能会被删除。请使用关键字参数”,从英文的警告说明来看,是在0.13版本已经移除了属性,可以使用其它关键字参数来代替。
warnings.warn(
f"Using {sequence_to_str(tuple(keyword_only_kwargs.keys()), separate_last='and ')} as positional "
f"parameter(s) is deprecated since 0.13 and may be removed in the future. Please use keyword parameter(s) "
f"instead."
)
kwargs.update(keyword_only_kwargs)
同样,将错误直接复制到“Baidu Comate智能编码助手”中搜索,可以自动分析错误的原因,并且给出了解决方案“注意到了pretrained参数已经被弃用,并且应该使用weights参数来替代”,然后,通过上下文的环境关系,自动生成修复代码,这个功能非常强大。
此外,你的数据加载和模型训练部分看起来是合理的,但请确保你的数据路径和文件结构是正确的,以便 ImageFolder 可以正确加载数据。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。