[OpenCV] Install OpenCV 3.3 with DNN
OpenCV 3.3
Aug 3, 2017OpenCV 3.3 has been released with greatly improved Deep Learning module and lots of optimizations.Adrian Rosebrock: http://www.pyimagesearch.com/author/adrian/ [nice]
Ref: Real-time object detection with deep learning and OpenCV
Thus, tracking is essential.
Multiple-thread is another consideration: Efficient, threaded video streams with OpenCV
The following networks have been tested and known to work:
- AlexNet
- GoogLeNet v1 (also referred to as Inception-5h)
- ResNet-34/50/...
- SqueezeNet v1.1
- VGG-based FCN (semantical segmentation network)
- ENet (lightweight semantical segmentation network)
- VGG-based SSD (object detection network)
- MobileNet-based SSD (light-weight object detection network)
下面是我们将用到的一些函数。
在dnn中从磁盘加载图片:
- cv2.dnn.blobFromImage
- cv2.dnn.blobFromImages
用“create”方法直接从各种框架中导出模型:
- cv2.dnn.createCaffeImporter
- cv2.dnn.createTensorFlowImporter
- cv2.dnn.createTorchImporter
使用“读取”方法从磁盘直接加载序列化模型:
- cv2.dnn.readNetFromCaffe
- cv2.dnn.readNetFromTensorFlow
- cv2.dnn.readNetFromTorch
- cv2.dnn.readhTorchBlob
从磁盘加载完模型之后,可以用.forward方法来向前传播我们的图像,获取分类结果。
看样子就是好东西,那么,一起来安装:Installing OpenCV 3.3.0 on Ubuntu 16.04 LTS
You may meet the trouble in conflicting with python in anaconda3. Solve it as following:
lolo@lolo-UX303UB$ mv /usr/bin/python3
python3 python3.-config python3.4m-config python3m
python3. python3.4m python3-config python3m-config lolo: Move them away.
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/anaconda3 \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=/home/unsw/Android/opencv-3.3./opencv_contrib-3.3./modules \
-D PYTHON_EXECUTABLE=/usr/local/anaconda3/bin/python3. \
-D BUILD_EXAMPLES=ON ..
Done :-)
Installing ref:
http://www.linuxfromscratch.org/blfs/view/cvs/general/opencv.html
https://medium.com/@debugvn/installing-opencv-3-3-0-on-ubuntu-16-04-lts-7db376f93961
Now, you have got everything. Let's practice.
From: http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/
In the first part of today’s post on object detection using deep learning we’ll discuss Single Shot Detectors and MobileNets.
SSD Paper: http://lib.csdn.net/article/deeplearning/53059
SSD Paper: https://arxiv.org/abs/1512.02325 [Origin]
When it comes to deep learning-based object detection there are three primary object detection methods that you’ll likely encounter:
- Faster R-CNNs (Girshick et al., 2015) 7 FPS
- You Only Look Once (YOLO) (Redmon and Farhadi, 2015) 155 FPS.
- Single Shot Detectors (SSDs) (Liu et al., 2015)
If we combine both the MobileNet architecture and the Single Shot Detector (SSD) framework, we arrive at a fast, efficient deep learning-based method to object detection.
The model we’ll be using in this blog post is a Caffe versionof the original TensorFlow implementation by Howard et al. and was trained by chuanqi305 (see GitHub).
In this section we will use the MobileNet SSD + deep neural network ( dnn ) module in OpenCV to build our object detector.
Code analysis:
# USAGE
# python deep_learning_object_detection.py --image images/example_01.jpg \
# --prototxt MobileNetSSD_deploy.prototxt.txt --model MobileNetSSD_deploy.caffemodel # import the necessary packages
import numpy as np
import argparse
import cv2 # construct the argument parse and parse the arguments
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()) # initialize the list of class labels MobileNet SSD was trained to
# detect, then generate a set of bounding box colors for each class
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)) # load our serialized model from disk
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"]) # load the input image and construct an input blob for the image
# by resizing to a fixed 300x300 pixels and then normalizing it
# (note: normalization is done via the authors of the MobileNet SSD
# implementation)
image = cv2.imread(args["image"])
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 0.007843, (300, 300), 127.5) # --> NCHW # pass the blob through the network and obtain the detections and
# predictions
print("[INFO] computing object detections...")
net.setInput(blob)
detections = net.forward() # --> net.forward
# loop over the detections
for i in np.arange(0, detections.shape[2]):
# extract the confidence (i.e., probability) associated with the
# prediction
confidence = detections[0, 0, i, 2] # filter out weak detections by ensuring the `confidence` is
# greater than the minimum confidence
if confidence > args["confidence"]:
# extract the index of the class label from the `detections`,
# then compute the (x, y)-coordinates of the bounding box for
# the object
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") # display the prediction
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) # show the output image
cv2.imshow("Output", image)
cv2.waitKey(0)
NCHW
There is a comment that explains this, but in a different source file, ConvolutionalNodes.h, pasted below.
Note that the NVidia abbreviations refer to row-major layout, so to map them to column-major tensor indices are used by CNTK, you will need to reverse their order. E.g. cudnn stores images in “NCHW,” which is a [W x H x C x N] tensor in CNTK notation (W being the fastest-changing dimension; and there are N objects of dimension [W x H x C] concatenated).
Note that the “legacy” (non-cuDNN) memory layout is old code written before NCHW became the standard, so we are likely phasing out the old representation eventually.
net.forward
[INFO] loading model...
[INFO] computing object detections...
(1, 1, 2, 7)
[[[[ 0. 12. 0.95878285 0.49966827 0.6235761 0.69597626 0.87614471]
[ 0. 15. 0.99952459 0.04266162 0.20033446 0.45632178 0.84977102]]]]
[INFO] dog: 95.88%
[INFO] person: 99.95%
[OpenCV] Install OpenCV 3.3 with DNN的更多相关文章
- [OpenCV] Install OpenCV 3.4 with DNN
目标定位 一.开始全面支持 Tensorflow OpenCV3.4 新功能 当前最新进展OpenCV 3.4 dev:https://github.com/opencv/opencv/tree/ma ...
- [OpenCV] Install openCV in Qt Creator
Learn openCV.pdf qmake: link with opencv (Key Point) QT += core gui greaterThan(QT_MAJOR_VERSION, 4) ...
- Install OpenCV 3.0 and Python 2.7+ on OSX
http://www.pyimagesearch.com/2015/06/15/install-OpenCV-3-0-and-Python-2-7-on-osx/ As I mentioned las ...
- Install OpenCV 3.0 and Python 2.7+ on Ubuntu
为了防止原文消失或者被墙,转载留个底,最好还是去看原贴,因为随着版本变化,原贴是有人维护升级的 http://www.pyimagesearch.com/2015/06/22/install-Open ...
- $ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略
博主之前写过一篇文章<html5与EmguCV前后端实现——人脸识别篇>,叙述的是opencv和C#的故事.最近在公司服务器上更新了一套nodejs环境,早就听闻npm上有opencv模块 ...
- [OpenCV] How to install opencv by compiling source code
Introduction Install OpenCV and its dependence ! STEPs 1, compiler sudo apt-get install build-essent ...
- Install OpenCV on Ubuntu or Debian
http://milq.github.io/install-OpenCV-ubuntu-debian/转注:就用第一个方法吧,第二个方法的那个sh文件执行失败,因为我价格kurento.org的源,在 ...
- Install opencv on Centos
研究centos 有很长一段时间了,一直没有写过这方面的感觉,今天在看到网友的一篇文章时,结合亲身体会就下面安装opencv的一些步骤与大家共享. CentOS OpenCV已被广泛应用但是也在不断的 ...
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0 +VS 2013 开发环境配置
图片太多,具体过程参照: [OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 说下我这边的设置: 选择deb ...
随机推荐
- Java 数组元素倒序的三种方式
将数组元素反转有多种实现方式,这里介绍常见的三种. 直接数组元素对换 @Test public void testReverseSelf() throws Exception { System.out ...
- [原创]zabbix工具介绍,安装及使用
[原创]zabbix工具介绍,安装及使用 http://waringid.blog.51cto.com/65148/955939/
- Scala:Object-Oriented Meets Functional
Have the best of both worlds. Construct elegant class hierarchies for maximum code reuse and extensi ...
- App架构师实践指南四之性能优化一
App架构师实践指南四之性能优化一 1.性能维度常见用来衡量App性能的维度如图9-1所示.其中,性能指标包括电池(电量/温度).流量(上行流量/下行流量等).CPU(平均/最大/最小).内存 ...
- 你的项目真的需要Session吗? redis保存session性能怎么样?
在web开发中,Session这个东西一直都很重要,至少伴随我10年之久, 前一段时间发生一个性能问题,因为Redis session 问题,后来想想 其实我的项目session 是不需要的. 先看看 ...
- STM32 F103 F407 F429 F767对比图
- 防止UI界面被输入法遮挡(画面随输入法自适应)
应用过Android手机的朋友都知道,有时候在文本框中输入文字后,操作按钮被输入法遮挡了,不得不关闭输入法才可以继续操作. 比如下面这个画面: 画面布局: <?xmlversion=" ...
- 修改和查询sqlserver里面的xml 好像只能一个个改不能批量
select [ExtendFieldId], [Setting].value('(/UploadFileViewModel/UploadProviderKey)[1]', 'nvarchar(max ...
- Andriod书籍准备
老大说公司准备开发MFC项目,过了一段时间又说开发Andriod,好吧,我现在准备Andriod. 鬼知道过段时间会变成什么. http://pan.baidu.com/share/link?shar ...
- Golang——垃圾回收GC(2)
1 垃圾回收中的重要概念 1.1 定义 In computer science, garbage collection (GC) is a form of automatic memory manag ...