目录
模型文件下载
这里用到了mobilenet-ssd_openvino_2021.4_6shave.blob模型文件,mobilenet-ssd_openvino_2021.4_6shave.blob
是一个已经训练好的模型文件,用于目标检测任务。该模型一共可以检测21种目标类型。包括:“background”, “aeroplane”, “bicycle”, “bird”, “boat”, “bottle”, “bus”, “car”, “cat”, “chair”, “cow”, “diningtable”, “dog”, “horse”, “motorbike”, “person”, “pottedplant”, “sheep”, “sofa”, “train”, “tvmonitor”。
可以从这个网站下载该文件:oak_models - Browse Files at SourceForge.net
在项目根目录下新建models文件夹,将上面下载的文件拷贝到models文件夹
代码实现
Setup 1: 创建文件
- 创建新建12-mono-mobilenetSSD-depth文件夹
- 用vscode打开该文件夹
- 新建一个main.py 文件
Setup 2: 安装依赖
安装依赖前需要先创建和激活虚拟环境,我这里已经创建了虚拟环境OAKenv,在终端中输入cd…退回到OAKenv的根目录,输入 OAKenv\Scripts\activate
激活虚拟环境
安装pip依赖项:
pip install numpy opencv-python depthai blobconverter --user
Setup 3: 导入需要的包
在main.py中导入项目需要的包
from pathlib import Path
import sys
import cv2
import depthai as dai
import numpy as np
pathlib
用于处理文件路径,sys
用于系统相关的操作,cv2
是OpenCV库用于图像处理,depthai
是depthai库用于深度计算和AI推理。
Setup 4:定义和加载模型相关的路径和标签
nnPath = str((Path(__file__).parent / Path('../models/mobilenet-ssd_openvino_2021.4_6shave.blob')).resolve().absolute())
if len(sys.argv) > 1:
nnPath = sys.argv[1]
if not Path(nnPath).exists():
import sys
raise FileNotFoundError(f'Required file/s not found, please run "{sys.executable} install_requirements.py"')
labelMap = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow","diningtable", "dog", "horse", "motorbike", "person","pottedplant", "sheep", "sofa", "train", "tvmonitor"]
-
使用
Path(__file__).parent
获取当前脚本的父目录,然后使用Path('../models/mobilenet-ssd_openvino_2021.4_6shave.blob')
拼接上模型文件的相对路径,再使用resolve().absolute()
将相对路径解析为绝对路径,并将结果转换为字符串类型。最终,得到了模型文件的完整路径并赋值给变量nnPath
。 -
检查命令行参数(
sys.argv
)的数量,如果大于1(即有额外的命令行参数)则将第一个参数赋值给nnPath
。这样可以在运行代码时通过命令行参数指定模型文件的路径。 -
使用
Path(nnPath).exists()
检查模型文件是否存在,如果不存在则引发FileNotFoundError
异常,同时提供错误消息指示缺少的文件。 -
定义一个标签列表
labelMap
,其中包含了模型预测的类别名称。共包含了21个类别
Setup 5: 创建pipeline
pipeline = dai.Pipeline()
Setup 6: 创建节点
monoRight = pipeline.createMonoCamera()
monoLeft = pipeline.createMonoCamera()
stereo