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等 深刻,主要是自己觉得没啥进展,感觉荒废时日(丢脸啊,这么久....)开始开文,即为记录自 ...
随机推荐
- 记录启用HTTPS的全过程
因为 https 采用 ssl 加密,所以部署 https 时需要申请证书,证书的作用就是对浏览器和Web服务器双方的身份验证. 步骤1:申请证书 我们采用Let's Encrypt签发的免费证书,虽 ...
- 在Mac系统下使用自己安装的PHP
今天在安装单元测试框架PHPUnit,需要PHP的最低版本是5.6,由于我的MacBook自带的PHP版本是5.5.36,不能满足安装条件. 看了一下这个网址:https://php-osx.liip ...
- linux 将大文件分解为多个小文件
使用的命令为: split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo_ 其中 --bytes 为小文件的大小, --suffi ...
- mysql 异常宕机 ..InnoDB: Database page corruption on disk or a failed,,InnoDB: file read of page 8.
mysql 测试环境异常宕机 系统:\nKylin 3.3 mysql版本:5.6.15--yum安装,麒麟提供的yum源数据库版本 error日志 181218 09:38:52 mysqld_sa ...
- .Net 之Tuple 类
Tuple是什么 按照Msdn 上说:提供用于创造元组对象的静态方法.从字面意思并不能理解他的作用: Tuple 是个静态类,提供8个静态泛型方法:T 可以是值类型,也可是引用类型: 使用场景 ...
- 开发环境入门 linux基础 (部分)网络 SSH 更名 DNS解析 元字符
nginx---> web ifconfig 查看网络配置信息 id add show 查看当前网卡信息(最小安装下) mtu 是指网卡传输的最大单元 单位:字节 网卡配置 临时配置 ifcon ...
- 11-24网页基础--Js框架及学习思路
第一部分 基本语法: 1.数据类型(字符串.小数.整数.布尔.时间日期)var s="3.14" var n=parsefloat(s) s+=5;var s="abc3 ...
- C语言学习笔记--多维数组和多维指针
1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 重置动态空间的大小 #includ ...
- DAY12-前端之CSS
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...
- sql编写注意
DROP TABLE IF EXISTS `imooc_pro`; CREATE TABLE `imooc_pro`( `id` int unsigned auto_increment key, `p ...