【class9】人工智能初步(处理单张图片)

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

# 将AppID"10252021"赋值给变量APP_ID

APP_ID = '10252021'

# 将API Key"ZHe7788sh11GEjIAdEKeY"赋值给变量API_KEY

API_KEY = 'ZHe7788sh11GEjIAdEKeY'

# 将Secret Key"JMMzHe7788BUSH1ZhEnM1YUEhh"赋值给变量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, default=None): 获取一个环境变量,如果不存在则返回默认值。
  • 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,处理多张图片

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

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

相关文章

Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置

目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本:22.04.3 位数:64-bit 二…

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明: 项目A是现在的vue2前端项目,项目B是一个开源的工作流前端,项目后端代码已经整合了,就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能,拷贝到自己对应的vue2项目里…

大模型MoE技术深度解读,引领AI走向新高度

大模型系列之解读MoE Mixtral 8x7B的亮相,引领我们深入探索MoE大模型架构的奥秘。MoE究竟是什么?一起揭开它的神秘面纱。 1. MoE溯源 MoE,源自1991年的研究论文《Adaptive Mixture of Local Experts》,与集成学习方法相契合&…

机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)

一、简述 在最近的研究中,出现了号称传统多层感知器 (MLP) 的突破性替代方案,重塑了人工神经网络 (ANN) 的格局。这种创新架构被称为柯尔莫哥洛夫-阿诺德网络 (KAN),它提出了一种受柯尔莫哥洛夫-阿诺德表示定理启发的函数逼近的方法。 与 MLP 不同,MLP 依赖于各个节…

NASA数据集——GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT)

AIRS-AMSU variables-CloudSat cloud mask, radar reflectivities, and cloud classification matchups V3.2 (AIRSM_CPR_MAT) at GES DISC GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT) 简介 这是 NetCDF-4 格式的 AIRS-CloudSat 定位子…

餐谱的展示程序

开发背景 可以根据分类直接找到需要展示的餐谱,大的分类A、B、C、D等 二级分类 A1、A2、A3、A4。。。 餐谱就是图片 加 说明 页面 选择一级分类A,选择二级分类A1,查询出该分类下的餐谱 代码 /*** 查询列表*/RequiresPermissions("…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 (1)Express定义: Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面

Python代码:一、HelloWorld

1、题目: 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来。 2、代码 import sys str Hello World ! print(str)3、在sublime运行的结果

第18节 神级开源shellcode工具:donut

我做了一个关于shellcode入门和开发的专题👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。 我的…

python创建新环境并安装pytorch

python创建新环境并安装pytorch 一、创建新环境1、准备工作2、创建虚拟环境并命名3、激活虚拟环境 二、安装pytorch1、pytorch官网2、选择与你的系统相对应的版本3、安装成功 一、创建新环境 1、准备工作 本次创建的环境是在anaconda环境下,否则需要在纯净环境下创…

AutoNeRF:Training Implicit Scene Representations with Autonomous Agents

论文概述 《AutoNeRF》是由Pierre Marza等人撰写的一篇研究论文,旨在通过自主智能体收集数据来训练隐式场景表示(如神经辐射场,NeRF)。传统的NeRF训练通常需要人为的数据收集,而AutoNeRF则提出了一种使用自主智能体高效…

Spring Boot | Spring Boot 中 自定义“用户退出控制“、获取“登录用户信息“

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 ) :二、 自定义 "用户退出控制" ( 通过 "HttpSecurity类" 的 logout( )方法来实现 "自定义用户用户登录控制" ) :1.基础项目文件准备2.实现 "自定义身份认证"…

springboot005学生心理咨询评估系统

springboot005学生心理咨询评估系统 亲测完美运行带论文:获取源码,私信评论或者v:niliuapp 运行视频 包含的文件列表(含论文) 数据库脚本:db.sql其他文件:ppt.ppt论文:开题.doc论文&#xf…

WT99C262-SG LoRa开发板使用教程

WT99C262-SG模块是全新一代的Wi-FiBLELoRa无线扩频模块,基于启明云端WTLRC262-SG系列模组设计开发的新一代LoRa扩频芯片方案设计的无线串口模块。具有多种传输方式,LoRa扩频技术,且模组大部分管脚均已引出至两侧排针,开发人员可根…

爬虫界的“闪电侠”:异步爬虫与分布式系统的实战秘籍

Hi,我是阿佑,前文给大家讲了,如何做一个合法“采蜜”的蜜蜂,有了这么个自保的能力后,阿佑今天就将和大家踏入 —— 异步爬虫 的大门! 异步爬虫大法 1. 引言1.1 爬虫框架的价值:效率与复杂度管理…

卷轴分红商城模式:适用于多种的商业营销模式

卷轴分红商城模式是一种基于区块链技术的去中心化积分商城系统,通过智能合约和数字资产分红实现积分流通和价值回馈,适用于多种场景。 什么是卷轴分红商城模式: 这是一个去中心化的积分商城系统,消费者在商城消费时,可…

番外篇 | 一文读懂卷积神经网络(CNN)的基础概念及原理

前言:Hello大家好,我是小哥谈。卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。本文旨在对卷积神经网络进行详细的讲解,从基本原理到实际应用,帮助读者全面了解CNN的工作原理、优势和基本组成等,以及其在现实生…

异步编程CompletableFuture总结

文章目录 1. 简介:2. 比较1、传统方式2、使用CompletableFuture:异步执行返回值 3、组合处理:anyOfallof : 4. 异步回调:thenAcceptthenApplywhenComplete等同于 thenAccepthandel()等同于thenApply 5. 常用方法:1、su…

Python——IO编程

IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 比如你打开浏览器,访问新浪…