Sipeed矽速科技
直播中

裸奔小耗子

6年用户 67经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注

【Longan Pi 3H 开发板试用连载体验】给ChatGPT装上眼睛,并且还可以语音对话:7,图像采集与物体识别

图像采集与物体识别

上一篇中完成了所有音频相关的输入输出,先在要开始尝试视频的相关操作了。我们可以利用手机上的摄像头,将其变成一个网络摄像头,然后再在Longan Pi上获取图像,就可以完成图像的采集。

首先先在手机上下载相关app,android手机的话,去应用商城搜索IP Webcam,如果没有的话,我也把apk放在附件中,大家直接下载就可以。
*附件:ip-webcam-1-17-15-868-multiarch.rar

将手机连接到与Longan Pi相同的路由器下,然后打开软件,点击下图位置开启服务:

IMG_20240417_130844.jpg

服务开启后,就可以看到连接地址:

Screenshot_2024-04-17-13-09-34-124_com.pas.webcam.jpg

按照一般情况,这里使用opencv来获取视频流就可以很好的实现想要的效果。但实际测试下来,由于每次运行图像识别耗时非常长,导致取的图片都是缓存中的图片,而不是最新拍摄的图片,查询了很多方法都无法解决,因此最后选择另外一种方式,先从摄像头的web管理界面得到拍照的jpeg地址,然后使用request get方法请求照片,这样可以确保每次获得的图像都是最新图像。

使用浏览器通过手机上的链接进入后,我们可以看到下面有个照相的按钮,通过这个链接的地址,我们就可以得到从python中获取最新图像的地址。

image.png

from PIL import Image
import requests
import io

img_raw = requests.get("http://192.168.199.143:8080/photoaf.jpg").content
img = Image.open(io.BytesIO(img_raw))

通过以上代码,就可以得到所需的图像,接着使用我们一开始就部署好的YoloV8来进行图像识别,并把识别出的物品存到一个列表变量中:

from ultralytics import YOLO

model = YOLO('yolov8n.pt')

results = model.predict(source=img, stream=True, save=True)
for result in results:
    detections = []
    for box in result.boxes:
        class_id = result.names[box.cls[0].item()]
        cords = box.xyxy[0].tolist()
        cords = [round(x) for x in cords]
        confi = round(box.conf[0].item(), 2)
        print("Object type:", class_id)
        print("Coordinates:", cords)
        print("Probability:", confi)
        print("---")
        detections.append({"name" : class_id, "cords" : cords, "conf" : confi})

将手机对准想要识别的场景,尝试运行一下,如果能看到如下输出,说明一切工作正常。

image.png

跟随输出的地址,可以找到识别后的图片:

image.png

更多回帖

发帖
×
20
完善资料,
赚取积分