首页 > 其他分享 >OpenCV加载深度学习模型

OpenCV加载深度学习模型

时间:2023-04-30 16:45:44浏览次数:33  
标签:preds image 图像 cv2 OpenCV 深度 224 模型 加载

目录

本文使用OpenCV加载深度学习模型,实现了对传入的单张图像或多张图像进行预测。

步骤:

  • 首先读入Caffe框架训练好的模型,然后对输入图像进行预处理操作,并将其传入已构建的网络模型,最后对得到的预测结果进行排序,找到概率最大的,通过标签文件得到最终预测的结果并进行输出展示。

1.单张图像

(1)构建网络模型

 # 标签文件处理,网络模型最后得到的是一个概率值,需将概率值转换成标签值,这里使用ImageNet训练好的一千分类的网络
rows = open("synset_words.txt").read().strip().split("\n")
classes = [r[r.find(" ") + 1:].split(",")[0] for r in rows]

# Caffe所需配置文件,读入Caffe框架训练好的模型,从bvlc_googlenet.prototxt网络配置文件读入网络结构
net = cv2.dnn.readNetFromCaffe("bvlc_googlenet.prototxt",
	"bvlc_googlenet.caffemodel")#训练好的模型

(2)图像预处理

# 图像路径,读入测试图像
imagePaths = sorted(list(utils_paths.list_images("images/")))

# 图像数据预处理
image = cv2.imread(imagePaths[0])
resized = cv2.resize(image, (224, 224))
# image:传入图像; scalefactor:进不进行变换,1不变; size; mean; swapRB
blob = cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123))#准备好输入数据,blobFromImage一张图像
#(104, 117, 123)分别表示RGB通道上的均值,每个像素点都需要减去均值,可以剔除掉光照的影响
print("First Blob: {}".format(blob.shape))#4维、结果:First Blob: (1, 3, 224, 224)表示1张图,3颜色通道,图片大小

(3)预测结果

 # 得到预测结果
net.setInput(blob)#把数据放入网络
preds = net.forward()#forward前向传播,preds前向传播的结果

# 排序,取分类可能性最大的(找到概率最大的)
idx = np.argsort(preds[0])[::-1][0]
text = "Label: {}, {:.2f}%".format(classes[idx],
	preds[0][idx] * 100)
cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,#写入图像
	0.7, (0, 0, 255), 2)

# 显示
cv2.imshow("Image", image)
cv2.waitKey(0)

2.多张图像

  • 构建网络模型与图像预处理操作与单张图像一样,第三步不同,如下:
 # Batch数据制作
images = []

# 方法一样,数据是一个batch,读取并加入多张图像
for p in imagePaths[1:]:
	image = cv2.imread(p)
	image = cv2.resize(image, (224, 224))
	images.append(image)

# blobFromImages函数,注意有s,批处理
blob = cv2.dnn.blobFromImages(images, 1, (224, 224), (104, 117, 123))
print("Second Blob: {}".format(blob.shape))#结果:Second Blob: (4, 3, 224, 224)表示4张图,3颜色通道,图片大小

# 获取预测结果
net.setInput(blob)
preds = net.forward()
for (i, p) in enumerate(imagePaths[1:]):
	image = cv2.imread(p)
	idx = np.argsort(preds[i])[::-1][0]
	text = "Label: {}, {:.2f}%".format(classes[idx],
		preds[i][idx] * 100)
	cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,
		0.7, (0, 0, 255), 2)
	cv2.imshow("Image", image)
	cv2.waitKey(0)

标签:preds,image,图像,cv2,OpenCV,深度,224,模型,加载
From: https://www.cnblogs.com/lushuang55/p/17365406.html

相关文章

  • mapbox加载geojson报错error: Style is not done loading
    Mapbox加载GeoJSON地图时,遇到error:Styleisnotdoneloading错误通常是由于地图样式文件没有加载完成引起的。具体来说,可能是因为Mapbox样式文件中包含了某些需要加载的图片或者矢量图层,而这些图片或矢量图层尚未完全加载完成,导致无法渲染地图。为解决此问题,可以尝试以下......
  • 赋值/浅拷贝/深度拷贝
     /*一:赋值二:浅拷贝二:深拷贝*/ 一:赋值#赋值if__name__=='__main__':dict1={'user':'Tom','num':[1,2,3]}#直接赋值:引用对象dict2=dict1print("dict1:0x%x"%id(dict1),dict2)#di......
  • OpenCV实现答题卡识别
    目录1.定位并规整答题卡(1)图像预处理(2)轮廓检测(答题卡)(3)透视变换2.答题卡结果检测(1)自适应二值化处理(2)轮廓检测(选项)(3)绘制掩模(4)结果本文基于OpenCV实现了捕获答题卡中的每个填涂选项,并将获取的填涂选项与正确选项做对比计算其答题正确率。所涉及的图像操作有:灰度转......
  • 深度特征融合相关论文(后续更新)
       FCN:FullyconvolutionalNetworksforSemanticSegmentation—CVPR2015ResNet:DeepResidualLearningforImageRecognition—CVPR2016FPN:Featurepyramidnetworksforobjectdetection—CVPR2017DenseNet:DenselyConnectedConvolutionalNetworks—CVP......
  • Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习
    动动发财的小手,点个赞吧!PyTorch中用于图形捕获、中间表示、运算符融合以及优化的C++和GPU代码生成的深度学习编译器技术入门计算机编程是神奇的。我们用人类可读的语言编写代码,就像变魔术一样,它通过硅晶体管转化为电流,使它们像开关一样工作,并允许它们实现复杂的逻辑——这......
  • nginx自定义指定加载配置
    进入 /usr/local/nginx/conf/include目录,创建 nginx.node.conf文件,在里面输入如下代码:upstreamnodejs{server127.0.0.1:3000;#server127.0.0.1:3001;keepalive64;}server{listen80;server_namewww.penguu.compenguu.com;access_lo......
  • mapbox加载geojson报错error: Style is not done loading
    Mapbox加载GeoJSON地图时,遇到error:Styleisnotdoneloading错误通常是由于地图样式文件没有加载完成引起的。具体来说,可能是因为Mapbox样式文件中包含了某些需要加载的图片或者矢量图层,而这些图片或矢量图层尚未完全加载完成,导致无法渲染地图。为解决此问题,可以尝试以......
  • 【深度学习基础】使用libtorch部署pytorch训练的网络
    下载安装配置:https://pytorch.org/cppdocs/installing.html小例程:https://pytorch.org/cppdocs/frontend.html官方:https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.htmllibtorch的API官网文档:https://pytorch.org/cppdocs/api/library_root.html配置环......
  • vue3自定义指令实现el-select下拉加载更多
    1.新建js文件exportdefault(app)=>{app.directive('loadmore',{beforeMount(el,binding){constelement=el.querySelector('.t-select__dropdown');element.addEventListener('scroll',()=>{co......
  • [ML&DL] 深度学习的实践层面
    深度学习的实践层面训练集验证集测试集过程神经网络的训练是一个需要不断迭代的过程,一般先提出idea,然后编码实现、测试,根据测试结果再次调整思路......分组与比例数据集通常分为3个部分:训练集、验证集和测试集。训练集用于训练模型的参数。验证集用于选择最好的模型。......