今天,在网上复制了一段关于opencv实现图像分类的代码,其中涉及到了加载预训练的模型,这个模型需要自行下载(不像之前那个人脸识别的模型在CV2里面就有)。
模型可在此网盘中获取:
链接:https://pan.baidu.com/s/1xyLMEfPbt8N_7zpUbFgEYg
提取码:1234
代码如下:
import cv2
import numpy as np
# 加载预训练的模型
net = cv2.dnn.readNetFromCaffe('bvlc_googlenet.prototxt', 'bvlc_googlenet.caffemodel')
# 加载标签名
with open('synset_words.txt', 'r') as f:
labels = f.read().strip().split("\n")
# 加载图像,并进行预处理
image = cv2.imread('image.jpg')
blob = cv2.dnn.blobFromImage(image, 1, (224, 224), (104, 117, 123))
# 将图像输入到网络中,进行前向传播,得到输出结果
net.setInput(blob)
outputs = net.forward()
# 获取预测结果
class_id = np.argmax(outputs)
label = labels[class_id]
print('Output class:', label)
将模型下载到本地之后,就要在代码中修改这三个文件的路径。
我的代码如下所示:
import cv2
import numpy as np
# 加载预训练的模型
net = cv2.dnn.readNetFromCaffe('D:\\Python\\googlenet\\bvlc_googlenet.prototxt', 'D:\\Python\\googlenet\\bvlc_googlenet.caffemodel')
# 加载标签名
with open('D:\\Python\\googlenet\\synset_words.txt', 'r') as f:
labels = f.read().strip().split("\n")
# 加载图像,并进行预处理
image = cv2.imread("5.jpg")
blob = cv2.dnn.blobFromImage(image, 1, (224, 224), (104, 117, 123))
# 将图像输入到网络中,进行前向传播,得到输出结果
net.setInput(blob)
outputs = net.forward()
# 获取预测结果
class_id = np.argmax(outputs)
label = labels[class_id]
print('Output class:', label)
有时候会出现如下的错误:
也许是这张图片不行,我换了其他的图片,是完全可以的。