[经验分享] 基于vision板子并在OpenMV工程基础上进行多模态机器人的测试和开发

ly87802541   2024-9-19 12:30 楼主
 
 
 
经过对rtthread社区的官方文档学习后,发现目前vision板子上openmv工程已经很完善,甚至可以WiFi图传。
这对我的方案实现很有帮助,可以极大加快开发的速度和效率。按照教程描述,打开了mjpeg_streamer.py这个WiFi的例程,就很顺畅的跑起来了。
wd_122633bmvgvdpvejed5em7.png
当然上图所示的结果,也是需要按照教程中说的,修改了自己相应的WiFi联网热点名字和密码才能正确运行。之后就是在另一台Linux服务器上去连接同一个WiFi-AP路由器,vision板子必须和服务器互相ping通,才能打开浏览器访问WiFi图传的mjpeg流。
wd_122633gxeefe9cluchrelc.jpg
从上图可以看到,虽然因为操作不太方便造成的截图有点模糊,但是在另一台Linux服务器上浏览器已经正确的获取了mjpeg流。
到这里就很容易了,接下来的流程就是在服务器上处理WiFi图传流中的某一帧图片,截图保存后并把这张图片进行token化,准备作为多模态大模型vllm的query,传送给vllm然后获取到它的answer。
接下来,我尝试了几个ollama中的本机运行的多模态大模型vllm,例如llava-phi3/bakllava/llava-llama3等等。
wd_122633ztfck15me78fk5bl.jpg
wd_122633iuhz2haa26y8g886.jpg
wd_122633w2wq8omyrmjwtw8v.jpg
运行测试结果都不如人意,主要是这台Linux服务器作为我自己用的测试服,只是开发和测试环境里用的,算力性能和内存资源等等都比较受限制,推理时间特别长。所以我干脆把图片传给了云端的Qwen2-vl多模态大模型,下面来看看它的答案answer情况(主要想看下它是如何开始胡说八道的哈哈(不是))。
首先我把获取到jmpeg流中的截取出来一个整体的截屏图片,如下所示。
wd_122633qwwanceiddhih4ec.jpg
然后我的prompt为------Q:请描述一下图片中的大概内容,从Qwen2-VL得到的答案如下所示。
A:图中是一个网页,地址栏写着192.168.2.103:8080,下面显示的是一段代码,代码内容如下:
wd_122633kefaxv3swsxlxx2l.png
wd_122633xnkekenn7erz77iy.png
这是一段Python代码,使用了picamera和HTTPServer库,实现了启动一个web服务,端口8080,可以实现实时显示Raspberry Pi的摄像头画面(你看看哈哈)。
这是不是已经接近了一本正经的胡说八道呢?代码部分完全是它自己生产。
然后我把这个整体图片再做一次中心截取,上传给它。
wd_122634z4sa3a950kk4rhqq.jpg
这次我的prompt为------Q:这个图片里面是什么呢?从Qwen2-VL得到的答案如下所示。
A:这张图片显示的是一段计算机代码,看起来像是Python语言编写的。虽然图片有些模糊,但我可以尝试解读一下其中的部分内容。代码似乎与网络通信有关,包括导入了一些库,比如os、sys、time、picamera以及两个HTTP相关的库。此外,还定义了一个CameraServer类,继承自SimpleHTTPRequestHandler,处理GET请求。这个类有两个方法do_GET,分别对应于不同的路径。一个是根路径'/',另一个是'/stream.jpg'。根路径返回一个HTML页面,该页面包含一个指向'stream.jpg'的图片元素。而'/stream.jpg'路径则返回一个JPEG图片。整个程序看起来像是一个简易的HTTP服务器,用于提供实时的图片流服务。
那这一次的答案就还是算比较靠谱了,而且它并没有自己胡编乱造,要给Qwen2-VL多模态大模型点赞!
最后呢作为比对基准,当然我们是用直接截屏的方式,获取了omv-ide中的图片上传的。
wd_122634kj3cayezcwg2yw2t.png
这次我的prompt为------Q:这个图片里面是什么东西呢?从Qwen2-VL得到的答案如下所示。
A::图中是OpenMV IDE的界面,左侧是代码编辑区,右侧是图像预览区。代码是用python语言编写的,主要功能是通过WiFi传输视频流。
具体来说:
第23行到第30行是初始化摄像头模块并设置分辨率;
第31行到第40行是连接WiFi;
第41行到第57行是创建服务器套接字并开始发送视频流;
最后一行是串口输出的数据。
代码的具体含义如下:
wd_122634zxwcacie3qo3asqe.png
wd_122634l3m33ujhyytrwwoy.png
这段代码用于将OpenMV Cam连接到指定的Wi-Fi网络,并通过HTTP协议将压缩后的JPEG图像流发送到主机。首先初始化摄像头传感器和WLAN模块,然后尝试连接到指定的Wi-Fi网络。一旦成功连接,就创建一个TCP/IP套接字并监听端口8080上的连接请求。当有客户端连接时,就开始发送压缩后的JPEG图像流。最后关闭连接。
可以看出来,这次才是最靠谱的答案状态,并且根据实际的omv-mpy源码进行解释。
PS:通过上述的操作流程和编码实现等等,我们已经完成了实测vision板子的多模态对话聊天全流程。并且做了三项对比,由此我们可以熟知当前多模态大模型在具身智能机器人应用场景里的局限性,当然也包含了先进性。
 
最后,尚未未实现的流程也有,例如扩展iis接口的Dmic硅麦,或者USB接口的mic采集语音音频,再用其他支持音视频交互的多模态大模型进行对话聊天的chatbot流程等。
 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复