【OpenCV】基于ResNet和Caffe模型的图像分类

文章目录

  • 前言
  • 一、准备文件
  • 二、代码
  • 总结


前言

环境:群辉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()    #显示图像

   

【OpenCV】基于ResNet和Caffe模型的图像分类_第1张图片


总结

你可能感兴趣的:(OpenCV,python,opencv,ResNet,Caffe)