本文将展示如何通过直接在您的网络摄像头视频流上运行预先训练的对象检测模型。
NOTE:
- 本教程仅在MacOS环境中测试过
- 需要的Python包:cv2,matplotlib
- 你需要一个摄像头:)
- 与matplotlib渲染兼容的Python,作为框架安装在MacOS中,请参阅此处的指南
加载模型和网络摄像头
准备好了吗?我们开始吧!首先,将必要的库导入python。
import time
import gluoncv as gcv
from gluoncv.utils import try_import_cv2
cv2 = try_import_cv2()
import mxnet as mx
在本教程中,我们使用ssd_512_mobilenet1.0_voc,这是一个快速的网络,具有良好的精度,在大多数笔记本电脑上应该远远高于每秒1帧。欢迎尝试一个不同的模式,从 Gluon Model Zoo!
# Load the model
net = gcv.model_zoo.get_model('ssd_512_mobilenet1.0_voc', pretrained=True)
# Compile the model for faster speed
net.hybridize()
我们在opencv中创建网络摄像头处理程序,以便能够获取帧:
# Load the webcam handler
cap = cv2.VideoCapture(0)
time.sleep(1) ### letting the camera autofocus
检测回路
检测回路由四个阶段组成:
- 加载网络摄像头帧
- 图像预处理
- 通过网络运行映像
- 用预测结果更新输出
axes = None
NUM_FRAMES = 200 # you can change this
for i in range(NUM_FRAMES):
# Load frame from the camera
ret, frame = cap.read()
# Image pre-processing
frame = mx.nd.array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).astype('uint8')
rgb_nd, frame = gcv.data.transforms.presets.ssd.transform_test(frame, short=512, max_size=700)
# Run frame through network
class_IDs, scores, bounding_boxes = net(rgb_nd)
# Display the result
img = gcv.utils.viz.cv_plot_bbox(frame, bounding_boxes[0], scores[0], class_IDs[0], class_names=net.classes)
gcv.utils.viz.cv_plot_image(img)
cv2.waitKey(1)
我们在退出脚本之前释放网络摄像头
cap.release()
cv2.destroyAllWindows()
结果
下载脚本以运行演示:
在MacOS上使用pythonw运行脚本:
pythonw demo_webcam_run.py --num-frames 200
NOTE:在MacOS上,要启用matplotlib渲染,需要将python作为框架安装,请参见此处的指南
如果一切顺利,您应该能够从VOC数据集的可用类中检测对象。包括人、椅子和电视屏幕!
脚本的总运行时间:(0分0.000秒)
下载Jupyter notebook: demo_webcam.ipynb
原文链接:https://gluon-cv.mxnet.io/build/examples_detection/demo_webcam.html