OpenCV图像处理——DNN模块

38 篇文章 15 订阅
29 篇文章 6 订阅

总目录

图像处理总目录←点击这里

二十三、DNN模块

23.1、背景

随着计算机视觉的流行,opencv 也专门开发了 dnn 模块来实现 深度神经网络相关 的功能;

  • opencv 无法训练模型,但它支持载入其他深度学习框架训练好的模型,并使用该模型进行预测 inference;

  • opencv 在载入模型时会使用 dnn 模块对模型进行重写,使得模型运行效率更高;

支持的深度学习框架:tensorflow、pytorch、caffe、DLDT、Darknet

  • 本文采用 caffe ------ cv2.dnn.readNetFromCaffe()
    在这里插入图片描述

23.2、实现

utils_paths.py 读取图像数据

bolb_from_images.py 主函数

导入工具包

# 导入工具包
import utils_paths
import numpy as np
import cv2

预处理

# 标签文件处理
rows = open("synset_words.txt").read().strip().split("\n")
classes = [r[r.find(" ") + 1:].split(",")[0] for r in rows]

# Caffe所需配置文件
net = cv2.dnn.readNetFromCaffe("bvlc_googlenet.prototxt", "bvlc_googlenet.caffemodel")

# 图像路径
imagePaths = sorted(list(utils_paths.list_images("images/")))

单个图像

cv2.dnn.blobFromImage()

# 图像数据预处理
image = cv2.imread(imagePaths[0])
resized = cv2.resize(image, (224, 224))
# image scalefactor size mean swapRB 
blob = cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123))
print("First Blob: {}".format(blob.shape))

# 得到预测结果
net.setInput(blob)
preds = net.forward()

# 排序,取分类可能性最大的
idx = np.argsort(preds[0])[::-1][0]
text = "Label: {}, {:.2f}%".format(classes[idx], preds[0][idx] * 100)
cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

# 显示
cv2.imshow("Image", image)
cv2.waitKey(0)

在这里插入图片描述

多个图像

注意有s cv2.dnn.blobFromImages()

# Batch数据制作
images = []

# 方法一样,数据是一个batch
for p in imagePaths[1:]:
	image = cv2.imread(p)
	image = cv2.resize(image, (224, 224))
	images.append(image)

# blobFromImages函数,注意有s
blob = cv2.dnn.blobFromImages(images, 1, (224, 224), (104, 117, 123))
print("Second Blob: {}".format(blob.shape))

# 获取预测结果
net.setInput(blob)
preds = net.forward()
for (i, p) in enumerate(imagePaths):
	image = cv2.imread(p)
	idx = np.argsort(preds[i])[::-1][0]
	text = "Label: {}, {:.2f}%".format(classes[idx], preds[i][idx] * 100)
	cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
	cv2.imshow("Image", image)
	cv2.waitKey(0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

23.3、源码

https://github.com/lzh66666/dnn_blob

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
重新编译OpenCV并选择安装dnn模块的步骤如下: 1. 下载OpenCV源代码:从OpenCV官方网站(https://opencv.org/)下载OpenCV源代码。 2. 安装依赖项:安装OpenCV编译所需的依赖项。可以使用以下命令安装Ubuntu系统所需的依赖项: ``` sudo apt-get update sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ gfortran openexr libatlas-base-dev python3-dev python3-numpy \ libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ``` 3. 创建编译目录:在OpenCV源代码目录外创建一个目录,用于编译OpenCV。 ``` mkdir build cd build ``` 4. 配置OpenCV编译:使用CMake配置OpenCV编译。以下是一个示例CMake配置命令: ``` cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON \ -D ENABLE_NEON=ON \ -D WITH_LIBV4L=ON \ -D WITH_OPENGL=ON \ -D ENABLE_FAST_MATH=ON \ -D WITH_CUBLAS=ON \ -D WITH_TBB=ON \ -D WITH_OPENCL=ON .. ``` 在上面的命令中,我们启用了dnn模块,并将其它一些选项设置为了编译OpenCV所需的值。 5. 编译OpenCV:使用以下命令编译OpenCV: ``` make -j4 ``` 在这个例子中,我们使用了-j4参数来指定使用4个线程来加快编译速度。 6. 安装OpenCV:使用以下命令安装OpenCV: ``` sudo make install ``` 现在,您已经重新编译了OpenCV,并选择安装了dnn模块。你可以使用OpenCVdnn模块来进行深度学习任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzh~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值