本文将引导快速使用 Detectron2 ,介绍用摄像头测试实时目标检测。

环境准备

基础环境

Detectron2

安装,

# 创建 Python 虚拟环境
conda create -n detectron2 python=3.8 -y
conda activate detectron2 # 安装 PyTorch with CUDA
conda install pytorch==1.7.1 torchvision==0.8.2 cudatoolkit=10.2 -c pytorch -y # 安装 Detectron2
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2 # 安装 OpenCV ,捕获相机图像及显示
pip install opencv-python

检查,

$ python - <<EOF
import torch, torchvision
print(torch.__version__, torch.cuda.is_available())
import cv2 as cv
print(cv.__version__)
EOF 1.7.1 True
4.5.1

现有模型进行推断

从其 model zoo 选择一个感兴趣的模型进行推断。这里以 COCO R50-FPN 3x 训练的各类模型进行演示。

下载 model 进如下路径,

detectron2/models/
├── COCO-Detection
│   └── faster_rcnn_R_50_FPN_3x
│   └── 137849458
│   ├── metrics.json
│   └── model_final_280758.pkl
├── COCO-InstanceSegmentation
│   └── mask_rcnn_R_50_FPN_3x
│   └── 137849600
│   ├── metrics.json
│   └── model_final_f10217.pkl
├── COCO-Keypoints
│   └── keypoint_rcnn_R_50_FPN_3x
│   └── 137849621
│   ├── metrics.json
│   └── model_final_a6e10b.pkl
└── COCO-PanopticSegmentation
└── panoptic_fpn_R_50_3x
└── 139514569
├── metrics.json
└── model_final_c10459.pkl

目标检测 - Faster R-CNN

执行,

cd detectron2/
mkdir -p _output python demo/demo.py \
--config-file configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml \
--input ../data/bicycle.jpg \
--output _output/bicycle_COCO-Detection.jpg \
--confidence-threshold 0.5 \
--opts MODEL.WEIGHTS models/COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl

结果,

实例分割 - Mask R-CNN

执行,

python demo/demo.py \
--config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \
--input ../data/bicycle.jpg \
--output _output/bicycle_COCO-InstanceSegmentation.jpg \
--confidence-threshold 0.5 \
--opts MODEL.WEIGHTS models/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl

结果,

姿态估计 - Keypoint R-CNN

执行,

python demo/demo.py \
--config-file configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml \
--input ../data/bicycle.jpg \
--output _output/bicycle_COCO-Keypoints.jpg \
--confidence-threshold 0.5 \
--opts MODEL.WEIGHTS models/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x/137849621/model_final_a6e10b.pkl

结果,

全景分割 - Panoptic FPN

执行,

python demo/demo.py \
--config-file configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml \
--input ../data/bicycle.jpg \
--output _output/bicycle_COCO-PanopticSegmentation.jpg \
--confidence-threshold 0.5 \
--opts MODEL.WEIGHTS models/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x/139514569/model_final_c10459.pkl

结果,

WebCam 摄像头使用

获取本机的 WebCam 列表,

$ ls /dev/video*
/dev/video0 /dev/video1 /dev/video2 /dev/video3 # 查看 WebCam 列表
# 如下:有 0, 2 两个 videos
# - 第一个是 video ,第二个是 metadata
# - 从 Linux Kernel 4.16 开始,增加的 metadata node
$ sudo apt install v4l-utils
$ v4l2-ctl --list-devices
HD Webcam: HD Webcam (usb-0000:00:14.0-13):
/dev/video0
/dev/video1 HD Pro Webcam C920 (usb-0000:00:14.0-4):
/dev/video2
/dev/video3 # 查看某 WebCam 支持的格式、分辨率、fps 信息
$ v4l2-ctl -d 2 --list-formats-ext

demo/demo.py 可修改期望打开的摄像头及其分辨率等,

elif args.webcam:
cam = cv2.VideoCapture(2)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cam.set(cv2.CAP_PROP_FPS, 30)
print(f"wencam: {cam.get(cv2.CAP_PROP_FRAME_WIDTH)}x{cam.get(cv2.CAP_PROP_FRAME_HEIGHT)} {cam.get(cv2.CAP_PROP_FPS)}")

运行,

python demo/demo.py \
--config-file configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml \
--webcam \
--confidence-threshold 0.5 \
--opts MODEL.WEIGHTS models/COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl

效果,

GoCoding 个人实践的经验分享,可关注公众号!

最新文章

  1. 关于 Direct2D
  2. 加载的过程中图片变形了? --教你自定义自动适配图片宽高比的RatioLayout
  3. Spring BeanUtils的用法
  4. sed初学
  5. android 屏幕截取,pull到pc端
  6. 取出ip address control的ip字符
  7. 用代码打开FORM里面用到的数据源
  8. openmp 并行求完数
  9. linux 线程函数大全
  10. bnuoj 27987 Record of the Attack at the Orbit (模拟)
  11. 【MongoDB数据库】怎样安装、配置MongoDB
  12. html image -- data:image/png;base64
  13. hdu_1392_Surround the Trees(凸包)
  14. Robot framework(RF) 用户关键字
  15. 可变卷积Deforable ConvNet 迁移训练自己的数据集 MXNet框架 GPU版
  16. 【转】.NET Framework、C#语言、IDE、CLR 版本历史及其差异
  17. SpringMVC + Mybatis 多数据源配置
  18. Java SPI机制和使用示例
  19. loadrunner--步长(Pacing)的设置及作用
  20. spring mvc 多数据源切换,不支持事务控制[一]

热门文章

  1. 【Alpha冲刺阶段】Scrum Meeting Daily1
  2. idea2020.2.x/2020.3.x最新破解版方法教程无限永久重置插件激活码
  3. 转:解释lsh
  4. 深入理解Java虚拟机(八)——类加载机制
  5. SQL Server NULL值用法及处理详解
  6. jenkins+ant+jmeter实现自动化集成(详解)
  7. Python 的 10 个开发技巧!太实用了
  8. 真香!Python十大常用文件操作,轻松办公
  9. 神奇的 SQL 之 HAVING → 容易被轻视的主角
  10. 如何将离线计算业务的成本降低65%——弹性容器服务EKS「竞价实例」上线