动物分类识别教程+分类释义+界面展示
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…...
如何轻松突破Cursor试用限制:免费高效的终极解决方案
如何轻松突破Cursor试用限制:免费高效的终极解决方案 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We h…...
STM32G473 IAP实战:基于CAN/USART双通道的BootLoader设计与固件升级全流程解析
1. 为什么需要双通道IAP方案 在工业现场设备维护中,固件升级是个高频刚需。想象一下车间里有上百台设备需要更新程序,如果每台都要拆机接下载器,工程师怕是会当场崩溃。我去年参与的一个AGV调度项目就吃过这个亏,后来我们给STM32…...
探索内转子MotorCAD电机模型:面包型永磁体的独特魅力
内转子motorcad电机模型,电机永磁体采用面包型,额定转速3000,可用于后续的优化设计,送motorcad中文手册。最近在研究电机这块,发现了一个超有意思的内转子MotorCAD电机模型,今天来和大家唠唠。这个模型的电…...
CentOS 6下OpenSSH从5.3升级到8.0的完整避坑指南(附Telnet备用方案)
CentOS 6环境下OpenSSH安全升级全流程:从风险规避到应急通道搭建 当一台运行CentOS 6的服务器在安全扫描中被标记出OpenSSH 5.3的高危漏洞时,任何有经验的运维工程师都会感到脊背发凉——这就像发现自家大门用的还是二十年前的挂锁。但更令人焦虑的是&am…...
解锁图像标注效率:LabelImg亮度调节功能提升标注准确性全指南
解锁图像标注效率:LabelImg亮度调节功能提升标注准确性全指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check…...
CayenneMQTT库详解:嵌入式设备快速接入MQTT平台
1. CayenneMQTT 库概述 CayenneMQTT 是一个专为物联网设备设计的轻量级 MQTT 客户端库,核心目标是将嵌入式终端(如 Arduino、ESP8266、ESP32)快速、可靠地接入 Cayenne IoT 平台 的可视化仪表盘。该库并非从零实现 MQTT 协议栈,…...
【分箱进阶篇】分箱的工程细节:从训练到部署的完整模式
基础篇参考:【分箱基础篇】pandas 分箱双子星:pd.cut 与 pd.qcut 我们在基础篇讲了 pd.cut 和 pd.qcut 各自怎么用。但在实际项目里,分箱不是调一次函数就完事的。通常来说,训练集上算出来的切分点要保存下来,测试集…...
MAX7319 GPIO输入扩展库:硬件边沿检测与中断驱动实践
1. 项目概述iotec_MAX7319 是一款面向嵌入式系统的轻量级 C 驱动库,专为 Maxim Integrated(现属 Analog Devices)推出的 IC 接口 GPIO 扩展芯片 MAX7319 设计。该芯片并非通用型端口扩展器,而是一款带可屏蔽边沿检测功能的专用输入…...
如何利用系统提示词革新开源项目的AI功能实现
如何利用系统提示词革新开源项目的AI功能实现 【免费下载链接】system_prompts_leaks 项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks 在人工智能技术快速发展的今天,系统提示词已成为解锁AI潜能的关键钥匙。对于开源项目而言&…...
如何快速掌握AI变声神器RVC:面向初学者的完整指南
如何快速掌握AI变声神器RVC:面向初学者的完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI 语音数据小于等于10分钟也可以用来训练一个优秀的变声模型! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Con…...
