一、前言:
最近公司有一个项目需求需要使用到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”构建私有库可以加快对文档的搜索,更好的帮助我们检索想要的答案,而且可以通过不断的更新文件来弥补垂直领域的空缺,将开发板从组装、烧录、开机等阶段的辅助,当然,其中,也会存在一些问题,只有一些文案的描述,如果里面能生成图片就更好了。
上面通过“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 可以正确加载数据。