环境:群辉docker内安装Anaconda3,已装好OpenCV4.5。jupyter notebook编写代码。
ResNet-50-deploy.prototxt 定义模型结构配置文件
ResNet-50-model.caffemodel 实际层权重训练模型文件
classes.txt 标签文件
文件资源查看此链接文件下载,如果没有积分可以私信我发邮箱。
import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import ImageFont, ImageDraw, Image
#读入文本文件中的类别名称,共1000种类别,每行为一个类别
file=open('classes.txt')
names=[r.strip() for r in file.readlines()]
file.close()
classes = [r[10:] for r in names]#获取每个类别的名称
#从文件中载入Caffe模型
net = cv2.dnn.readNetFromCaffe("ResNet-50-deploy.prototxt", "ResNet-50-model.caffemodel")
image = cv2.imread("bird.jpg") #打开图像,用于识别分类
#创建图像blob数据,大小(220,220),颜色通道的均值缩减比例因子(104, 117, 123)
blob = cv2.dnn.blobFromImage(image, 1, (220, 220), (104, 117, 123))
net.setInput(blob) #将图像blob数据作为神经网络输入
result = net.forward() #执行预测
ptime, x = net.getPerfProfile() #获得完成预测时间
print('完成预测时间: %.2f ms' % (ptime * 1000.0 / cv2.getTickFrequency()))
sorted_ret = np.argsort(result[0]) #将预测结果按可信度高低排序
top3 = sorted_ret[::-1][:3] #获得排名前3的预测结果
ctext = "class: "+classes[top3[0]]
ptext = "confidence : {:.2%}".format(result[0][top3[0]])
#输出排名前5的预测结果
for (index, idx) in enumerate(top3):
print("{}. 类别: {}, 可信度: {:.2%}".format(index + 1, classes[idx], result[0][idx]))
#在图像中输出排名第1的预测结果
cv2.putText(image, ctext, (10,80 ), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 2)
cv2.putText(image, ptext, (10,200 ), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 2)
disi=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(disi)
plt.axis('off')
plt.show() #显示图像