猫狗分类识别【分类识别】①分类识别

news2024/11/17 10:04:31

一、导入依赖库

pip install opencv-python

pip install numpy

pip install tensorflow

二、分类识别实现

import os

import cv2
import numpy as np
from tensorflow import keras

# 加载模型

model_name = "dog_cat.keras"

model = keras.models.load_model(model_name)
# 预测文件夹路径
folder_path = "imgs"
# 获取文件夹中的图像文件列表
image_files = [
    os.path.join(folder_path, file)
    for file in os.listdir(folder_path)
    if file.endswith(".jpg")
]
# 模型类别
class_names = [
    "cat",
    "dog"
]
# 预测每张图像
for image_file in image_files:
    # 读取图像
    image = cv2.imread(image_file)
    image_size = (128, 128)
    image = cv2.resize(image, image_size)
    image = image.astype("float32") / 255.0
    image = np.expand_dims(image, axis=0)
    # 进行预测
    predictions = model.predict(image)
    predicted_class_index = np.argmax(predictions[0])
    predicted_class_name = class_names[predicted_class_index]
    print("Image:", image_file, "Predicted class:", predicted_class_name)
    # print("Predicted class:", predicted_class_name)
    # print()

三、分类识别结果

原图:

 模型识别结果:

结论:模型严重过拟合。

原因:分类数据样本量太小。

解决方法:增大样本量、模型调优。

四、注意事项

要成功运行这个程序,你需要注意以下几个关键事项:

  1. 确保所需库已安装
    程序使用了os, cv2 (OpenCV), numpy, 和 tensorflow库。在运行程序之前,请确保这些库已经通过pip或其他方式安装在你的Python环境中。

  2. 模型文件的位置和格式
    确保dog_cat.keras模型文件存在,并且与你的程序在同一个目录下,或者更新model_name变量以包含模型文件的完整路径。同时,确认模型文件没有损坏,并且是与你当前TensorFlow版本兼容的Keras模型。

  3. 图像文件夹和文件格式
    确认imgs文件夹存在,并且包含.jpg格式的图像文件。如果图像文件不是.jpg格式,你需要修改image_files列表的生成逻辑来包含你实际的图像文件格式。

  4. 图像预处理
    程序中将图像大小调整为128x128,并归一化到[0,1]范围。确保这种预处理方式与你的模型训练时的预处理一致。

  5. 类别名称与模型输出匹配
    class_names列表中的类别名称应该与模型训练时的类别顺序相匹配。如果模型是用不同的类别顺序训练的,你需要更新class_names以反映正确的顺序。

  6. 模型输入输出尺寸
    确保你的模型接受的输入尺寸是128x128,因为这是程序中设定的图像大小。如果模型训练时使用了不同的输入尺寸,你需要在程序中做相应的调整。

  7. Python和库的版本兼容性
    确认你的Python环境和所有库的版本是相互兼容的。特别是TensorFlow的版本,因为不同版本的TensorFlow可能在模型加载和行为上有细微差别。

  8. 依赖库的运行时环境
    如果你在某些特定的环境(如Docker容器、虚拟环境或不同操作系统)中运行程序,请确保所有依赖库都已正确安装在这些环境中。

  9. 错误处理
    考虑添加错误处理逻辑来处理文件不存在、模型加载失败、图像读取错误等潜在问题。

  10. 资源限制
    如果你的模型很大或图像数量很多,确保你的系统有足够的内存和计算能力来处理这些任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

换3次燃气灶才明白,原来电焰灶才是最适合的那个

厨房,这个家的温馨角落,不仅承载着美食的诞生,更记录着我对烹饪的热爱与探索。在我漫长的烹饪生涯中,我曾三次更换燃气灶,每一次都带给我不同的体验与感悟。然而,直到最近我换上了华火电焰灶,才…

Spring运维之boot项目开发关键之日志操作以及用文件记录日志

日志基础 日志 在企业级开发中还是比较重要的 我们来写一个日志 RestController RequestMapping("/books") public class Controller {//创建记录日志的对象private static final Logger log LoggerFactory.getLogger(Controller.class);GetMappingpublic String …

BI平台概述

随着数字化浪潮的推进,企业对于数据驱动决策的需求日益增长。纷享销客作为一款领先的CRM平台,一直致力于帮助企业实现销售管理的高效与智能。纷享销客一体化BI智能分析平台作为CRM平台中的重要一环,旨在为企业提供更加全面、深入的数据分析能…

酷开科技丨酷开系统重塑家庭娱乐生态,开启家庭生活新体验

家庭是社会的“基本细胞”。每一个小家都是国家的组成部分,每一个家庭的幸福才会带来整个社会和国家的幸福安定。家庭的意义,是爱、是关心、是陪伴,是一生的牵绊。我们大部分的时间都是在家庭中度过的,与家人相聚的时候&#xff0…

【linux】swap学习

在 Linux 系统中,swap 是一种用于扩展系统内存的技术。当物理内存(RAM)不足时,系统会将一部分不常用的内存数据移至 swap 空间,从而释放物理内存供其他程序使用。Swap 空间可以是一个单独的分区(swap 分区&…

安全生产新篇章:可燃气体报警器检验周期的国家标准解读

随着工业化进程的加快,安全生产成为了重中之重。 可燃气体报警器作为预防火灾和爆炸事故的重要设备,其准确性和可靠性直接关系到企业的生产安全和员工的生命财产安全。 因此,国家对可燃气体报警器的检验周期有着明确的规定,以确…

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…

量化投资分析平台 迅投 QMT(三)字典数据下载后读取成Dataframe形式

量化投资分析平台 迅投 QMT [迅投 QMT](https://www.xuntou.net/?user_code7NYs7O)我目前在使用如何读取下载好的数据出来上代码历史帖子 迅投 QMT 我目前在使用 两个月前(2024年4月)迅投和CQF有一个互动的活动,进行了平台的一个网上路演&…

百度云下载不限速方式集合

百度网盘相信大家都不陌生,可以说百度网盘是当今最流行的网盘之一!我们很多在网上找到的资料大部分都是利用百度网盘分享链接提取码的方式进行分享的!然后根据我们当时的所需,进行资源的下载以完成信息传输的这么一个目。 不过大…

23.Labview中的数值类型讨论 ---- 位(bit)、字节(byte)、I8、U8、单双精度、复数

hello,大家好,本篇向大家介绍一个最常用但最容易让人忽略和最容易犯错的知识:数值。 “数值” 这个概念在Labview中被涉及的还是很多的,几乎任何一个程序都无可避免的会用到,但我相信大家绝大多数人对数值这个概念应用…

UMG绝对坐标与局部空间

在 Unreal Engine 的 UMG(Unreal Motion Graphics)中,“绝对坐标”和“局部空间”是两个常见的概念,主要用于描述 UI 元素的位置和大小。 概念与区别 绝对坐标(Absolute Coordinates):这是指相…

java自学阶段二:JavaWeb开发--day80(项目实战2之苍穹外卖)

《项目案例—黑马苍穹外卖》 目录: 学习目标项目介绍前端环境搭建(前期直接导入老师的项目,后期自己敲)后端环境搭建(导入初始项目,新建仓库使用git管理项目,新建数据库,修改登录功能&#xff…

生成随机图片

package com.zhuguohui.app.lib.tools;/*** Created by zhuguohui* Date: 2024/6/1* Time: 13:39* Desc:获取随机图片*/ public class RandomImage {// static final String url "https://picsum.photos/%d/%d?random%d";static final String url "https://…

如何让Google收录网站?

Google收录网站的前提条件是确保网站可以公开访问,并且页面加载速度需要快,这样Google爬虫才可以访问到你的网站,并且索引你网站中的内容。实现了上面的前提条件,可以通过优化数据结构、创建站点地图、使用Google Search Console、…

Django 视图探秘:FBV与CBV注册方式的异同,揭秘as_view()的执行魔法

文章目录 一、FBV、CBV注册方式及其区别FBVCBV 二、as_view()函数查看对应的view函数具体内容,最终返回的是dispatch方法查看dispatch方法 一、FBV、CBV注册方式及其区别 FBV FBV:path(index/,views.index) 通过调用函数方式,views.index是一…

【Linux】进程(5):命令行参数

大家好,我是苏貝,本篇博客带大家了解Linux进程(5):命令行参数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 (A)为什么要有命令…

推荐一个远程数据库 Supabase

地址:Supabase | The Open Source Firebase Alternative 使用文档: Supabase Docs

数据库 | 模式分解

1. 无损连接保持依赖 要有一个关系有两个依赖码

linux系统——计算机网络协议,ifconfig命令

在linux系统中,可以在指定文件查看网卡名,进而使用ifconfig网卡名查询相应网络信息

RH850F1KM——ADC模块

文章目录 前言一、Conversion time:转换时间二、参考电压三、分辨率scan group四、虚拟通道模数转换器-ADC基础 Autosar MCAL配置——ADC 前言 在RH850F1KM系列MCU中,ADCA模块即为ADC模块,如下是各个型号所具有的ADC物理单元。 时钟的频率决定ADC的触发频率,转换时间和采样…