深度学习——自己的训练集——图像分类(CNN)
图像分类
- 1.导入必要的库
- 2.指定图像和标签文件夹路径
- 3.获取文件夹内的所有图像文件名
- 4.获取classes.txt文件中的所有标签
- 5.初始化一个字典来存储图片名和对应的标签
- 6.遍历每个图片名的.txt文件
- 7.随机选择一张图片进行展示
- 8.构建图像的完整路径
- 9.加载图像
- 10.检查图像是否为空
随机找100张图片,然后进行打标签,我用的labelImg打标签,存储的格式为.txt格式。
图片存储在‘561’文件夹中,标签存储在‘99’文件夹中。
把100图片的标签分别是sad,happy,amazed,anger。
1.导入必要的库
cv2
: 这是OpenCV库的别名,它是一个强大的计算机视觉库,用于图像和视频处理。
matplotlib.pyplot as plt
: Matplotlib是一个绘图库,pyplot是其中的一个模块,它提供了一个类似于MATLAB的绘图框架。plt是matplotlib.pyplot的常用别名。
numpy as np
: NumPy是一个用于科学计算的库,它提供了高效的数组处理能力,对于图像处理等任务非常有用。
os
: 这个模块提供了与操作系统交互的功能,比如文件和目录操作。
random
: 这个模块提供了生成随机数的函数。
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
import random
2.指定图像和标签文件夹路径
images_folder = 'D:/rgzn/face/DATASET/561'
labels_folder = 'D:/rgzn/face/DATASET/99'
3.获取文件夹内的所有图像文件名
os.listdir()
函数用于列出指定目录下的所有文件和子目录。
os.path.isfile()
函数用于检查一个路径是否指向一个文件。
os.path.join()
函数用于将目录和文件名组合成一个完整的文件路径。
这行代码的目的是从一个指定的文件夹中获取所有图像文件的列表。
image_files = [f for f in os.listdir(images_folder) if os.path.isfile(os.path.join(images_folder, f))]
os.listdir(images_folder)
:这个函数调用返回一个列表,包含images_folder目录下的所有文件和子目录的名称。
for f in os.listdir(images_folder)
:这是一个循环,它遍历images_folder目录下的每个文件和子目录的名称。在每次迭代中,f变量被设置为当前文件或子目录的名称。
os.path.isfile(os.path.join(images_folder, f))
:这个条件用于检查f是否是一个文件。os.path.join(images_folder, f)创建一个完整的文件路径,将images_folder目录的路径和f(文件或子目录的名称)连接起来。
[f for f in os.listdir(images_folder) if os.path.isfile(os.path.join(images_folder, f))]
:这个列表推导式创建一个新的列表,只包含那些通过os.path.isfile()检查确认为文件的f值。
4.获取classes.txt文件中的所有标签
with open(os.path.join(labels_folder, 'classes.txt'), 'r') as file:labels = file.readlines()
labels = [label.strip() for label in labels] # 去除末尾的换行符
with open(os.path.join(labels_folder, ‘classes.txt’), ‘r’) as file:
os.path.join(labels_folder, 'classes.txt')
:这个函数调用用于创建一个完整的文件路径,将labels_folder目录的路径和classes.txt文件名连接起来。
with open(...) as file
:这是一个上下文管理器(context manager),它用于自动处理文件资源的打开和关闭。当with语句执行完成后,文件会自动关闭,即使遇到异常也是如此。
file
:这是上下文管理器创建的一个文件对象,可以用来读取文件内容。
labels = file.readlines()
file.readlines()
:这个方法调用用于读取文件中的所有行,并将它们作为一个字符串列表返回。每一行都是一个列表项。
labels = ...
:这个赋值语句将读取到的行列表赋值给变量labels。
labels = [label.strip() for label in labels]
这是一个列表推导式(list comprehension),它遍历labels列表中的每个字符串(即文件中的每行内容)。
label.strip()
:这个方法调用用于去除字符串首尾的空白字符(如空格、换行符等)。
for label in labels
:这个循环遍历labels列表中的每个字符串。
[...]
:这个列表推导式创建一个新的列表,包含去除空白字符后的字符串。
5.初始化一个字典来存储图片名和对应的标签
image_labels = {}
6.遍历每个图片名的.txt文件
for image_file in image_files:# 构建图片名.txt文件的完整路径
image_name = os.path.splitext(image_file)[0] # 获取不带扩展名的图片名txt_path = os.path.join(labels_folder, image_name + '.txt')# 读取图片名.txt文件的内容with open(txt_path, 'r') as file:lines = file.readlines()# 假设每行包含一个数字序列numbers = lines[0].strip().split() # 假设每行由空格分隔# 根据数字序列的第一个数字确定标签# 根据您提供的映射关系label_index = int(numbers[0])label = labels[label_index]# 将图片名和对应的标签存储在image_labels字典中
image_labels[image_file] = label
image_name = os.path.splitext(image_file)[0]:
os.path.splitext(image_file)
:这个函数调用用于将image_file(一个文件名)分割成两部分:文件名和扩展名。返回的元组中的第一部分是文件名,第二部分是扩展名。
[0]
:这个索引操作符用于获取元组中的第一个元素,即不带扩展名的文件名。
txt_path = os.path.join(labels_folder, image_name + ‘.txt’):
os.path.join(labels_folder, image_name + '.txt')
:这个函数调用用于创建一个完整的文件路径,将labels_folder目录的路径和image_name(不带扩展名的文件名)连接起来,并在最后加上.txt扩展名。
txt_path
:这个变量存储了.txt文件的完整路径。
with open(txt_path, 'r') as file::
with open(...) as file:
:这是上下文管理器,用于自动处理文件资源的打开和关闭。
file
:这个变量是上下文管理器创建的文件对象,用于读取.txt文件的内容。
lines = file.readlines():
file.readlines()
:这个方法调用用于读取.txt文件中的所有行,并将它们作为一个字符串列表返回。每一行都是一个列表项。
lines
:这个变量存储了.txt文件中所有行的列表。
numbers = lines[0].strip().split():
lines[0]
:这个索引操作符用于获取.txt文件中第一行的内容。
.strip()
:这个方法调用用于去除字符串首尾的空白字符(如空格、换行符等)。
.split()
:这个方法调用用于根据指定的分隔符(在这个例子中是空格)将字符串分割成列表。
numbers
:这个变量存储了.txt文件第一行内容去除空白字符并分割成列表后的版本。
label_index = int(numbers[0]):
int(numbers[0])
:这个函数调用用于将列表numbers的第一个元素(即标签的索引)转换为整数。
label_index
:这个变量存储了标签的索引。
label = labels[label_index]:
labels[label_index]
:这个索引操作符用于根据label_index变量中存储的索引,从labels列表中获取对应的标签字符串。
label
:这个变量存储了从.txt文件中解析出的标签。
7.随机选择一张图片进行展示
#调用用于生成一个随机整数,其范围是从0到image_files列表的长度减1。
random_index = random.randint(0, len(image_files) - 1)#根据random_index变量中存储的随机索引值,从image_files列表中获取对应的图像文件名。
image_name = image_files[random_index]#用于根据image_name变量中存储的图像文件名,从image_labels字典中获取对应的标签。
label = image_labels[image_name]
8.构建图像的完整路径
创建一个完整的文件路径,将images_folder目录的路径和image_name连接起来。
image_path:这个变量存储了随机选择的图像文件的完整路径。
image_path = os.path.join(images_folder, image_name)
9.加载图像
读取图像文件
image = cv2.imread(image_path)
10.检查图像是否为空
#用于确定image变量是否为None
if image is None:
#图像加载失败,打印一条错误消息。print("Error: Failed to load image.")
else:
# 显示图像
#将图像从OpenCV的BGR颜色空间转换为Matplotlib的RGB颜色空间。OpenCV默认使用BGR颜色空间,而大多数图像处理库和图形界面(如Matplotlib)使用RGB颜色空间。plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title(f'Label: {label} Image: {image_name}')
#用于关闭图像的坐标轴。这使得图像占据整个窗口,而不是在坐标轴周围留有空白。
plt.axis('off')
#显示图像。
plt.show()
相关文章:

深度学习——自己的训练集——图像分类(CNN)
图像分类 1.导入必要的库2.指定图像和标签文件夹路径3.获取文件夹内的所有图像文件名4.获取classes.txt文件中的所有标签5.初始化一个字典来存储图片名和对应的标签6.遍历每个图片名的.txt文件7.随机选择一张图片进行展示8.构建图像的完整路径9.加载图像10.检查图像是否为空 随…...

goimghdr,一个有趣的 Python 库!
更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - goimghdr。 Github地址:https://github.com/corona10/goimghdr 在图像处理和分析过程中,识别图像文件的类型是一个常见的需求。Python自带的imghdr…...
每小时电量的计算sql
计算思路,把每小时的电表最大记录取出来,然后用当前小时的最大值减去上个小时的最大值即可。 使用了MYSQL8窗口函数进行计算。 SELECT b.*,b.epimp - b.lastEmimp ecValue FROM ( SELECT a.deviceId,a.ctime,a.epimp, lag(epimp) over (ORDER BY a.dev…...

自动化您的任务——crewAI 初学者教程
今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息:crewAI。 我将在这里或那里跳过一些内容,使本教程成为一个精炼的教程,概述帮助您入门的关键概念和要点 今天,我写这篇文章是为了…...

K8s集群中的Pod调度约束亲和性与反亲和性
前言 在 K8s 集群管理中,Pod 的调度约束——亲和性(Affinity)与反亲和性(Anti-Affinity)这两种机制允许管理员精细控制 Pod 在集群内的分布方式,以适应多样化的业务需求和运维策略。本篇将介绍 K8s 集群中…...
kafka之consumer参数auto.offset.reset
Kafka的auto.offset.reset 参数是用于指定消费者在启动时如何处理偏移量(offset)的。这个参数有三个主要的取值:earliest、latest和none。 earliest: 当各分区下有已提交的offset时,从提交的offset开始消费;…...

回答篇二:测试开发高频面试题目
引用之前文章:测试开发高频面试题目 本篇文章是回答篇(持续更新中) 1. 在测试开发中使用哪些自动化测试工具和框架?介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…...

React18 apexcharts数据可视化之甜甜圈图
03 甜甜圈图 apexcharts数据可视化之甜甜圈图。 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式: 基本甜甜圈图个性图案的甜甜圈图渐变色的甜甜圈图 面包圈 import ApexChart from react-apexcharts;export function DonutUpdate() {// 数据…...

如何通过OpenHarmony的音频模块实现录音变速功能?
简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会孵化及运营的开源项目,是面向全场景、全连接、全智能时代的智能物联网操作系统。 多媒体子系统是OpenHarmony系统中的核心子系统,为系统提供了相机、…...

探索 Rust 语言的精髓:深入 Rust 标准库
探索 Rust 语言的精髓:深入 Rust 标准库 Rust,这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力,也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功࿰…...

Log360:护航安全,远离暗网风险
暗网有时候就像是一个神秘的地下世界,是互联网的隐蔽角落,没有任何规则。这是一个被盗数据交易、网络犯罪分子策划下一步攻击的地方。但仅仅因为它黑暗,不意味着你要对潜在的威胁视而不见。 暗网 这就是ManageEngine Log360的用武之地&…...

react使用antd警告:Warning: findDOMNode is deprecated in StrictMode.
警告信息: Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DOMWrap which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: htt…...
Docker Swarm - 删除 worker 节点
1、前提:集群环境已经运行 在manager节点上执行: # 查看节点信息 >>> docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION jr06s8pbrclkrxt7jpy7wae8t * iZ2ze78653g2…...

AI视频智能分析技术赋能营业厅:智慧化管理与效率新突破
一、方案背景 随着信息技术的快速发展,图像和视频分析技术已广泛应用于各行各业,特别是在营业厅场景中,该技术能够有效提升服务质量、优化客户体验,并提高安全保障水平。TSINGSEE青犀智慧营业厅视频管理方案旨在探讨视频监控和视…...

骨折分类数据集1129张10类别
数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1129 分类类别数:10 类别名称:["avulsion_fracture",…...

Follow Your Pose: Pose-Guided Text-to-Video Generation using Pose-Free Videos
清华深&港科&深先进&Tencent AAAI24https://github.com/mayuelala/FollowYourPose 问题引入 本文的任务是根据文本来生成高质量的角色视频,并且可以通过pose来控制任务的姿势;当前缺少video-pose caption数据集,所以提出一个两…...

记录一次开源 MaxKey 安装部署
官方文档:https://www.maxkey.top/doc/docs/intro/ 开源代码:https://toscode.mulanos.cn/dromara/MaxKey 发行版:https://toscode.mulanos.cn/dromara/MaxKey/releases 一、准备工作 yum install -y yum-utils yum-config-manager --add-r…...
k8s基础命令
#查看pod kubectl get pod -n 命名空间 或者 kubectl get pod -n 命名控江 -o wide 例如: kubectl get pod -n databank-dev #查看deployment控制器 kubectl get deploy -n 命名空间 kubectl get deploy -n databank-dev #查看命名控制(namespace&am…...

【云原生_K8S系列】认识 Kubernetes
在当今数字化转型的浪潮中,企业对于构建高效、灵活的软件架构有了更高的期望。而在这个迅速变化的环境中,容器化技术如雨后春笋般涌现,为解决传统部署和管理软件所带来的挑战提供了一种全新的解决方案。在众多容器编排工具中,Kube…...

性能猛兽:OrangePi Kunpeng Pro评测!
1.引言 随着物联网和嵌入式系统的不断发展,对于性能强大、资源消耗低的单板计算机的需求也日益增加。在这个快节奏的技术时代,单板计算机已成为各种应用场景中不可或缺的组成部分,从家庭娱乐到工业自动化,再到科学研究࿰…...
使用逆强化学习对网络攻击者的行为偏好进行建模
摘要 本文提出了一种整体方法,利用逆强化学习(IRL)从系统级审计日志中对攻击者偏好进行建模。对抗建模是网络安全中的一项重要能力,它使防御者能够描述潜在攻击者的行为特征,从而能够归因于已知的网络对抗团体。现有方…...
阿里云云效对接SDK获取流水线制品
参考文档: API旧版 企业令牌 https://help.aliyun.com/zh/yunxiao/developer-reference/api-reference API新版 个人令牌 https://help.aliyun.com/zh/yunxiao/developer-reference/api-reference-standard-proprietary API 个人令牌 https://www.alibabacloud.com…...
Linux之守护进程
在Linux系统中,进程一般分为前台进程、后台进程和守护进程3类。 一 守护进程 定义: 1.守护进程是在操作系统后台运行的一种特殊类型的进程,它独立于前台用户界面,不与任何终端设备直接关联。这些进程通常在系统启动时启动,并持…...
5G 核心网 UE 状态深度剖析:机制、迁移与演进
摘要 本文围绕 5G 核心网中 UE(用户设备)状态展开系统分析,详细阐述了 UE 状态的定义、分类及特点,深入探讨各状态间的迁移流程与关键技术,并结合典型应用场景分析其实际价值。同时,对比 4G 技术剖析 5G 的改进之处,展望 6G 时代 UE 状态管理的演进方向,为 5G 网络优化…...
数据结构-代码总结
下面代码自己上完课写着玩的,除了克鲁斯卡尔那里完全ai,其他基本上都是自己写的,具体请参考书本,同时也欢迎各位大佬来纠错 线性表 //线性表--顺序存储结构 #include<iostream> using namespace std; template<typename T> …...
数据编辑器所具备的数据整理功能
在企业的数据处理过程中,数据清洗与整理是至关重要的环节,而数据编辑器在这方面发挥着关键作用。在一份包含客户信息的数据表中,常常会出现缺失值的情况。比如客户的年龄、联系方式等字段可能因为各种原因没有被记录,这就形成了缺…...
【Vim】高效编辑技巧全解析
本篇将从光标移动技巧、常用快捷操作、组合命令运用等方面逐步讲解 vim 的使用。 📘 高效光标移动技巧 在 Vim 中,光标移动是编辑效率的核心之一。以下是一些必须掌握的移动命令,按使用频率和实用程度分类整理: 🔹 基…...
SQL进阶之旅 Day 9:高级索引策略
【SQL进阶之旅 Day 9】高级索引策略 在SQL查询性能调优中,索引是最为关键的优化手段之一。Day 3我们已经介绍了基础索引类型,今天我们将深入探讨高级索引策略,包括覆盖索引、索引选择性分析、强制使用索引等实用技巧。这些技术能显著提升复杂…...
Spring Data Redis 实战指南
Spring Data Redis 核心特性 Spring Data Redis 是基于 Redis 的 NoSQL 内存数据结构存储解决方案,为 Spring 应用程序提供与 Redis 交互的高级抽象层。其核心架构设计体现了对现代应用需求的深度适配,主要技术特性可归纳为以下维度: 数据结构支持体系 作为多模型数据存储…...

linux 1.0.3
挂载 这个虚拟机啥时候都能挂起 会有一个这个东东 选择连接虚拟机,然后就连到linux了 这有两个键,一个是和主机连接一个是和虚拟机连接 先把U盘拔掉 原本是没有这个盘的,但是插上去之后,电脑创建了一个虚拟的盘 也就是图中的F…...