企业网站怎样做优化,石家庄关键词优化软件,nodejs 网站开发模块,长安东莞网站设计Class9的任务#xff1a;处理单张图像
为了更高效地学习#xff0c;我们将“处理单张图像”拆分成以下几步完成#xff1a; 1. 读取图像文件 2. 调用通用物体识别 3. 提取图像分类信息 4. 对应分类文件夹还未创建时#xff0c;创建文件夹 5. 移动图像到对应文件夹
0.获取…Class9的任务处理单张图像
为了更高效地学习我们将“处理单张图像”拆分成以下几步完成 1. 读取图像文件 2. 调用通用物体识别 3. 提取图像分类信息 4. 对应分类文件夹还未创建时创建文件夹 5. 移动图像到对应文件夹
0.获取了图像路径
整理清楚解决问题的思路以后我们开始获取图像路径。我们直接从铭铭的文件夹img中选出一张图像cat.jpg。它的路径可以表示为 /Users/img/cat.jpg 。
# TODO 将照片路径/Users/img/cat.jpg赋值给变量filePath
filePath /Users/img/cat.jpg
1. 读取图像文件
接下来需要读取图像内容。在读取图像内容时需要先打开图像文件。前面我们直接用open() 函数来打开文件但是open() 函数在读取文件时有时候会发生异常。为了能在发生异常时自动释放打开的文件资源我们可以搭配使用 with...as...语句。
# 使用with...as以rb方式打开路径为filePath的图片并赋值给f
with open(filePath, rb) as f:
接着读取图像。在这里我们可以调用 read() 函数read() 函数可以逐个字节或者逐个字符读取文件中的内容。由于是以二进制格式打开图像所以读取的图像内容是二进制格式。调用 read() 函数读取变量f并赋值给变量 image使用 print() 输出 image。
# 使用read()读取f赋值给变量image image f.read() # 使用print()输出变量image
print(image)
2.调用通用物体识别
这样我们就完成了读取图像的操作。接下来我们调用接口实现对图像物体的识别。当然在调用之前我们首先得了解什么是通用物体识别接口。 调用通用物体识别
代码的作用
这几行高亮的代码利用通用物体识别接口对一张输入图片输出其中的多个物体及场景标签。 第9-19行是我们在上节课中创建的图像识别客户端。 第22行通过advancedGeneral接口识别输入的图像image并将结果存储在ending变量中。 第24行将结果输出查看。 Ps待识别的图像
必选参数image图像数据支持jpg/png/bmp格式 要求大小不超过4M最短边至少15px最长边最大4096px否则会识别失败。可
调用通用物体识别
对刚刚新建的AipImageClassify对象--client使用advancedGeneral( )函数。 将待识别的图像必选参数image传入到该函数中即可。
赋值给ending
调用接口返回的结果赋值给ending并输出进行查看。
Ps 使用advancedGeneral()函数调用通用物体识别接口。 将待识别的图像必选参数image传入到该函数中。 输出调用接口返回的结果ending。 O(∩_∩)O哈哈~作者有点忘记了之前的知识所以又回去看了看
复习在Python编程语言中字典Dictionary、列表List和元组Tuple是三种不同的内置数据结构每种都有其独特的特点和用途
列表List
有序集合列表中的元素有固定的顺序可以通过索引从0开始访问。可变列表中的元素可以被修改可以增加、删除或改变元素。支持元素的多样性列表可以包含不同类型的元素包括数字、字符串、其他列表等。支持嵌套列表可以包含其他列表嵌套列表。方法多样Python为列表提供了大量的方法如append(), remove(), pop(), reverse()等
例子:
my_list [1, Hello, 3.14, [2, 4, 6]]
my_list[2] pi # 修改第三个元素
元组Tuple
有序集合元组和列表类似元素有固定的顺序通过索引访问。不可变一旦创建元组中的元素不能被修改。支持元素的多样性元组也可以包含不同类型的元素。支持嵌套元组可以包含其他元组、列表、字典等。内存效率相较于列表元组占用的空间通常更小创建速度更快。
例子
my_tuple (1, Hello, 3.14, (2, 4, 6))
# my_tuple[2] pi # 这会引发TypeError因为元组不可变
字典Dictionary
无序集合字典存储键值对但它们是无序的在Python 3.7及以后的版本中字典记住了插入顺序但这是一个实现细节不应依赖于这一点来保证跨版本的一致性。可变可以添加、删除或修改键值对。键必须是不可变的如字符串、数字或元组但值则可以是任何数据类型。不支持索引字典通过键来访问数据不像列表和元组使用索引。查找效率高字典在大数据集中查找元素时非常快因其基于哈希表实现。
例子
my_dict {name: Alice, age: 25, is_student: True}
my_dict[age] 26 # 修改键age对应的值
回到现在的class
调用通用物体识别的描述
调用通用物体识别需要传入一个必选参数
调用通用物体识别返回数据参数有很多种
AipImageClassify是图像识别的Python SDK客户端提供了一系列的交互方法所以在调用通用物体识别之前必须提前创建AipImageClassify。
调用通用物体识别输入一张图片可以输出图片中的多个物体及场景标签
3.提取分类结果查看输出结果我们从result中的参数root就能得到分类信息。调用接口返回的是一个复杂的字典结构我们将它赋值给了变量ending。从字典ending中取出参数result的值可以用ending[result]。 前三步的代码
# 1.读取图像文件
# 将照片路径/Users/img/cat.jpg赋值给变量filePath
filePath /Users/img/cat.jpg
# 使用with...as以rb方式打开路径为filePath的图片并赋值给f
with open(filePath, rb) as f: # 使用read()读取f赋值给变量img image f.read() # 2.调用通用物体识别
# 从aip中导入AipImageClassify
from aip import AipImageClassify
# 将AppID10252021赋值给变量APP_ID
APP_ID 10252021
# 将API KeyZHe7788sh11GEjIAdEKeY赋值给变量API_KEY
API_KEY ZHe7788sh11GEjIAdEKeY
# 将Secret KeyJMMzHe7788BUSH1ZhEnM1YUEhh赋值给变量SECRET_KEY
SECRET_KEY JMMzHe7788BUSH1ZhEnM1YUEhh
# 新建一个AipImageClassify并赋值给变量client
client AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
# 调用通用物体识别接口并把结果赋值给ending
ending client.advancedGeneral(image) # 3.提取图像分类信息
# 从返回结果中提取出参数result的值并赋值给变量value
value ending[result]
# 使用print()输出变量value
print(value)
得到的ending[result]是一个列表结构。 我们只取列表ending[result]中的第一个元素就是ending[result][0]。 研究得到所需要的内容 接下来我们直接用识别结果组成分类文件夹路径作为移动图像的目标地址。用字符串拼接的方式拼接铭铭的文件夹img 、/、变量 value将拼接后的字符串赋值给变量 targetPath。 4. 对应分类文件夹还未创建时创建文件夹
确定了每个文件需要移动的目标地址在移动前还需要确定目标文件夹是否存在。 如果目标文件夹已经存在直接创建会报错如果不存在需要先创建。 例如cat.jpg 要移动到动物-猫这个文件夹中需要先检查 img文件夹中是否已经创建了名为动物-猫的文件夹。 判断文件(夹)是否存在
代码的作用
得到了目标文件夹的路径后我们可以使用 os.path.exists() 函数来判断该文件夹是否已经存在。
代码
# 将分类文件夹路径赋值给变量targetPath
targetPath /Users/img/动物-猫 # 使用import导入os模块
import os
# 如果目标文件夹不存在
if not os.path.exists(targetPath): # 使用print输出目标路径
print(targetPath)
分析代码
os模块
在对文件进行处理之前首先要使用import 导入 os 模块。os 模块可用于文件处理操作os 模块是Python的内置模块不需要安装可以直接导入。
判断文件夹是否存在
os.path.exists() 函数接受一个路径字符串作为参数判断返回的结果是布尔数。 当该路径的文件夹存在时返回True不存在时则返回False。
Psos.path.exists(targetPath) 是Python中的一个函数调用该函数用于检查给定的路径 targetPath 是否存在。如果路径存在无论是文件还是目录它都会返回 True如果路径不存在它则返回 False。
if not
if 语句用于判断当前条件的真假只有满足条件时才会执行if语句中的内容。 我们要输出结果为 False 的文件名这里就需要使用关键字 not 运算符 搭配 os.path.exists() 函数再使用 if语句 来判断结果并输出。
因此我们在得到了目标文件夹的路径后就可以使用 os.path.exists() 函数来判断目标文件夹是否已经存在。通过 if 判断语句 not 运算符来判断目标文件夹不存在的情况。
简单介绍一下os模块
在Python中os模块提供了丰富的方法用以与操作系统交互。通过使用os模块你可以执行文件系统操作如文件的创建、删除、移动、更改名称以及获取文件属性等。此外os模块还允许你与操作系统进行交互如获取和设置环境变量处理进程参数以及使用与平台无关的路径操作等。
以下是一些os模块的常用功能
文件系统操作
os.listdir(path): 列出指定路径下的文件和目录名。os.mkdir(path): 创建新目录。os.makedirs(path): 递归创建多层目录。os.remove(path): 删除一个文件。os.rmdir(path): 删除一个空目录。os.removedirs(path): 递归删除目录从子目录到父目录依次删除。os.rename(src, dst): 重命名文件或目录。os.stat(path): 获取文件或目录的状态信息。
路径操作
os.path.join(path1[, path2[, ...]]): 拼接一个或多个路径组件。os.path.split(path): 将路径分割成目录和文件名二元组返回。os.path.exists(path): 检查路径是否存在。os.path.isfile(path): 检查路径是否为文件。os.path.isdir(path): 检查路径是否为目录。os.path.abspath(path): 获取绝对路径。os.path.basename(path): 获取路径的基本名称。os.path.dirname(path): 获取路径的目录名称。os.path.getsize(path): 获取路径的文件大小。
环境操作
os.environ: 一个表示环境变量的字典。os.getenv(key, defaultNone): 获取一个环境变量如果不存在则返回默认值。os.putenv(key, value): 设置一个环境变量值。
其他
os.system(command): 运行系统命令。os.name: 字符串指示你正在使用的平台。比如对于Windows它是nt而对于Linux/Unix用户它是posix。os.getpid(): 获取当前进程ID。os.getuid(): 获取当前用户的ID仅在Unix下有效。os.getlogin(): 返回当前登录系统的用户名。
下一步
创建文件夹
代码的作用
找到未创建的文件夹以后我们就可以使用 os.mkdir() 函数来创建文件夹。 创建文件夹
创建文件夹可以使用 os.mkdir() 函数将要创建的文件夹路径作为参数传入函数中即可。
5. 移动图像到对应文件夹
创建完文件夹我们打开img文件夹就可以看到刚刚创建的动物-猫这个文件夹。一切准备就绪接下来完成最后一步将cat.jpg移动图像到对应的文件夹动物-猫中。 移动文件夹
代码的作用
这里可以使用shutil.move()函数移动文件将图像移动到目标文件夹中。
# 导入shutil模块
import shutil
# 使用shutil.move()函数移动文件将图像移动到目标文件夹中
# 将结果赋值给变量newPath
newPath shutil.move(filePath, targetPath)
# 使用格式化输出已经移动到{newPath}
print(f已经移动到{newPath})
分析代码
导入shutil模块
要想移动文件我们需要导入Python中另一个内置的模块 shutil 。 使用import 导入 shutil 模块。
移动文件
shutil.move() 函数可以用来移动文件或文件夹。 它接收两个参数第一个参数是要移动的文件夹路径第二个参数是目标文件夹的路径。 next class处理多张图片