动物分类识别教程+分类释义+界面展示
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…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
