计算机视觉实战(十七)OpenCV的DNN模型 (附完整代码)

2020-01-15  本文已影响0人  小小何先生

  OpenCV加载深度学习模型:

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

我们也可以使用Tensorflow或者其他的读取方式:

# 导入工具包
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/")))

# 图像数据预处理
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)

# 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[1:]):
   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)
image image

  完整代码,后台回复 计算机视觉实战。还有一些啥目标检测和多目标追踪的代码都在里面。

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

上一篇下一篇

猜你喜欢

热点阅读