Object detection with deep learning and OpenCV
这篇文章只是基于OpenCV使用SSD算法执行目标检测;不涉及到SSD的理论原理、不涉及训练过程;也就是说仅仅使用训练好的模型文件基于OpenCV做测试;包括图片和视频;
只用作笔记,原教程地址:Object detection with deep learning and OpenCV
Single Shot Detectors for Object Detection
当提到基于深度学习的目标检测算法,大家都多多少少的听说过这三种算法:
- Faster R-CNNs (Girshick et al., 2015)
- You Only Look Once (YOLO) (Redmon and Farhadi, 2015)
- Single Shot Detectors (SSDs) (Liu et al., 2015)
当然了,现在已经是19年了,上面三种算法也已经更新换代了;那之所以还列举出来,想要表达的是这三类算法是相当good,...(完了,装不下去了....)
R-CNN系列检测算法,精确度高,速度慢;
YOLO系列检测算法,速度快,精确度有些欠缺;
SSD取了两者的优点吧。。。。
Deep learning-based object detection with OpenCV

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @Time : 19-4-24 下午3:52
# @Author : chen
"""
利用MobileNet SSD + OpenCV中的dnn执行目标检测
python deep_learning_object_detection_cz.py --image images/face_1.jpg \
--prototxt MobileNetSSD_deploy.prototxt.txt \
--model MobileNetSSD_deploy.caffemodel
"""
# 依赖包
import numpy as np
import argparse
import cv2
import time
import pdb
# 解析命令行参数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="path to input image")
ap.add_argument("-p", "--prototxt", required=True, help="path to Caffe 'deploy' prototxt file")
ap.add_argument("-m", "--model", required=True, help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.2, help="minimum probability to filter weak detections")
args = vars(ap.parse_args())
# 初始化类标签,然后为每一个类别设置一个颜色值
# 该颜色值是为了在图像中画出矩形框的时候使用
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
"sofa", "train", "tvmonitor"]
COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))
# 加载训练好的Caffe模型
# OpenCV的dnn方法中,可以加载由Caffe,TensorFLow,Darknet,Torch训练得到的模型文件的方法
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
# 加载测试图片,并转换成blob(OpenCV需要这样做)
image = cv2.imread(args["image"])
(h, w) = image.shape[:2]
# cv2.dnn.blobFromImage返回一个四维的blob
# 可以对image执行缩放,剪切,交换RB通道,减均值操作
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
# 输入到网络中,执行Inference
print("[INFO] computing object detections...")
net.setInput(blob)
start = time.time()
detections = net.forward()
end = time.time()
print("[INFO] SSD took {:6} seconds.".format(end - start))
# pdb.set_trace()
for i in range(detections.shape[2]):
# 类别概率
confidence = detections[0, 0, i, 2]
# 过滤掉confidence小于人为设定的阈值的detection
if confidence > args["confidence"]:
idx = int(detections[0, 0, i, 1]) # 类别索引
box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
(startX, startY, endX, endY) = box.astype("int") # SSD的输出直接就是框的左上角和右下角的点的坐标位置
# 在图片展示检测的object
label = "{}: {:.2f}%".format(CLASSES[idx], confidence*100)
print("[INFO] {}".format(label))
cv2.rectangle(image, (startX, startY), (endX, endY), COLORS[idx], 2)
y = startY -15 if startY - 15 > 15 else startY + 15
cv2.putText(image, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
# 显示
cv2.imshow("Object Detection", image)
cv2.waitKey(0)
cv2.imwrite("lab_2_ssd.jpg", image)
这样有没有用?????用处不大
还是需要看论文的。。。。。
Object detection with deep learning and OpenCV的更多相关文章
- 论文阅读之: Hierarchical Object Detection with Deep Reinforcement Learning
Hierarchical Object Detection with Deep Reinforcement Learning NIPS 2016 WorkShop Paper : https://a ...
- paper 159:文章解读:From Facial Parts Responses to Face Detection: A Deep Learning Approach--2015ICCV
文章链接:https://arxiv.org/pdf/1509.06451.pdf 1.关于人脸检测的一些小小总结(Face Detection by Literature) (1)Multi-vie ...
- 论文笔记之:From Facial Parts Responses to Face Detection: A Deep Learning Approach
From Facial Parts Responses to Face Detection: A Deep Learning Approach ICCV 2015 从以上两张图就可以感受到本文所提方法 ...
- 目标检测--Scalable Object Detection using Deep Neural Networks(CVPR 2014)
Scalable Object Detection using Deep Neural Networks 作者: Dumitru Erhan, Christian Szegedy, Alexander ...
- 课程四(Convolutional Neural Networks),第三 周(Object detection) —— 0.Learning Goals
Learning Goals: Understand the challenges of Object Localization, Object Detection and Landmark Find ...
- Scalable Object Detection using Deep Neural Networks译文
原文:https://arxiv.org/abs/1312.2249
- 论文学习-深度学习目标检测2014至201901综述-Deep Learning for Generic Object Detection A Survey
目录 写在前面 目标检测任务与挑战 目标检测方法汇总 基础子问题 基于DCNN的特征表示 主干网络(network backbone) Methods For Improving Object Rep ...
- YOLO object detection with OpenCV
Click here to download the source code to this post. In this tutorial, you’ll learn how to use the Y ...
- deep learning 的综述
从13年11月初开始接触DL,奈何boss忙or 各种问题,对DL理解没有CSDN大神 比如 zouxy09等 深刻,主要是自己觉得没啥进展,感觉荒废时日(丢脸啊,这么久....)开始开文,即为记录自 ...
随机推荐
- Xcode工具特性
1.注释 #pragma mark 注释说明#pragma mark - 分类/分组注释说明 2.自定义代码块. 3.多文本编辑框 View>>Assistant Editor
- Python:常用正则表达式(一)
文章转载于:http://www.cnblogs.com/Akeke/(博主:Akeke) https://www.cnblogs.com/Akeke/p/6649589.html (基于JavaSc ...
- ZOJ 4016 Mergeable Stack(栈的数组实现)
Mergeable Stack Time Limit: 2 Seconds Memory Limit: 65536 KB Given initially empty stacks, the ...
- 杂项:VS调试技巧之附加进程
ylbtech-杂项:VS调试技巧之附加进程 1. 摘录返回顶部 1. 用过VS一段时间的程序员们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动V ...
- 【转】ruby中nil?, empty? and blank?的选择
In Ruby, you check with nil? if an object is nil:article = nil article.nil? # => true empty? chec ...
- web页面导出到Excel乱码解决
引言: 前几天 在做web项目的时候 需要导出页面上的数据 到Excel里面 但有的时候出现乱码(有de时候不出现 很奇怪) 原来的代码是这样的: HttpContext.Current.Respon ...
- C语言在32位和64位机器下数字数据类型的字节数取决于编译器和平台, 主要由编译器决定。
C语言中数字数据类型的字节数 C声明 32位机器 64位机器 char 1 1 short int 2 2 int 4 4 //整型在32位和64位下都是4个字节 long int 4 8 l ...
- spring bean管理
轻量级,无侵入 Bean管理 1 创建applicationContext.xml 2 配置被管理的Bean 3 获取Bean pom.xml配置 <dependency> <gro ...
- python(时间模块,序列化模块等)
一.time模块 表示时间的三种方式: 时间戳:数字(计算机能认识的) 时间字符串:t='2012-12-12' 结构化时间:time.struct_time(tm_year=2017, tm_mon ...
- Windows10更新后无限重启
以安全模式进入系统,禁用或卸载显卡驱动. 重启后重新安装驱动.