今天,在网上复制了一段关于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)

        有时候会出现如下的错误:

         也许是这张图片不行,我换了其他的图片,是完全可以的。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐