当前位置: 首页 > news >正文

python与深度学习(十六):CNN和宝可梦模型二

目录

  • 1. 说明
  • 2. 宝可梦模型的CNN模型测试
    • 2.1 导入相关库
    • 2.2 加载模型
    • 2.3 设置保存图片的路径
    • 2.4 加载图片
    • 2.5 数据处理和归一化
    • 2.6 对图片进行预测
    • 2.7 显示图片
  • 3. 完整代码和显示结果
  • 4. 多张图片进行测试的完整代码以及结果

1. 说明

本篇文章是对上篇文章宝可梦模型训练的模型进行测试。首先是将训练好的模型进行重新加载,然后采用opencv对图片进行加载,最后将加载好的图片输送给模型并且显示结果。

2. 宝可梦模型的CNN模型测试

2.1 导入相关库

在这里导入需要的第三方库如cv2,如果没有,则需要自行下载,自行下载时候一般建议镜像源,这样下载的快。

import tensorflow as tf
from PIL import ImageFont, Image, ImageDraw
from tensorflow import keras
import cv2, os, sys
import numpy as np
label = ['妙蛙种子', '小火龙', '超梦', '皮卡丘', '杰尼龟']

2.2 加载模型

把训练好的模型也加载进来,这里不用加载数据,因为数据是自制的。

network = keras.models.load_model('my_bkm.h5')
network.summary()

2.3 设置保存图片的路径

将数据集的某个数据以图片的形式进行保存,便于测试的可视化,这里在之前已经分了测试集,因此设置图片路径即可。
在这里设置图片存储的位置,便于将图片进行存储。

path = os.path.join(sys.path[0], 'test.png')

上述代码是将test文件夹里面的test.png进行测试,如果想测试其它的只需改为x.jpg即可。
在这里插入图片描述

2.4 加载图片

采用cv2对图片进行加载,用opencv库也就是cv2读取图片的时候,图片是三通道的,而训练的模型是三通道的,因此不只用取单通道,而是三通道,这里和之前的灰度图不同。

image = cv2.imread(path)
img = image.copy()
img = cv2.resize(img, (96, 96))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

2.5 数据处理和归一化

将输入网络的图片进行数据处理转换到0-1之间,然后进行归一化处理。
归一化后加快了梯度下降求最优解的速度,也即加快训练网络的收敛性。

def normalize(x):img_mean = tf.constant([0.485, 0.456, 0.406])img_std = tf.constant([0.229, 0.224, 0.225])x = (x - img_mean) / img_stdreturn xdef preprocess(x):x = tf.expand_dims(x, axis=0)x = tf.cast(x, dtype=tf.float32) / 255.# x = normalize(x)return x

2.6 对图片进行预测

将图片输入给训练好我的模型并且进行预测。
因为是五分类,所以预测的结果是5个概率值,所以需要进行处理,np.argmax()是得到概率值最大值的序号,也就是预测的数字。

result = network(img)
result = tf.nn.softmax(result)
print(result)
index = tf.argmax(result, axis=-1)
print(label[int(index)])

2.7 显示图片

对预测的图片进行显示,把预测的数字显示在图片上。
下面5行代码分别是创建窗口,设定窗口大小,显示图片,停留图片,清除内存。

cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 500, 500)   # 自己设定窗口图片的大小
#cv2.putText(image, label[int(index)], (166, 54), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1.2, (255, 0, 0), 2)
cv2.imshow('img', image)
cv2.waitKey()
cv2.destroyAllWindows()

3. 完整代码和显示结果

以下是完整的代码和图片显示结果。

import tensorflow as tf
from PIL import ImageFont, Image, ImageDraw
from tensorflow import keras
import cv2, os, sys
import numpy as np
label = ['妙蛙种子', '小火龙', '超梦', '皮卡丘', '杰尼龟']network = keras.models.load_model('my_bkm.h5')
network.summary()
path = os.path.join(sys.path[0], 'test.png')
image = cv2.imread(path)
img = image.copy()
img = cv2.resize(img, (96, 96))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)def show_chinese(img,text,pos):img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))font = ImageFont.truetype(font='msyh.ttc', size=36)draw = ImageDraw.Draw(img_pil)draw.text(pos, text, font=font, fill=(255, 0, 0))  # PIL中RGB=(255,0,0)表示红色img_cv = np.array(img_pil)                         # PIL图片转换为numpyimg = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)      # PIL格式转换为OpenCV的BGR格式return imgdef normalize(x):img_mean = tf.constant([0.485, 0.456, 0.406])img_std = tf.constant([0.229, 0.224, 0.225])x = (x - img_mean) / img_stdreturn xdef preprocess(x):x = tf.expand_dims(x, axis=0)x = tf.cast(x, dtype=tf.float32) / 255.# x = normalize(x)return ximg = preprocess(img)# img= tf.cast(img, dtype=tf.uint8)result = network(img)
result = tf.nn.softmax(result)
print(result)
index = tf.argmax(result, axis=-1)
print(label[int(index)])# # 显示
image = show_chinese(image, label[int(index)], (356, 54))
cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 500, 500)   # 自己设定窗口图片的大小
#cv2.putText(image, label[int(index)], (166, 54), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1.2, (255, 0, 0), 2)
cv2.imshow('img', image)
cv2.waitKey()
cv2.destroyAllWindows()
tf.Tensor([[1.1600139e-09 2.5695030e-05 8.4645586e-15 9.9997413e-01 6.6168944e-08]], shape=(1, 5), dtype=float32)
皮卡丘

A

4. 多张图片进行测试的完整代码以及结果

为了测试更多的图片,引入循环进行多次测试,效果更好。

import tensorflow as tf
from PIL import ImageFont, Image, ImageDraw
from tensorflow import keras
import cv2, os, sys
import numpy as np
label = ['妙蛙种子', '小火龙', '超梦', '皮卡丘', '杰尼龟']
def show_chinese(img,text,pos):img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))font = ImageFont.truetype(font='msyh.ttc', size=36)draw = ImageDraw.Draw(img_pil)draw.text(pos, text, font=font, fill=(255, 0, 0))  # PIL中RGB=(255,0,0)表示红色img_cv = np.array(img_pil)                         # PIL图片转换为numpyimg = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)      # PIL格式转换为OpenCV的BGR格式return imgdef normalize(x):img_mean = tf.constant([0.485, 0.456, 0.406])img_std = tf.constant([0.229, 0.224, 0.225])x = (x - img_mean) / img_stdreturn xdef preprocess(x):x = tf.expand_dims(x, axis=0)x = tf.cast(x, dtype=tf.float32) / 255.# x = normalize(x)return xnetwork = keras.models.load_model('my_bkm.h5')
network.summary()
prepicture = int(input("input the number of test picture :"))
for i in range(prepicture):path1 = input("input the test picture path:")path = os.path.join(sys.path[0], path1)image = cv2.imread(path)img = image.copy()img = cv2.resize(img, (96, 96))img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img = preprocess(img)# img= tf.cast(img, dtype=tf.uint8)result = network(img)result = tf.nn.softmax(result)print(result)index = tf.argmax(result, axis=-1)print(label[int(index)])# # 显示image = show_chinese(image, label[int(index)], (356, 54))cv2.namedWindow('img', 0)cv2.resizeWindow('img', 500, 500)   # 自己设定窗口图片的大小#cv2.putText(image, label[int(index)], (166, 54), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1.2, (255, 0, 0), 2)cv2.imshow('img', image)cv2.waitKey()cv2.destroyAllWindows()
input the number of test picture :2
input the test picture path:1.png
tf.Tensor([[9.9998260e-01 1.2735860e-07 4.3719947e-06 3.5391193e-07 1.2507204e-05]], shape=(1, 5), dtype=float32)
妙蛙种子

在这里插入图片描述

input the test picture path:4.png
tf.Tensor([[1.6705857e-11 9.9999821e-01 2.3859246e-12 1.7547414e-06 3.2666370e-09]], shape=(1, 5), dtype=float32)
小火龙

在这里插入图片描述

相关文章:

python与深度学习(十六):CNN和宝可梦模型二

目录 1. 说明2. 宝可梦模型的CNN模型测试2.1 导入相关库2.2 加载模型2.3 设置保存图片的路径2.4 加载图片2.5 数据处理和归一化2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章宝可梦模型训练的模型…...

PTA 1030 Travel Plan

个人学习记录,代码难免不尽人意。 A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/h…...

MFC、Qt、WPF?该用哪个?

MFC、Qt和WPF都是流行的框架和工具,用于开发图形用户界面(GUI)应用程序。选择哪个框架取决于你的具体需求和偏好。MFC(Microsoft Foundation Class)是微软提供的框架,使用C编写,主要用于Windows…...

使用logback记录日志

1. Pom引用依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> 2. logback.xml <?xml version"1.0" encoding"U…...

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理) em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...

【安装】XMind2022XMind2020安装教程(资源)

Xmind是一个制作思维导图很便利的软件。 1.资源链接 Xmind2022: 链接&#xff1a;https://pan.baidu.com/s/1j4DFedxxX2YJ3HBy1-MpHw?pwdxmin 提取码&#xff1a;xmin Xmind2020: 链接&#xff1a;https://pan.baidu.com/s/1wNqMApuy0yoBF2CvpBDpDA?pwdxmin 提取码&#x…...

Windows下QT Creator安装MinGW 32bit编译器

前言 注&#xff1a;本作者是基于FFmpeg开发需要&#xff0c;故在Windows下QT Creator中安装MinGW 32bit编译器&#xff01;其它型号编译器参照此文章基本可以实现&#xff01; 一、下载需要的编译器 1、下载链接 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/…...

Emacs之解决键值绑定冲突问题(一百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

瞄准产业应用,大模型加持的深兰科技AI虚拟数字人落地业务场景

伴随ChatGPT的问世&#xff0c;在技术与商业运作上都日渐发展成熟的AI数字人产业正持续升温。 目前的AI数字人不仅拥有超高“颜值”&#xff0c;同时还拥有更为丰富的、细腻的表情和动作。更有甚者&#xff0c;AI数字人已经具备自定义构建知识图谱、自主对话、不断学习成长的能…...

【网络基础进阶之路】基于MGRE多点协议的实战详解

PS&#xff1a;本要求基于华为的eNSP模拟软件进行 具体要求&#xff1a; 完成步骤&#xff1a; 1、根据上述要求&#xff0c;对各路由器进行地址安排&#xff0c;如下图。 2、进入各路由器&#xff0c;对每个端口进行地址设置。 R1路由器设置&#xff1a; ISP路由器设置&…...

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别

Hive Hadoop Hive 和传统关系型数据库区别 Spark 概念 基于内存的分布式计算框架 只负责算 不负责存 spark 在离线计算 功能上 类似于mapreduce的作用 MapReduce的缺点 运行速度慢 &#xff08;没有充分利用内存&#xff09;接口比较简单&#xff0c;仅支持Map Reduce功能…...

[运维]python 启用http 文件服务

要在Python中启用HTTP文件服务&#xff0c;您可以使用内置的http.server模块&#xff08;在Python 3中&#xff09;或SimpleHTTPServer模块&#xff08;在Python 2中&#xff09;。 在Python 3中&#xff1a; python -m http.server在Python 2中&#xff1a; python -m Simp…...

electron-builder 打包 exe 异常错误集锦

项目技术 vue-electron vue-router vuex vuex-electron element-ui echarts mysql 打包异常 Error: Unresolved node modules: vue Error: Unresolved node modules: vue at D:\Code\Demo\Vue\Voice\App\node_modules\_app-builder-lib20.44.4app-builder-lib\src\…...

14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

文章目录 1. 实现高层网络操作的类2. 基于HTTP协议的网络文件下载3.源码3.1 可是化UI设计3.2 mainwindow.h3.3 mainwindow.cpp 1. 实现高层网络操作的类 Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议&#xff0c;如 HTTP、FTP、SNMP等&#xff0c;这些类主要是…...

Kotlin委托

委托 委托 代理 方法内的成员永远拿不到thisRef&#xff1a;官方委托和自定义委托-》方法里面没办法使用反射 委托只能类委托和属性委托 Kotlin委托 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/132095759 类委托 1、类委托 委托的是接口的方…...

分布式协议与算法——CAP理论、ACID理论、BASE理论

CAP理论 CAP理论&#xff0c;对分布式系统的特性做了高度抽象&#xff0c;比如抽象成了一致性、可用性和分区容错性&#xff0c;并对特性间的冲突&#xff08;也就是CAP不可能三角&#xff09;做了总结。 CAP三指标 CAP理论对分布式系统的特性做了高度抽象&#xff0c;形成了…...

接口测试 Jmeter 接口测试 —— 请求 Headers 与传参方式

一、 背景&#xff1a; 在使用 Jmeter 进行接口测试时&#xff0c;有些小伙伴不知道 Headers 和请求参数 (Parameters&#xff0c;Body Data) 的联系&#xff0c;本文主要讲 Content-Type 为 application/x-www-form-urlencoded 和 application/json 的场景。 1、使用 Parame…...

【redis】redis部署1主2从3哨兵demo搭建示例

redis版本为7&#xff0c;搭建的架构为1主2从3哨兵的架构。本文是对搭建的过程做一个回忆&#xff0c;过程可能遗漏了某些步骤&#xff0c;见谅。 首先&#xff0c;需要有一个已经安装了的redis。我们从redis源码目录中&#xff0c;找到一个redis.conf文件&#xff0c;这个文件…...

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig-zag/左右双旋/3+4重构)

目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 00.BBST——平衡二叉搜索树 本文是介绍众多平衡二叉搜…...

免疫疗法勘察兵——DC细胞

DC细胞又叫树状细胞或者树突细胞&#xff0c;1869年由保罗兰格尔翰斯发现&#xff0c;一开始被误以为是神经细胞的一种&#xff0c;直到1973年皮肤科医师Inga Silberberg发现了他的免疫功能&#xff0c;同年&#xff0c;被拉尔夫斯坦曼和赞威尔A科恩两人正式命名为“dendritic…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...