opencv 使用DNN进行物体分类

DNN 使用步骤

  • 读取模型,并得到深度神经网络
  • 读取图片、视频
  • 将图片转为张量,送入深度神经网络
  • 进行分析,并得到结果

导入模型

  • readNetFromTensorflow(model,config)
  • readNetFromCaffe(model,config)
  • readNetDarknet, YOLO(model,config)
  • readNet()model,[config,[framework]])

将图片转为张量

  • blobFromImage函数
  • blobFromImage(image,scalefactor=1.0//缩放因子,size=Size(), mean=Scalar(), swapRB=false,crop=false…)

opencv 使用DNN进行物体分类_第1张图片

将张量送入网络并执行

  • net.setInput(blob)
  • net.forward()

点击下面的链接下载模型及附件
bvlc_googlenet.caffemodel
bvlc_googlenet.prototxt
synset_words.txt

import cv2 as cv
import numpy as np
from cv2 import dnn

'''
- 读取模型,并得到深度神经网络
- 读取图片、视频
- 将图片转为张量,送入深度神经网络
- 进行分析,并得到结果
'''


# 导入模型,创建神经网络
config = r'H:\opencv_extra-master\testdata\dnn\bvlc_googlenet.prototxt'
model = r'H:\opencv_extra-master\testdata\dnn\bvlc_googlenet.caffemodel'
net = dnn.readNetFromCaffe(config, model)
# 读取图片,转换张量
img = cv.imread('./dog.jpeg')

blob = dnn.blobFromImage(img, 1.0, (224, 224), (104, 117, 123))
net.setInput(blob)
r = net.forward()

# 读入类目
path = 'synset_words.txt'
classes = []

with open(path, 'rt') as f:
    classes = [x[x.find(" ")+1:] for x in f]

order = sorted(r[0], reverse=True)
z = list(range(3))

for i in range(0, 3):
    z[i] = np.where(r[0] == order[i])[0][0]
    print("第", i+1, "项,匹配:", classes [z[i]], end='')
    print("类所在行:", z[i]+1, " ", "可能性:", order[i])
C:\ProgramData\Anaconda3\envs\tensorflow\python.exe H:\python_study\opencv\BILILI\dnn.py 
第 1 项,匹配: Pembroke, Pembroke Welsh corgi
类所在行: 264   可能性: 0.40905562 项,匹配: Eskimo dog, husky
类所在行: 249   可能性: 0.2709653 项,匹配: Siberian husky
类所在行: 251   可能性: 0.15817644

进程已结束,退出代码0

opencv 使用DNN进行物体分类_第2张图片

你可能感兴趣的:(opencv,基础,opencv,dnn,分类)