上一篇中完成了所有音频相关的输入输出,先在要开始尝试视频的相关操作了。我们可以利用手机上的摄像头,将其变成一个网络摄像头,然后再在Longan Pi上获取图像,就可以完成图像的采集。
首先先在手机上下载相关app,android手机的话,去应用商城搜索IP Webcam
,如果没有的话,我也把apk放在附件中,大家直接下载就可以。
*附件:ip-webcam-1-17-15-868-multiarch.rar
将手机连接到与Longan Pi相同的路由器下,然后打开软件,点击下图位置开启服务:
服务开启后,就可以看到连接地址:
按照一般情况,这里使用opencv来获取视频流就可以很好的实现想要的效果。但实际测试下来,由于每次运行图像识别耗时非常长,导致取的图片都是缓存中的图片,而不是最新拍摄的图片,查询了很多方法都无法解决,因此最后选择另外一种方式,先从摄像头的web管理界面得到拍照的jpeg地址,然后使用request get方法请求照片,这样可以确保每次获得的图像都是最新图像。
使用浏览器通过手机上的链接进入后,我们可以看到下面有个照相的按钮,通过这个链接的地址,我们就可以得到从python中获取最新图像的地址。
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})
将手机对准想要识别的场景,尝试运行一下,如果能看到如下输出,说明一切工作正常。
跟随输出的地址,可以找到识别后的图片:
更多回帖