动物分类识别教程+分类释义+界面展示
1.项目简介
动物分类教程+分类释义+界面展示
动物分类是生物学中的一个基础知识,它是对动物进行分类、命名和描述的科学方法。本教程将向您介绍动物分类的基本原则和方法,并提供一些常见的动物分类释义。
- 动物分类的基本原则
动物分类根据动物的形态、结构、生活习性、遗传等特征进行分类。动物分类的基本原则包括以下几点:
(1)分类的基础:分类应该以形态学为基础,主要从外部形态、内部结构、发育过程和生理生化特征等方面进行分类。
(2)系统的体系分类:采用分层次、阶梯式的分类方法,把各个分类单元按一定顺序排列成一个大的分类系统。
(3)分类的稳定性:分类的稳定性是指在一定的时间和空间范围内,由于物种的进化和分化关系而形成的分类不会轻易发生变动。
- 常见动物分类释义
(1)哺乳动物:是一类具有乳腺并能哺育幼崽的动物,如猫、狗、猪、牛等。
(2)鸟类:是一类具有翅膀和羽毛的脊椎动物,如鹰、鸽子、鸡等。
(3)爬行动物:是一类冷血动物,具有鳞片、角质板、甲壳等外壳,如蛇、龟、鳄鱼等。
(4)两栖动物:是一类既能在水中生活,也能在陆地上生活的动物,如青蛙、蝾螈等。
- 界面展示
本教程提供了一个简单易用的动物分类界面,用户可以上传自己拍摄的动物图片,系统会自动识别出动物的种类,并显示相应的分类释义。同时,用户还可以通过界面查看其他用户上传的动物图片及其分类结果,以便更好地了解动物分类知识。
总之,本教程旨在向广大用户介绍动物分类的基本原则和方法,帮助用户更好地了解动物世界,同时提供一个方便快捷的界面,让用户可以轻松地进行动物分类。
主要功能:利用tinker封装InceptionV3[论文]MOD进行图像分类的一个小Demo
环境:anaconda+Python3+tensorflow
IDE:pycharm + jupyter notebook
2.代码框架
需要的库模块:
-
os tarfile requests tensorflow numpy translate PIL
一共四个代码文件:
-
get_Inception_model.py
方法模块,下载模型将模型保存到本地
def download_inception_model(): #下载模型将模型保存到本地'......'
-
nodelookup.py
类文件,主要功能将官方标签解码成可读文本
class NodeLookup(object):def __init__(self):self.node_lookup # 字典,id to string'......'@staticmethoddef _load(labels_path, uids_path): # 输入:node_id, 输出:id to string字典'......'return dictdef id_to_string(self, node_id): # 输入:node_id, 输出:可读字符串'......'return str
-
tensorflow_predictor.py
类文件,主要功能实现图像预测
class TensorflowPredictor():def __init__(self): # 加载模型,新建session,'......'def predict_image(self, image_path): # '......'return str
-
gui.py
界面代码,面向用户
btn_sel # 选择图片按钮 img_label # 这是是显示预测图片的全局变量 res_label # 这是是显示预测文字的全局变量def translator_prediction_result(pre_res):# 翻译模块 输入:英文字符串,输出:格式化中文字符串'......'return resdef selector_image(): # 选择图片按钮点击发生的事件'......'root.mainloop() # 进入消息循环
3.实现细节
3.1.下载模型
3.1.1.实现功能
下载模型将模型保存到本地
3.1.2.Inception文件简介
Inception_v3模型源码下载
Inception为Google开源的CNN模型,至今已经公开四个版本,每一个版本都是基于大型图像数据库ImageNet中的数据训练而成。因此我们可以直接利用Google的Inception模型来实现图像分类。本项目主要以Inception_v3模型为基础。分类一张图像可以在几秒内完成。
3.1.3.流程图
3.1.4.代码
# get_Inception_model.pyimport tarfile
import requestsdef download_inception_model():# inception_v3模型下载inception_pre_mod_url = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz'# 模型存放地址inception_pre_mod_dir = "inception_model"if not os.path.exists(inception_pre_mod_dir):os.makedirs(inception_pre_mod_dir)# 获取文件名,以及文件路径filename = inception_pre_mod_url.split('/')[-1]filepath = os.path.join(inception_pre_mod_dir, filename)# 下载模型if not os.path.exists(filepath):print('Downloading: ', filename)r = requests.get(inception_pre_mod_url, stream=True)with open(filepath, 'wb') as f:for chunk in r.iter_content(chunk_size=1024):if chunk: f.write(chunk)print("Done: ", filename)# 解压文件tarfile.open(filepath, 'r:gz').extractall(inception_pre_mod_dir)
3.2.标签解码
3.2.1.实现功能
将标签编码和标签内容一一对应(解码)
3.2.2.文件
官方下载的文件夹下有两个文件
- imagenet_synset_to_human_label_map.txt
- imagenet_2012_challenge_label_map_proto.pbtx
target_class对应着一个class_string,这里我们要做的任务就是将traget_class与human_string一一对应
3.2.3.代码
# nodelookup.pyimport tensorflow.compat.v1 as tf
tf.disable_v2_behaviorclass NodeLookup(object):def __init__(self):labels_path = 'inception_model/imagenet_2012_challenge_label_map_proto.pbtxt'uids_path = 'inception_model/imagenet_synset_to_human_label_map.txt'self.node_lookup = self.load(labels_path, uids_path)@staticmethoddef _load(labels_path, uids_path):uid_to_human = {}for line in tf.gfile.GFile(uids_path).readlines():items = line.strip('\n').split('\t')uid_to_human[items[0]] = items[1]node_id_to_uid = {}for line in tf.gfile.GFile(labels_path).readlines():if line.startswith(' target_class:'):target_class = int(line.split(': ')[1])if line.startswith(' target_class_string:'):target_class_string = line.split(': ')[1]node_id_to_uid[target_class] = target_class_string[1:-2]node_id_to_name = {}for key, val in node_id_to_uid.items():name = uid_to_human[val]node_id_to_name[key] = namereturn node_id_to_namedef id_to_string(self, node_id):if node_id not in self.node_lookup:return ''return self.node_lookup[node_id]
3.3.运行模型
3.3.1.流程图
3.3.2.代码
import tensorflow.compat.v1 as tftf.disable_v2_behavior
import numpy as np
import nodelookupclass TensorflowPredictor():def __init__(self):self.sess = tf.Session()with tf.gfile.FastGFile('./inception_model/classify_image_graph_def.pb', 'rb') as f:graph_def = tf.GraphDef() # 定义一个计算图graph_def.ParseFromString(f.read()) #tf.import_graph_def(graph_def, name='')self.softmax_tensor = self.sess.graph.get_tensor_by_name('softmax:0')def predict_image(self, image_path):# 载入图片image_data = tf.gfile.FastGFile(image_path, 'rb').read()predictions = self.sess.run(self.softmax_tensor, {'DecodeJpeg/contents:0': image_data}) # 图片格式是jpg格式predictions = np.squeeze(predictions) # 把结果转为1维# 打印图片路径及名称res_str = ''res_str += '图片路径: ' + image_path + '\n'# 排序top_k = predictions.argsort()[-5:][::-1]node_lookup = nodelookup.NodeLookup()for node_id in top_k:# 获取分类名称name_str = node_lookup.id_to_string(node_id)# 获取该分类的置信度score = predictions[node_id] * 100res_str += '(%.2f' % (score) + '%), ' + name_str + '\n'return res_str
3.4.GUI
3.4.1.运行图
3.4.2.代码
import os
import tkinter
from tkinter import *
from tkinter import filedialog
from PIL import ImageTk
from translate import Translatorimport get_Inception_model
from tensorflow_predictor import TensorflowPredictorroot = tkinter.Tk() # 生成root主窗口
root.title("图像分类") # 设置窗体标题
root.geometry("800x800") # 设置窗体大小if not os.path.exists('./inception_model/classify_image_graph_def.pb'): # 如果没下载model,则下载modelget_Inception_model.download_inception_model() # 下载modeltranslator = Translator(to_lang="chinese") # 新建Translator对象def translator_prediction_result(pre_res): # 翻译模块res = pre_res.split("\n")[0] + '\n'for line in pre_res.split("\n")[1:-1]:s = translator.translate(line.split(',')[1])res += line + " (机翻结果: " + s + ")\n"return res # 返回翻译结果img_label = Label(root, width='800', height='533') # 这是是显示预测图片的全局变量
res_label = Label(root) # 这是是显示预测文字的全局变量
pdt = TensorflowPredictor() # 新建预测类(自己写的)def selector_image(): # 选择图片按钮点击发生的事件img_path = filedialog.askopenfilename(initialdir='./images') # 弹窗选择图像文件返回图像地址pre_res = pdt.predict_image(image_path=img_path) # 利用地址调用预测函数返回结果字符串pre_res = translator_prediction_result(pre_res) # 机器翻译结果字符串photo = ImageTk.PhotoImage(file=img_path)img_label.config(imag=photo) # 更新图片img_label.pack()res_label.config(text=pre_res, justify=LEFT) # 更新文字res_label.pack()root.mainloop() # 进入消息循环returnbtn_sel = tkinter.Button(root, text='选择图片', command=selector_image) # 选择图片按钮
btn_sel.pack()root.mainloop() # 进入消息循环(必需组件)
果字符串photo = ImageTk.PhotoImage(file=img_path)img_label.config(imag=photo) # 更新图片img_label.pack()res_label.config(text=pre_res, justify=LEFT) # 更新文字res_label.pack()root.mainloop() # 进入消息循环returnbtn_sel = tkinter.Button(root, text='选择图片', command=selector_image) # 选择图片按钮
btn_sel.pack()root.mainloop() # 进入消息循环(必需组件)
总结
- Inception 是一种深度学习模型,主要用于图像分类任务。它是由 Google 团队于 2014 年开发的,并在 ImageNet
图像识别竞赛中取得了很好的成绩。 - Inception 模型的设计目标是在保持高准确率的同时,降低模型的计算复杂度。它采用了一种称为 Inception
模块的特殊结构,该模块可以同时应用多个不同大小的卷积核和池化操作,并将它们的输出拼接在一起。这样可以捕捉到不同尺度和层次的图像特征。 - Inception
模型的核心思想是使用多个并行的卷积操作来处理输入图像,并通过合并它们的输出来提取更丰富的特征表示。这种设计可以减少网络的参数数量,并增加模型的计算效率。 - Inception 模型的经典版本是 Inception V3,它包含多个 Inception
模块,每个模块都包含多个并行的卷积和池化操作。Inception V3 在 ImageNet
数据集上取得了很好的性能,同时也被广泛应用于其他图像分类任务。
除了 Inception V3,还有其他版本的 Inception 模型,如 Inception V1、Inception V2 等,每个版本在模型结构和性能上都有所不同。
总结起来,Inception 是一种用于图像分类任务的深度学习模型,通过使用多个并行的卷积操作和池化操作来提取图像特征。它在准确率和计算效率方面取得了良好的平衡,并被广泛应用于图像分类领域。
相关文章:

动物分类识别教程+分类释义+界面展示
1.项目简介 动物分类教程分类释义界面展示 动物分类是生物学中的一个基础知识,它是对动物进行分类、命名和描述的科学方法。本教程将向您介绍动物分类的基本原则和方法,并提供一些常见的动物分类释义。 动物分类的基本原则 动物分类根据动物的形态、…...

【Java动态代理如何实现】
✅Java动态代理如何实现 ✅JDK动态代理和Cglib动态代理的区别 ✅拓展知识仓✅静态代理和动态代理的区别✅动态代理的用途✅Spring AOP的实现方式📑JDK 动态代理的代码段📑Cglib动态代理的代码块 ✅注意事项: 在Java中,实现动态代理…...

数据库(部分函数)
函数: 单行函数:会对查询中的每一数据进行处理 字符函数 length(列名) select name, 日期函数: now() 年月日时分秒 curdate() 年月日 curtime()时分秒 …...

基于Vite+Vue3 给项目引入Axios
基于ViteVue3 给项目引入Axios,方便与后端进行通信。 系列文章指路👉 系列文章-基于Vue3创建前端项目并引入、配置常用的库和工具类 文章目录 安装依赖新建src/config/config.js 用于存放常用配置进行简单封装解决跨域问题调用尝试 安装依赖 npm install axios …...

为什么查企业的时候有的公司没有显示注册资金?
我们在查询企业信息时,有时候会遇到某一家企业没有注册资金的情况,但是该企业又不是已经注销的。出现这种情况是什么原因呢? 1.该公司是一家分公司,分公司没有独立法人资格,因此没有注册资金。 2.有些情况下…...

DataProcess-VOC数据图像和标签一起进行Resize
VOC数据图像和标签一起进行Resize 参加检测比赛的时候,很多时候工业原始数据尺度都比较大,如果对数据不提前进行处理,会导致数据在加载进内存时花费大量的时间,所以在执行训练程序之前需要将图像提前进行预处理。对于目标检测的数…...

MultiValueMap
MultiValueMap是Spring框架中提供的一个接口,它继承了Map接口,用于存储键值对,但与普通的Map不同的是,MultiValueMap中一个键可以对应多个值,因此它也可以被称为“多值Map”。 MultiValueMap的使用场景一般是在需要存…...

山西电力市场日前价格预测【2023-12-25】
日前价格预测 预测说明: 如上图所示,预测明日(2023-12-25)山西电力市场全天平均日前电价为469.89元/MWh。其中,最高日前电价为1048.40元/MWh,预计出现在08:30。最低日前电价为252.77元/MWh,预计…...

【华为OD机试真题2023CD卷 JAVAJS】5G网络建设
华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 5G网络建设 时间限制:4s 空间限制:256MB 限定语言:不限 题目描述: 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同…...

OSI 七层参考模型及TCP/IP 四层模型
OSI 七层参考模型 七层模型,亦称 OSI ( Open System Interconnection )参考模型,即开放式系统互联。参考模型是国际标准化组织(ISO )制定的一个用于计算机或通信系统间互联的标准体系,一般称为…...

【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。
在不同编程语言中,控制成员(变量、方法、类等)可见性的机制不尽相同。以下是对比JavaScript、Go、Ada、Python、C、Java、PHP所使用的访问限制关键字和约定: 一、JavaScript ### JavaScript访问限制 早期的JavaScript并没有类似…...

力扣(leetcode)第26题删除有序数组中的重复项(Python)
26.删除有序数组的重复项 题目链接:26.删除有序数组的重复项 给你一个非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 …...

【内存泄漏】内存泄漏及常见的内存泄漏检测工具介绍
内存泄漏介绍 什么是内存泄漏 内存泄漏是指程序分配了一块内存(通常是动态分配的堆内存),但在不再需要这块内存的情况下未将其释放。内存泄漏会导致程序浪费系统内存资源,持续的内存泄漏还导致系统内存的逐渐耗尽,最…...

FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势
FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势 本章节主要参考书籍《Xilinx Zynq-7000 嵌入式系统设计与实现 基于ARM Cortex-A9双核处理器和Vivado的设计方法 (何宾,张艳辉编著)》 本章节主要讲述FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势,学习笔…...

如何在Vue3中实现无缝热重载:提升你的开发效率
Vue3中的热重载(Hot Module Replacement,简称HMR)是一种开发时的功能,它允许开发者在不刷新整个页面的情况下,实时替换、添加或删除模块。这意味着当你对Vue组件进行修改并保存时,这些更改会立即反映在浏览…...

盒子 Box
UVa1587 思路: 1.输入每个面的长宽并将每个面较长的一边放在前面 2.判断是否存在三对面分别相等 3.判断是否存在三组四棱相等 #include <stdio.h> #include <stdlib.h> #define maxn 100int cmp(const void* e1, const void* e2) {return (int)(*(d…...

uni-app附件下载预览 并解决打开附件时黑屏
// 预览附件perviewFile(file) {console.log(点击附件, file)var strfile.previewUrlvar filTypestr.split(.)console.log(filType,filType)uni.downloadFile({url: success: function(res) {console.log(打开文档成功, res);if (res.statusCode 200) {uni.saveFile({tempFile…...

卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决?
卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决? 报错内容:原因解决办法 报错内容: npm ERR! code 1 npm ERR! path E:\VScode\codeDate\yugan\node_modules\node-sass npm ERR! command failed np…...

渗透测试 | 信息收集常用方法合集
目录 一、关于域名 1.子域名收集 a.搜索引擎查找 b.在线查询 c.工具 d.SSL/TLS证书查询 2.端口型站点收集 3.目录文件扫描 a.目录扫描工具 b.github搜索 c.google搜索 d.在线网站 e.文件接口工具 4.旁站和C段 a.旁站查询 b.C段查询 5.网站技术架构信息 a.基础…...

使用 ElementUI 组件构建无边框 Window 桌面应用(WinForm/WPF)
生活不可能像你想象得那么好,但也不会像你想象得那么糟。 我觉得人的脆弱和坚强都超乎自己的想象。 有时,我可能脆弱得一句话就泪流满面;有时,也发现自己咬着牙走了很长的路。 ——莫泊桑 《一生》 一、技术栈 Vite + Vue3 + TS + ElementUI(plus) + .NET Framework 4.7.2…...

JavaScript中数组的方法和函数作用域问题
1 -函数作用域问题-: 函数的外层作用域,在函数创建时就已确定,和函数的调用位置无关 var name 嘿嘿;// 函数的外层作用域,在函数创建时就已确定,和函数的调用位置无关// JS中的作用域被称为 词法作用域function fn() {console.…...

nodejs设置x-xss-protection解决xss问题
在Node.js中设置X-XSS-Protection可以通过使用helmet库来完成。 首先,确保已经安装了helmet库。如果没有安装,可以运行以下命令进行安装: npm install helmet --save 然后,在你的Node.js应用程序中引入并配置helmet库ÿ…...

C/C++不同整数类型的区别
在C/C中涉及的整数相关的类型大致有如下几种: char、unsigned charshort、unsigned shortint、unsigned intlong、unsigned longlong long、unsigned long longint8_t、uint8_tint32_t、uint32_tint64_t、uint64_tDWORDDWORD32、DWORD64size_t、ssize_tSIZE_T、SSI…...

如何理解JDK、JRE、JVM区别与联系
摘要:JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。 一、JDK JDK(Ja…...

用友GRP-U8 SmartUpload01 文件上传漏洞
漏洞描述 用友GRP-U8行政事业内控管理软件是一款专门针对行政事业单位开发的内部控制管理系统,旨在提高内部控制的效率和准确性。该软件/u8qx/SmartUpload01.jsp接口存在文件上传漏洞,未经授权的攻击者可通过此漏洞上传恶意后门文件,从而获取…...

react 路由v6
这里是区别:V5 vs V6 这里是官网:可以查看更多高级属性 一、基本使用: 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.laz…...

rpc【通义】rpc原理【gpt】
一 rpc RPC(Remote Procedure Call,远程过程调用)是一种编程技术,它允许在分布式系统中的一个程序像调用本地函数一样调用另一个程序(位于不同的机器或进程中)的函数或方法。RPC的主要目标是隐藏网络通信的…...

Leetcode 2973. Find Number of Coins to Place in Tree Nodes
Leetcode 2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路2. 代码实现 题目链接:2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路 这道题思路上其实挺简单的,就是一个遍历的思路,找到每一个点对应的子树当…...

如何调动销售人员使用CRM的积极性?
CRM系统在销售人员眼中是流程监管工具也是单调枯燥的操作空间,如何让销售爱上CRM系统?1.让CRM简化销售工作;2.智能提醒销售各项事务;3.让CRM界面更加丰富多彩,通过这些方法帮助销售经理轻松管理团队,销售对…...

数值分析期末复习
第一章 科学计算 误差 解题步骤 x : 真实值 x:真实值 x:真实值 x ∗ : 近似值 x^*:近似值 x∗:近似值 先求绝对误差 e ∗ e^* e∗: x − x ∗ x - x^* x−x∗ 绝对误差限是 ∣ x − x ∗ ∣ ≤ ε |x - x^{*}| \le \varepsilon ∣x−x∗∣≤ε 求相对误差限: ∣ x − x ∗…...