智能前端项目开发 课件全套 刘忠杰 模块1 认知人工智能基础 -项目4 人脸识别打卡项目设计与实现_第1页
智能前端项目开发 课件全套 刘忠杰 模块1 认知人工智能基础 -项目4 人脸识别打卡项目设计与实现_第2页
智能前端项目开发 课件全套 刘忠杰 模块1 认知人工智能基础 -项目4 人脸识别打卡项目设计与实现_第3页
智能前端项目开发 课件全套 刘忠杰 模块1 认知人工智能基础 -项目4 人脸识别打卡项目设计与实现_第4页
智能前端项目开发 课件全套 刘忠杰 模块1 认知人工智能基础 -项目4 人脸识别打卡项目设计与实现_第5页
已阅读5页,还剩655页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《智能前端项目开发》追溯AI发展历程与核心流派人工智能发展历程人工智能(Artificialintelligence,AI)是在1956年作为一门新兴学科的名称正式提出的,它是研究用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统。达特茅斯会议的最主要成就是使人工智能成了一个独立的研究学科,并首次提出“人工智能(ArtificialIntelligence,简称AI)”这一概念,也标志着人工智能学科的诞生。人工智能发展历程人工智能诞生后的六十余年,AI经历多次繁荣与低谷。学习AI技术,需先理解这段曲折的发展历程,以及不同时期学者对"智能"本质有不同理解。我们将人工智能的发展历程划分为以下6个阶段:第一次繁荣期>第一次低谷期>第二次繁荣期>第二次低谷期>稳步发展期>蓬勃发展期人工智能核心流派对人工智能研究影响较大的主要有符号主义、联结主义和行为主义三大学派。符号主义学派认为人工智能源于数学逻辑,人类认知和思维的基本单元是符号,而认知过程就是在符号表示上的一种运算。符号主义致力于用某种符号来描述人类的认知过程,并把这种符号输入到能处理符号的计算机中,从而模拟人类的认知过程,实现人工智能。人工智能核心流派在哲学上,关于物理符号系统假设也有一个著名的思想实验就是图灵测试。人工智能核心流派连接学派通过算法模拟神经元,并把这样一个单元叫做感知机,将多个感知机组成一层网络,多层这样的网络互相连接最终得到神经网络。联结主义学派从神经生理学和认知科学的研究成果出发,把人的智能归结为人脑的高层活动的结果,强调智能活动是由大量简单的单元通过复杂的相互连接后并行运行的结果。我人工智能核心流派行为主义是一种基于“感知—行动”的行为智能模拟方法。行为主义学派认为,行为是有机体用以适应环境变化的各种身体反应的组合,它的理论目标在于预见和控制行为。行为主义是20世纪末才以人工智能新学派的面孔出现的,引起许多人的兴趣。这一学派的代表作首推布鲁克斯(Brooks)的六足行走机器人,它被看作新一代的“控制论动物”,是一个基于感知-动作模式的模拟昆虫行为的控制系统。绘制AI发展时间线1950s1960s1970s1980s1990s2000s2010s2020s1956年,达特茅斯会议提出“人工智能”1959年,ArthurSamuel提出机器学习1956~1976第一次繁荣期达特茅斯会议,确定了人工智能的概念和发展目标1976年,机器翻译等项目的失败及一些学术报告的负面影响,人工智能的经费普遍减少1985年,出现了更强的可视化效果的决策树模型和突破早期感知局限的多层人工智能网络1987年,LISP机市场崩塌,专家系统实用性局限的问题也逐渐暴露出来1997年,DeepBlue战胜世界国际象棋冠军GarryKasparrov2006年,Hinton及其团队在深度学习领域取得重大突破2010年,大数据时代到来2014年,微软公司发布全球第一款人工智能助理微软小娜2016年3月,AlphaGo以4:1战胜世界围棋冠军李世石2017年10月,DeepMind团队发布了最强版的AlphaGoZero1976~1982第一次低谷期遭受质疑批评,运算能力不足,计算复杂度较高,常识与推理实现难度较大等1982~1987第二次繁荣期具备逻辑规则推演和特定领域回答解决问题的专家系统盛行,及五代计算机的发展1987~1997第二次低谷期技术领域再次陷入瓶颈,抽象推理不再被继续关注,基于符号处理的模型遭到反对1997~2010稳步发展期计算机性能的提升与互联网技术的快速普及2011至今蓬勃发展期新一代信息技术蓬勃发展,信息环境与数据基础变革,海量图像语音文本等多模型数据不断出现,计算能力不断提高对比三大流派的智能观流派核心主张主要依托的技术符号主义智能源于符号运算,通过逻辑推理实现智能专家系统、定理证明器联结主义智能源于神经网络,通过数据学习实现智能深度学习、神经网络行为主义智能源于环境交互,通过感知-行动实现智能机器人控制、强化学习本次课到此结束《智能前端项目开发》认知机器学习机器学习工作流程机器学习,简单地理解,就是让机器能像人一样具有学习能力。一个完整机器学习项目的工作流程,大体可以划分为七个步骤:抽象成数学问题,获取数据,特征预处理与特征选择,训练模型与调优,模型诊断,模型融合和上线运行。1.抽象成数学问题明确问题是进行机器学习的第一步。这里的抽象成数学问题,指的我们明确我们可以获得什么样的数据。2.获取数据数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。数据要有代表性,否则必然会过拟合。机器学习工作流程机器学习工作流程3.特征预处理与特征选择特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。特征选择好了,非常简单的算法也能得出良好、稳定的结果。4.训练模型与调优特征选择之后我们才能够进行算法训练,现在很多算法都能够封装成黑盒供人使用,但是真正考验水平的是如何调整这些算法的参数,使得结果变得更加优良。机器学习工作流程5.模型诊断模型诊断主要为了确定模型调优的方向与思路,过拟合、欠拟合的判断是模型诊断中至关重要的一步。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。机器学习工作流程6.模型融合模型融合就是训练多个模型,然后按照一定的方法集成多个模型,这样能使得机器学习的效果有一定提升。7.上线运行好的模型衡量标准不仅包括模型准确程度、误差情况,还包括其运行的速度、资源消耗程度及模型本身的稳定性。机器学习算法分类机器学习是一个庞大的家族体系,涉及众多算法和学习理论。根据不同的学习路径,机器学习模型的类型主要有4种划分方式。机器学习算法分类1.按方法划分按所用方法的不同,可以将机器学习模型分为线性模型和非线性模型。线性模型较为简单,但作用不可忽视,它是非线性模型的基础,很多非线性模型都是在其基础上变化而来的;非线性模型又可以分为传统机器学习模型(如支持向量机、k-最近邻、决策树等)和深度学习模型。机器学习算法分类2.按学习理论划分按学习理论的不同,可以将机器学习模型分为有监督学习、半监督学习、无监督学习、迁移学习和强化学习。机器学习算法分类3.按任务划分按任务的不同,可以将机器学习模型分为回归模型、分类模型和结构化学习模型。回归模型又叫预测模型,输出是一个不能枚举的数值;分类模型又可分为二分类模型和多分类模型,常见二分类问题是垃圾邮件过滤问题,常见多分类问题是文档自动归类问题;结构化学习模型的输出不再是一个固定长度的值,如图片语义分析输出的是对图片的文字描述。机器学习算法分类4.按求解的算法划分按求解算法的不同,可以将机器学习模型分为生成模型和判别模型。常见的生成模型有贝叶斯分类器、高斯混合模型、隐马尔可夫模型、受限玻尔兹曼机、生成对抗网络等;典型的判别模型有决策树、k最近邻算法、人工神经网络、支持向量机、logistic回归和AdaBoost算法等。机器学习与AI重要领域的关系机器学习被广泛应用于计算机视觉、模式识别、数据挖掘、自然语言处理、语音识别等多个AI重要领域。机器学习与AI重要领域的关系模式识别从工业界发展而来,其主要方法与机器学习高度重合,两者均为人工智能的重要方面。数据挖掘利用机器学习在数据中寻找规律,可概括为“数据挖掘=机器学习+数据库”。统计学习与机器学习高度重叠,但侧重点不同:统计学习侧重数学与模型优化,机器学习侧重实践与问题求解。机器学习与AI重要领域的关系计算机视觉以图像处理和机器学习为基础,前者负责数据预处理,后者负责模式识别。自然语言处理以文本处理和机器学习为基础,结合编译原理与语义理解技术,实现人类语言的机器理解。语音识别则以自然语言处理和机器学习为基础,实现对人类语音的识别。本次课到此结束《智能前端项目开发》认知机器学习任务实践选取实操场景选取两类具有代表性的生活化业务场景,覆盖机器学习主流任务类型:一是学生成绩预测场景,基于学生考勤、作业得分、课堂表现、历次月考等学情数据,训练模型预测学生期末成绩二是电商用户消费分层场景,基于用户消费金额、消费频次、购物品类、复购率等行为数据,实现无标签的用户自动分层归类。一个完整的机器学习项目通常包含七个步骤,将上述两个场景分别代入标准流程,对每个步骤进行逐项拆解:拆解学习流程机器学习流程场景一:学生成绩预测场景二:用户消费分层1.抽象成数学问题回归预测任务,通过学情特征拟合期末分数。无监督聚类任务,依据消费特征实现用户分层。2.获取数据采集学生考勤、作业、课堂表现、月考成绩等学情数据。收集用户消费金额、频次、品类、复购率等行为数据。3.特征预处理与特征选择清洗、标准化数据,筛选影响成绩的核心特征。规范消费数据,剔除无效特征,保留核心分层特征。拆解学习流程4.训练模型与调优使用线性回归、决策树训练,微调参数提升预测精度。采用K-Means、高斯混合聚类,调试参数适配数据规律。5.模型诊断检测模型过拟合、欠拟合问题,优化模型泛化能力。校验聚类效果,修正分层模糊、聚类重叠等问题。6.模型融合集成多种回归模型,降低单一模型预测误差。融合多类聚类算法,优化分层效果,贴合业务需求。7.上线运行接入校园学情系统,实现成绩智能预测与教学辅助。接入电商后台,自动完成用户分层,支撑精细化运营。分析适配算法结合机器学习多维分类标准,对两个场景进行系统的算法选型与类别判定:1.从任务类型划分:学生成绩预测的输出为期末分数(连续型数值),属于回归任务;电商用户消费分层的输出为群体类别标签(无预设分组),属于聚类任务。分析适配算法2.从学习理论划分:成绩预测依靠人工标注的“期末成绩”标签进行训练,属于有监督学习;消费分层无需预先标注标签,由模型自主挖掘数据内在结构,属于无监督学习。3.从求解算法划分:学生成绩预测选用线性回归(判别模型);电商用户消费分层选用高斯混合(生成模型),K-Means为基于距离的聚类方法,不涉及概率建模,但同样适用于本场景。分析适配算法4.从方法划分:学情数据维度有限、规律相对清晰,线性模型即可有效拟合;消费数据特征复杂、维度较高且变量间存在非线性关联,更适合采用非线性模型进行建模分析。本次课到此结束《智能前端项目开发》了解深度学习与生成式AI浅层学习与深度学习机器学习和人工神经网络关系机器学习和人工神经网络是实现人工智能的两大主要方法。深度学习通常使用人工神经网络,将浅层人工神经网络模型在层次上变得更为复杂,从而使模型对数据信息的处理更加深入。浅层学习与深度学习深度学习网络深度学习颠覆了语音识别、图像分类、文本理解等众多领域的传统算法的设计思路,渐渐形成了一种从训练数据出发,经过一个端到端的模型,然后直接输出最终结果的新模式。浅层学习与深度学习浅层学习网络所谓浅层学习网络就是只含带有一层隐藏层节点或没有隐藏层节点的学习模型。浅层学习与深度学习深度学习与浅层学习的区别:(1)深度学习强调模型结构的深度,通常有多层隐藏层节点;“深度”一词没有特指,就是要求隐藏层得多(一般指5层、10层、几百层甚至几千层)。(2)深度学习明确突出了特征学习的重要性,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。主流深度学习框架目前有多种开源深度学习框架,包括TensorFlow、Caffe、PyTorch、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等,下面介绍TensorFlow、Caffe、PyTorch和Keras四种较为流行的框架。主流深度学习框架1.TensorFlowTensorFlow的前身是Google的神经网络算法库DistBelief,由“谷歌大脑”团队开发和维护,自2015年11月9日起,开放源代码。TensorFlow是一个使用数据流图进行数值计算的开源软件库,被广泛应用于各类机器学习算法的编程实现,用数据流图中的节点表示数学运算,图中的边表示节点之间传递的多维数据阵列(又称张量)。主流深度学习框架2.CaffeCaffe是一个清晰而高效的深度学习框架,由加利福尼亚大学伯克利分校人工智能研究小组与伯克利视觉和学习中心共同开发。Caffe最开始被设计时只针对图像,没有考虑文本、语音或者时间序列的数据,因此Caffe对卷积神经网络的支持非常好,但是对时间序列RNN、LSTM等支持不是特别充分。主流深度学习框架3.PyTorch在2017年,Torch的幕后团队推出了PyTorch。PyTorch不是简单地封装LuaTorch以提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,进而成为了当下最流行的动态图框架。主流深度学习框架4.KerasKeras是一个高层神经网络API。Keras为支持快速实验而生,能够把想法迅速转换为结果。Keras应该是深度学习框架之中最容易上手的一个,它提供了一致而简洁的API,能够极大地减少一般应用下用户的工作量,避免用户“重复造轮子”。严格意义上讲,Keras并不能称为一个深度学习框架,它更像一个深度学习接口,构建于第三方框架之上。生成式人工智能传统的判别式人工智能主要用来完成“判断”与“预测”任务,其核心目标是从既有选项中做出区分与选择。生成式人工智能不再局限于从有限答案中进行判断,而是能够在给定条件或提示下,主动产生新的内容,例如生成一段文章、一张图像、一首音乐,甚至是一段程序代码。人工智能的角色从“辅助判断的工具”逐渐转变为“内容生成的参与者”。生成式人工智能生成式AI的原理与能力边界生成式AI看似能理解并回应问题,但其本质并非“思考”,而是根据输入内容计算“下一个最可能出现的词或符号”。模型通过大规模数据训练,学习词语关联与语境模式,形成高度统计化的语言回应。这种能力不等同于真正理解——AI不知晓输出内容的真实意义,回答流畅但未必正确。生成式人工智能学习中的协作者生成式AI的角色是协作者,而非答案提供者。它擅长用比喻简化概念、示范如何将模糊问题转化为具体提问,并协助整理大纲与摘要,价值在于辅助思考而非替代思考。生成式人工智能使用风险与原则完全照搬内容、不验证事实、外包思考过程,长期会削弱独立判断能力。核心原则:生成式AI仅为辅助工具,输出结果需由人类审视与修正。本次课到此结束《智能前端项目开发》了解深度学习与生成式AI任务实践实验概述本实验通过手写数字分类任务,对比浅层学习与深度学习的核心差异。实验采用MNIST数据集,两组实验仅特征提取方式与网络结构不同,其余参数完全一致。浅层学习使用人工构造特征(均值+方差),配合单隐藏层网络。深度学习直接以原始像素为输入,由多层网络自动完成特征学习。浅层学习——人工特征的局限性浅层学习实验仅从图像中提取均值和方差两种特征,使用单隐藏层网络完成分类。测试准确率仅为21.48%,识别效果极差。原因在于:人工特征维度极低,图像中的边缘、纹理等有效信息大量丢失;单层网络拟合能力薄弱,无法学习有效区分特征。实验充分体现了浅层学习处理复杂数据任务的严重局限性。深度学习——自动特征提取的优势深度学习实验以原始像素为输入,由三层隐藏层网络自动完成特征提取与抽象。测试准确率高达96.11%,远超浅层模型。深度学习通过逐层抽象,从像素到边缘、轮廓、整体形态,逐级提取关键特征,最大限度保留有效信息。多层结构赋予模型强大的拟合与泛化能力,实现了识别精度的质的飞跃。从手写数字识别到生成式AI浅层学习依赖人工特征,仅能学习表层规律;深度学习通过自动逐层抽象,自主挖掘数据深层关联。这一原理同样适用于生成式AI。GPT等大模型底层正是多层Transformer堆叠构成的深度网络,其“像素→边缘→轮廓→整体形态”的特征提取路径与手写数字实验高度一致。凭借更深的网络与更大的参数量,生成式AI实现了从“识别分类”到“内容生成”的跨越。深度学习的优势与边界深度模型从海量数据中学习语言规则,生成流畅完整的内容,这是其优势所在。然而,模型基于统计规律推理,不具备真正的认知理解与价值判断能力。其事实偏差与逻辑错误,与浅层学习“只学表象、不懂本质”的局限一脉相承,只是强大的拟合能力掩盖了部分缺陷。本实验从底层揭示了生成式AI“性能强大但存在认知缺陷”的技术根源。本次课到此结束《智能前端项目开发》

使用VSCode搭建Python开发环境操作系统类型与安装包匹配操作系统是管理计算机硬件与软件资源的系统软件,为应用程序提供运行环境。不同操作系统使用不同的安装包格式,开发环境搭建时必须选择与自己系统匹配的版本,否则可能无法安装或运行异常。Python解释器与PATH环境变量Python解释器是用来运行.py文件的程序。一台电脑上可能有多个版本(如3.9、3.11),不同项目要用不同的解释器,否则容易出兼容性问题。PATH环境变量则是操作系统找程序的“地图”。在终端输入python时,系统只会在PATH里的目录中查找解释器。手动选择解释器是最稳妥的做法。虚拟环境的概念虚拟环境(VirtualEnvironment)是Python为项目打造的独立依赖隔离空间。由于不同项目可能依赖同一个库的不同版本(如A项目要numpy1.x,B项目要numpy2.x),若混装在系统环境中极易引发版本冲突。虚拟环境通过物理隔离,确保每个项目的库互不影响,是专业开发的必备规范。本次课到此结束《智能前端项目开发》

使用VSCode配置Python开发环境搭建VisualStudioCode环境(1)下载与安装访问VSCode官方网站(/),网站将自动检测操作系统,请下载对应的安装包,如下图所示。搭建VisualStudioCode环境(2)安装步骤说明配置Python开发环境(1)安装Python扩展(2)创建工作区与文件(3)选择Python解释器使用虚拟环境(1)创建:在VSCode的终端中,确保当前路径是项目文件夹,然后运行:python-mvenvvenv(2)激活。在下方Windows(PowerShell)中输入:.\\venv\\Scripts\\Activate.ps1(3)在虚拟环境中工作开发第一个Python程序(1)编写代码:在已创建的hello.py文件中输入:print("Hello,VSCode!")(2)运行程序(3)查看结果:运行成功后,终端将输出:Hello,VSCode!本次课到此结束《智能前端项目开发》

使用PyCharm搭建Python开发环境项目与解释器的对应关系在PyCharm中,一个项目绑定一个Python解释器。解释器可以是系统Python、虚拟环境(venv)或Conda环境。理解这种“一对一”关系是避免包找不到、版本报错的关键。项目结构的基本概念PyCharm以项目(Project)为基本管理单元,代码、资源、配置都放在项目目录下。项目根目录、源码目录(SourcesRoot)与运行配置共同决定程序从哪里启动、依赖从哪里加载。断点调试的基本逻辑调试不是改代码,而是控制程序执行过程。需要提前理解:断点(Breakpoint)、单步执行(StepOver/Into)、变量监视(Variables)与调用栈(CallStack)的含义,才能在IDE中高效排查问题。本次课到此结束《智能前端项目开发》

使用PyCharm配置Python开发环境下载与安装PyCharm(1)下载。访问JetBrains官网(/pycharm/download/#section=windows)下载exe版,如下图所示。下载与安装PyCharm(2)安装。运行安装程序,遵循安装向导。出现如下图安装选项对话框,该对话框有四组选项,建议全部勾选所有关联选项。创建第一个项目第一次运行会出现语言和区域,选择Chinese(Simplified)中文语言包与中国大陆,单击下一个,出现PyCharm用户协议,单击下方我确认我已阅读并接受此《用户协议》的条款,选择继续。在左侧窗口选择新建,选择新建项目,接下来的画面,确认左侧为纯Python,右侧则学习者需要设定以符合未来开发需要PyCharm主界面编写并运行第一个程序现在编写第一个程序:HelloWorld,鼠标移到项目文件区BaiduProject名称右击,依次选择新建,Python文件,回到PyCharm主界面,可以看到刚刚建立的HelloWorld.py出现在项目文件区与代码编辑区上方。接着在代码编辑区输入print(“HelloWorld!”),输入代码时需注意Python语法要求。在代码编辑画面右击选择运行“HelloWorld”,如果没有错误,人机交互区会显示运行结果,如下图本次课到此结束《智能前端项目开发》认识接口与RESTfulAPI设计原则接口的概念在应用程序开发中,接口一般是“应用程序编程接口”的简称,英文缩写API(applicationprogramminginterfaces)。API由服务器(Server)提供(服务器有各种各样的类型,一般我们浏览网页用到的是webserver,即网络服务器),通过API,计算机可以读取、编辑网站数据,就像人类可以加载网页、提交信息等。接口的特点API具有以下特点:API是一个明确定义的接口,可以为其他软件提供特定服务。API可以小到只包含一个单独的函数,也可以大到包含数以百计的类、方法、全局函数、数据类型、枚举类型和常量等。API的实现可以是私有的,也可以是开源的。请求-响应API的工作模式请求-响应类API的典型实现方式是通过基于HTTP的Web服务器暴露一个或一套接口。REST全称是RepresentationalStateTransfer(表述性状态传递),是现在最流行的一种WebAPI,当前主流AI开放平台采用RESTAPI方式,所有的操作都可通过HTTPAPI完成,例如增删改查、别名配置等。RESTful架构核心特点如果一个架构符合REST原则,就称它为RESTful架构。RESTful架构的特点:每一个URI代表一种资源客户端可通过四个HTTP的动词用于描述操作资源的动作,分别为GET、POST、PUT、DELETE。客户端和服务器之间,传递这种资源的某种表现层;把”资源”具体呈现出来的形式,叫做它的”表现层”。HTTP常用请求方法HTTP请求方法描述操作资源的动作:HTTP方法动作例子GET获取资源信息GET/api/orders(检索订单清单)GET获取资源信息GET/api/orders/123(检索订单#123)POST创建一个新的资源POST/api/orders(使用带数据的请求,创建一个新的订单)PUT更新一个资源PUT/api/orders/123(使用带数据的请求,更新#123订单)DELETE删除一个资源DELETE/api/orders/123(删除订单#123)本次课到此结束《智能前端项目开发》对比主流Python接口开发框架Tornado框架Tornado是一个性能高、并发高、非阻塞的异步框架,自带socket,并对WebSocket协议天然支持,由路由系统、视图、模板语言4大部分组成。Tornado框架Tornado的优势和缺陷:优势:轻量级web框架异步非阻塞IO处理方式出色的抗负载能力优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题WSGI全栈替代产品,推荐同时使用其web框架和HTTP服务器缺陷:入门门槛较高Django框架Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能、优雅的网站,主要特点:完善的文档集成ORM组件URL映射技术后台管理系统错误信息提示Django框架Django的缺点:大包大揽过度封装性能劣势灵活性不足Flask框架Flask是一个轻应用框架,简单好用易扩展,它主要面向需求简单,项目周期短的小应用。Flask基于Python开发,并且依赖jinja2模板和WerkzeugWSGI服务,是一个微型框架。Flask框架“微”(micro)并不表示你需要把整个Web应用塞进单个Python文件(虽然确实可以),也不意味着Flask在功能上有所欠缺。微框架中的“微”意味着Flask旨在保持核心简单而易于扩展。Flask不会替你做出太多决策——比如使用何种数据库。而那些Flask所选择的——比如使用何种模板引擎——则很容易替换。Flask框架默认情况下,Flask不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask支持用扩展来给应用添加这些功能,如同是Flask本身实现的一样。Flask的优势和缺陷:优势:轻量,快,灵活性强。缺陷:功能较弱,第三方组件稳定性较差。FastAPI框架FastAPI框架FastAPI是一款异步高并发、高性能的框架,专为API开发设计,是目前Python接口开发的优选框架。核心特性:速度极快、开发效率高、错误率低;易用性高,编辑器自动补全支持强大;代码简洁,减少代码重复;自带自动交互式API文档。本次课到此结束《智能前端项目开发》搭建FastAPI开发环境并实现首个基础接口安装FastAPI核心依赖包打开Pycharm,点击下方Terminal进入终端,输入pip命令,安装fastapi工具包及uvicorn依赖包。FastAPI本身是构建API的核心库,Uvicorn则是支持异步运行的ASGI服务器,两者配合才能启动FastAPI应用。安装FastAPI核心依赖包安装Fastapi:安装FastAPI核心依赖包安装依赖包uvicorn:编写首个FastAPI接口程序fromfastapiimportFastAPIapp=FastAPI()

@app.get("/")asyncdefmain():return{"message":"Hello,FastAPI"}

if__name__=='__main__':importuvicornuvicorn.run(app,host="",port=8000)

“Hello,FastAPI”程序的简单实现:运行程序并查看效果HelloFastAPI运行结果本次课到此结束《智能前端项目开发》开发无参数GET请求接口无参数GET请求概述get请求主要用于获取服务端的资源信息,类似于执行数据库中的查询操作“select*fromtable_name”。在实际使用get请求时,可根据需要确定是否需要传入参数。无参数GET请求适用于获取固定的、不需要任何筛选条件的资源。无参数GET请求概述典型使用场景:获取网站首页轮播图列表、系统公告信息、所有图书的分类列表等。在FastAPI中,使用@app.get()装饰器将普通Python函数转换为API接口。路径操作函数可以是同步函数或异步函数,FastAPI同时支持两种形式。无参数GET请求代码实现from

fastapi

import

FastAPI

import

uvicorn

app

=

FastAPI()

data

=

[{"item_name":

"Foo"},

{"item_name":

"Bar"},

{"item_name":

"Baz"}]

@app.get("/")

async

def

get_info():

"""

这是一个简单的get请求

:return:

直接返回data

"""

return

data

if

__name__

==

'__main__':

uvicorn.run(app=app,

host='',

port=8000)

运行效果启动服务后,在浏览器中访问:8000,即可获取data中的数据:本次课到此结束《智能前端项目开发》开发带参数GET请求接口带参数GET请求概述带参数GET请求适用于需要根据客户端提供的条件进行数据筛选的场景。典型场景:分页查询图书列表(传入页码和每页数量)、搜索商品(传入关键词)、筛选订单(传入订单状态)。在FastAPI中,只需在路径操作函数中定义普通参数,FastAPI会自动将这些参数识别为URL查询参数。带参数GET请求代码实现from

fastapi

import

FastAPI

import

uvicorn

app

=

FastAPI()

data

=

[{"item_name":

"Foo"},

{"item_name":

"Bar"},

{"item_name":

"Baz"}]

@app.get("/items")

async

def

read_item(skip:

int,

limit:

int

=

3):

'''''

一个带有参数的get请求

:param

skip,int型:

:param

limit,

int型,默认值为3:

:return

data[skip

:

skip

+

limit]:

'''

return

data[skip:skip

+

limit]

if

__name__

==

'__main__':

uvicorn.run(app=app,

host='',

port=8000)

参数说明与运行结果查询是在?之后的键-值对集合。在URL中,用&字符分隔。当发送get请求传入参数格式::8000/items?skip=0&limit=2,根据传入的参数skip和limit的实际值,会返回以下结果:参数说明与运行结果由于我们在定义方法read_item()的时候,赋予了limit默认值3,当不传入参数limit时,会使用默认值,以下传入的参数是等价的。:8000/items?skip=0&limit=3等价于:8000/items?skip=0由于未赋予skip默认值,当不传入参数skip时,会报错”value_error.missing”:8000/items?limit=2本次课到此结束《智能前端项目开发》开发JSON格式POST请求接口JSON格式POST请求概述POST请求主要用于创建一个新的资源,类似于执行数据库中的insert操作“insertintotable_namevalues()”。当需要从一个客户端发送数据给API时,所发送的内容叫做请求体。一个请求体数据通过客户端发送到API,API返回一个响应体给客户端。JSON格式POST请求概述POST请求与GET请求的核心区别在于:POST请求的参数封装在请求体中,而非附加在URL后面,因此安全性更高,且没有长度限制。JSON是目前前后端分离开发中最常用的数据交换格式。在FastAPI中,通过Pydantic的BaseModel定义数据模型,实现请求体参数的自动类型校验和必传校验。Pydantic数据模型定义导入Pydantic的基本模型:frompydanticimportBaseModel创建数据模型:声明数据模型作为一个继承自BaseModel的子类:class

Item(BaseModel):

skip:int

limit:int

=

3

JSON格式POST请求代码实现fromfastapiimportFastAPIfrompydanticimportBaseModelimportuvicorn

classItem(BaseModel):skip:intlimit:int=3

app=FastAPI()data=[{"item_name":"Foo"},{"item_name":"Bar"},{"item_name":"Baz"}]JSON格式POST请求代码实现@app.post("/post_info")

async

def

post_info(item:Item):

'''''

这是一个简单的get请求

:return:

直接返回data

'''

skip

=

item.skip

limit

=

item.limit

result

=

data[skip:skip+limit]

return

result

if

__name__

==

'__main__':

uvicorn.run(app=app,

host='',

port=8000)

调用JSON格式POST接口post请求无法由浏览器直接发起,这里借助requests库的post()方法实现,代码如下:import

requests

res

=

requests.post(":8000/post_info",

json={"skip":0,

"limit":2})

print(res.json())

输出结果如下所示:[{'item_name':'Foo'},{'item_name':'Bar'}]调用JSON格式POST接口由于在创建数据模型Item的时候,赋予了limit默认值3,当不传入参数limit时,会使用默认值,以下传入的参数是等价的。res=requests.post(":8000/post_info",json={"skip":0,"limit":3})res=requests.post(":8000/post_info",json={"skip":0})等价调用JSON格式POST接口由于在创建数据模型Item的时候,未赋予skip默认值,当不传入参数skip时,会报错”value_error.missing”。{'detail':[{'loc':['body','skip'],'msg':'fieldrequired','type':'value_error.missing'}]}本次课到此结束《智能前端项目开发》开发表单格式POST请求接口表单格式POST请求概述表单格式适用于传统Web表单提交场景,如用户登录、注册等。表单数据采用application/x-www-form-urlencoded格式编码,以键值对形式组织。实现要点:需安装python-multipart库解析表单数据;使用Form(...)声明表单参数,...表示必传;可选参数可传入默认值,如Form(None)。安装依赖要使用表单,需要先安装python-multipart工具包。代码实现以模拟用户登录为例,使用post请求实现表单字段数据的提交。fromfastapiimportFastAPI,Formimportuvicorn

app=FastAPI()

@app.post("/login/")asyncdeflogin(username:str=Form(...),password:str=Form(...)):return{"username":username}

if__name__=='__main__':uvicorn.run(app=app,host='',port=8000)调用表单格式POST接口使用requests库的post()方法,查看执行结果;import

requests

res

=

requests.post(":8000/login",

data={'username':'xiebing',

'password':'123456'})

print(res.text,"\n")

print(res.request.headers,"\n")

print(res.headers)

调用表单格式POST接口输出结果如下所示:{"username":"xiebing"}{'User-Agent':'python-requests/2.19.1','Accept-Encoding':'gzip,deflate','Accept':'*/*','Connection':'keep-alive','Content-Length':'32','Content-Type':'application/x-www-form-urlencoded'}{'date':'Tue,03Nov202013:12:58GMT','server':'uvicorn','content-length':'22','content-type':'application/json'}本次课到此结束《智能前端项目开发》理解与应用依赖注入依赖注入概述依赖关系指系统中模块间的相互调用关系,如果A模块调用了B模块的接口,那么称为A依赖B,记为A->B。如果A->B,B->A,那么称A和B模块都存在循环依赖。在接口开发中存在很多有依赖关系的接口。例如,“用户注册”功能依赖“密码加密”模块完成密码处理。依赖注入概述依赖注入是一种设计模式,核心思想是将依赖关系的控制权从模块内部转移到外部容器。FastAPI有一个非常强大但直观的依赖注入系统,可以使任何开发人员都可以非常轻松地将其他组件与FastAPI集成在一起。依赖注入在编程中表示,代码中(路径操作函数)有一种方法可以声明它需要工作和使用的东西:“依赖”。然后,该系统将完成为代码提供所需依赖项(“注入”依赖项)所需的一切。依赖注入概述依赖注入适用的主要开发场景:

具有共享逻辑(一次又一次地使用相同的代码逻辑)共享数据库连接强制执行安全性,身份验证,角色要求等。使用时需要导入Depends类,语法格式为:fromfastapiimportDepends依赖注入代码实现有依赖关系的接口实现:fromfastapiimportDepends,FastAPIimportuvicornapp=FastAPI()

asyncdefcommon_parameters(q:str=None,skip:int=0,limit:int=100):return{"q":q,"skip":skip,"limit":limit}依赖注入代码实现@app.get("/items/")asyncdefread_items(commons:dict=Depends(common_parameters)):username=commons['q']count=commons['skip']+commons['limit']common={'username':username,"count":count}returncommon

if__name__=="__main__":uvicorn.run(app=app,host='',port=8000)运行效果打开浏览器直接请求::8000/items/?q=JimGreen&skip=1&limit=4本次课到此结束《智能前端项目开发》解析XML数据格式数据解析以易于机器理解的方式来存储数据的文件格式,通常被称作机器可读的(machinereadable)。常见的机器可读格式包括:JavaScript对象符号(JavaScriptObjectNotation,JSON)可扩展标记语言(eXtensibleMarkupLanguage,XML)逗号分隔值(Comma-SeparatedValues,CSV)在实际开发过程中,有时需要从这些返回的数据类型中解析提取出所需数据。XML数据解析XML是指可扩展标记语言(EXtensibleMarkupLanguage),它是各种应用程序之间进行数据传输的最常用的工具。XML被设计用来结构化、存储和传输数据,其焦点是数据的内容。XML标签没有被预定义,需要自行定义标签。XML被设计为具有自我描述性,是W3C的推荐标准。XML数据解析<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don'tforgetmethisweekend!</body></note>包含发送者和接受者的信息,同时拥有标题以及消息主体,且该实例中的标签名没有在任何XML标准中定义过,完全由XML文档的创作者自己定义。数据样例:XML数据解析Python解析XML的方法有很多种,常见的有SAX,DOM,ElementTree和BeautifulSoup等。SAX(simpleAPIforXML)Python标准库包含SAX解析器,SAX方法流式读取XML文件,速度比较快,占用内存少,但需要用户实现回调函数(handler),实现过程稍微复杂。XML数据解析DOM(DocumentObjectModel)DOM将XML数据在内存中解析成一个树,通过对树的操作来操作XML。但需要将XML数据映像到内存中,一是比较慢,二是比较耗内存。ElementTree(元素树)ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。XML数据解析BeautifulSoup库BeautifulSoup是一个用来从HTML或XML文件中提取数据的Python第三方库,实现方法简单、高效。安装beautifulsoup4库:pipinstallbeautifulsoup4利用BeautifulSoup库对XML进行数据解析,大多数情况下可通过find_all()方法实现,find_all()函数定义如下:find_all(name,attrs,recursive,text,limit,**kwargs)XML数据解析不同的参数过滤可以应用到以下情况:查找标签,基于name参数查找属性,基于attrs参数查找文本,基于text参数基于正则表达式的查找查找标签的属性,基于attrs参数基于函数的查找limit用于限制得到的结果的数目XML数据解析以下实例是某电影API返回的的movies.xml内容。

<collectionshelf="NewArrivals">

<movietitle="EnemyBehind">

<type>War,Thriller</type>

<format>DVD</format>

<year>2003</year>

<rating>PG</rating>

<stars>10</stars>

<description>TalkaboutaUS-Japanwar</description>

</movie>

<movietitle="Transformers">

<type>Anime,ScienceFiction</type>

<format>DVD</format>

<year>1989</year>

<rating>R</rating>

<stars>8</stars>

<description>Aschientificfiction</description>

</movie>XML数据解析

<movietitle="Trigun">

<type>Anime,Action</type>

<format>DVD</format>

<episodes>4</episodes>

<rating>PG</rating>

<stars>10</stars>

<description>VashtheStampede!</description>

</movie>

<movietitle="Ishtar">

<type>Comedy</type>

<format>VHS</format>

<rating>PG</rating>

<stars>2</stars>

<description>Viewableboredom</description>

</movie>

</collection>XML数据解析利用BeautifulSoup完成对XML内容的解析,解析出每部电影的名称、类型和得分。安装beautifulsoup4库:pipinstallbeautifulsoup4利用BeautifulSoup库对XML进行数据解析,大多数情况下可通过find_all()方法实现,find_all()函数定义如下:find_all(name,attrs,recursive,text,limit,**kwargs)XML数据解析利用beautifulsoup4的find_all()方法完成对XML内容的解析,提取出每部电影的名称、类型和得分。from

bs4

import

BeautifulSoup

filename

=

'movies.xml'

content

=

open(filename,

encoding='utf-8').read()

soup

=

BeautifulSoup(content,

'xml')

movies

=

soup.find_all('movie')

for

movie

in

movies:

print("电影名:",

movie['title'])

print("类型:",

movie.type.text)

print("评分星级:",

movie.stars.text,

'\n')

XML数据解析对XML的解析后,获得每部电影的名称、类型和得分,结果为:电影名:EnemyBehind类型:War,Thriller评分星级:10电影名:Transformers类型:Anime,ScienceFiction评分星级:8电影名:Trigun类型:Anime,Action评分星级:10电影名:Ishtar类型:Comedy评分星级:2本次课到此结束《智能前端项目开发》解析JSON数据格式JSON数据解析JSON指的是JavaScript对象表示法(JavaScriptObjectNotation),是一种轻量级的文本数据交换格式,类似XML,主要用于存储和交换文本信息。JSON比XML更小、更快,更易解析。JSON数据解析JSON语法是JavaScript对象表示语法的子集,一般遵循以下语法规则:数据在名称/值对中数据由逗号分隔大括号{}保存对象中括号[]保存数组,数组可以包含多个对象JSON数据解析JSON数据的书写格式如下:key:value名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"name":"智能前端"JSON值可以是数字、字符串、逻辑值、数组、对象。JSON数据解析JSON数据样例:{"name":"学习网站","top":3,"websites":[{"name":"青橙科技","url":"www.ekics.club"},{"name":"Python","url":""}]}JSON数据解析Python3中可以使用json模块来对JSON数据进行编解码。importjson

json.dumps():对数据进行编码;json.loads():对数据进行解码。JSON数据解析示例:将Python数据结构转换为JSON对象import

json

data

=

{

'no'

:

1,

'name'

:

'python',

'url'

:

''

}

json_str

=

json.dumps(data)

print

("Python

原始数据:",

repr(data))

print

("JSON

对象:",

json_str)

JSON数据解析输出结果:Python原始数据:{'url':'','no':1,'name':'python'}JSON对象:{"url":"","no":1,"name":"python"}JSON数据解析示例:将一个JSON编码的字符串转换回一个Python数据结构import

json

data1

=

{

'no'

:

1,

'name'

:

'python',

'url'

:

''

}

json_str

=

json.dumps(data1)

print

("Python

原始数据:",

repr(data1))

print

("JSON

对象:",

json_str)

data2

=

json.loads(json_str)

print

("data2['name']:

",

data2['name'])

print

("data2['url']:

",

data2['url'])

JSON数据解析输出结果:Python原始数据:{'name':'python','no':1,'url':''}JSON对象:{"name":"python","no":1,"url":""}data2['name']:pythondata2['url']:JSON数据解析对JSON文件的操作,可以使用以下两个函数完成:json.dump():将Python对象编码成JSON字符串,并写入到json文件中。json.load():从json文件中读取数据,将已编码的JSON字符串解码为Python对象。JSON数据解析示例代码:import

json

data

=

{

'no'

:

1,

'name'

:

'python',

'url'

:

''

}

with

open('data.json',

'w')

as

f:

json.dump(data,

f)

with

open('data.json',

'r')

as

f:

data1

=

json.load(f)

print(data1)

JSON数据解析执行步骤说明:在项目代码所在目录下创建一个data.json文件将data的内容写入到该文件中并最后读取文件后,打印输出读取到的内容data1。输出打印结果:{'no':1,'name':'python','url':''}本次课到此结束《智能前端项目开发》处理CSV数据格式CSV数据格式概述逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV数据格式概述CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。CSV数据格式概述以下实例是泰坦尼克号乘客存活率数据,保存在titanic.csv文件中,如下所示:CSV数据处理pandas是数据分析领域使用最为广泛的python库之一,对于CSV格式文件的处理,它提供了两个非常简单实用的函数来实现,分别是读取文件函数read_csv和写入文件函数to_csv。可以使用pipinstall命令安装pandas库。pipinstallpandasCSV数据处理示例:读取titanic.csv文件,并计算所有幸存者中儿童的数量及所占比例。importpandasaspd

df=pd.read_csv("titanic.csv")survive_total=sum(df['存活'])children=df[df['类型']=='儿童']survive_ch=sum(children['存活'])rate_ch=survive_ch/survive_totalprint("儿童幸存者数量和幸存率分别是:%s、%.2f%%"%(survive_ch,rate_ch*100))输出结果:儿童幸存者数量和幸存率分别是:57、8.02%CSV数据处理示例:读取titanic.csv文件,获取所有儿童的数据,写入到children.csv文件中。import

pandas

as

pd

df

=

pd.read_csv("titanic.csv")

children

=

df[df['类型']=='儿童']

children.to_csv('children.csv',

index=False)CSV数据处理执行以上代码,将在代码本级目录下创建children.csv文件,并把数据写入到该文件中,文件内容如下所示:本次课到此结束《智能前端项目开发》

解析百度AI开放平台百度AI开放平台的架构层次百度AI开放平台采用“全栈分层”架构:底层由百度智能云提供算力与存储基建;中层以飞桨框架为核心,开放语音、视觉、NLP等标准化AI能力;上层通过EasyDL、AIStudio等工具链降低开发门槛,并最终输出工业、金融等场景化解决方案,实现从技术到产业的价值闭环。云计算与AI结合的价值逻辑百度智能云与AI深度融合,构建“云智一体”架构:云计算提供弹性算力与海量数据存储,破解AI训练的资源瓶颈;AI算法优化云计算资源调度,提升效率。二者协同将复杂AI能力转化为普惠服务,支撑自动驾驶、医疗影像等场景的高效落地,加速产业智能化转型。百度AI能力开放分析感知智能让机器“看懂听清”:语音识别准确率超98%,具强抗噪与多方言能力,用于客服、转写等场景;视觉技术涵盖人脸识别、OCR及图像分析,覆盖零售、工业与安防。认知智能让机器“理解思考”:NLP提供全套能力,千亿级知识图谱支撑搜索与决策;跨模态与AR/VR实现图文互搜及沉浸式互动体验。建设生态体系百度AI生态三管齐下:开发者生态通过AIStudio社区、论坛及百度之星大赛汇聚数百万开发者;产业生态以“燎原计划”孵化超500家AI创新企业,“行业合伙人”联合车企家电巨头推广方案;人才生态依托“黄埔学院”、高校微专业及认证培养实战工程师,构筑人才金字塔。本次课到此结束《智能前端项目开发》

开发到部署百度AI开放平台百度智能云AI开发全栈用户路径EasyDL零基础可视化开发针对无算法背景的业务人员,EasyDL提供图形化界面。用户只需上传和标注数据,平台即可自动完成模型训练、优化和部署,最快10分钟就能定制出高精度的图像分类或文本情感分析模型,真正实现“零代码AI开发”。AIStudio一站式云端开发面向AI开发者和数据科学家,AIStudio是集代码环境、免费算力、开源数据集、教程课程、模型仓库于一体的云端一体化工作站。它深度集成飞桨框架,支持在线Notebook编程和分布式训练,是学习和研发的首选环境。飞桨专业级开源框架对于需要深度定制和前沿探索的研发团队,飞桨开源深度学习平台提供了从核心框架、大规模训练、端到端部署到工具组件在内的全周期支持。数据与部署支持EasyData:提供从数据采集、智能标注、清洗增强到版本管理的一站式数据服务,解决“数据荒”和质量问题。多端推理引擎:训练好的模型可通过PaddleInference、PaddleServing、PaddleLite等工具,一键部署到服务器、移动端或边缘设备,实现高效推理。本次课到此结束《智能前端项目开发》

使用百度智能云与AI基础设施云计算与AI的关系云计算与AI是相辅相成的共生关系:云计算为AI提供弹性算力、海量存储与分布式框架,解决算力瓶颈与数据孤岛;AI则优化云资源调度、提升运维效率,并孵化智能云服务。二者融合形成“云智一体”模式,降低AI门槛,加速技术从实验室到产业的落地,是数字化转型的核心驱动力。大数据平台百度智能云大数据平台以BOS对象存储为数据基座,通过BMR托管集群提供弹性计算能力,并依托Doris数据仓库实现实时多维分析。采用存算分离架构,三者协同支持海量数据的高效流转与即时查询,既降低了存储成本,又满足了AI训练与商业智能的高性能分析需求。典型应用需求自动驾驶、医疗影像、金融风控这三大场景均属高算力、强实时、高安全的典型需求:自动驾驶需毫秒级响应与PB级数据处理,保障行车安全;医疗影像需高精度识别与低延迟推理,辅助精准诊断;金融风控需实时分析海量交易与关联关系,拦截欺诈风险。百度智能云通过弹性算力、AI模型与行业方案,精准满足此类严苛需求。本次课到此结束《智能前端项目开发》

使用百度智能云AI基础设施与案例实战设计基础设施架构(1)高可靠数据中心与万卡级并行训练支持。在算力支撑层面,百度智能云通过领先的虚拟化与容器化技术,实现了多租户隔离与跨机房组网,确保客户数据的安全性与服务的高可用性。即便在同一机房内,不同客户的服务也完全隔离,互不可见,这种设计有效防范了数据泄露风险。设计基础设施架构(2)存算分离架构部署。百度智能云大数据方案采用存算分离架构,数据存储在对象存储BOS中,计算引擎则采用托管大数据平台BMR或企业级数据仓库Doris。这种架构的优势在于:弹性:计算资源和存储资源可以分别扩容,避免资源浪费。经济:利用BOS的6级存储体系(标准、低频、归档等),冷数据下沉到归档存储可使成本减少87.5%。设计基础设施架构运维成本低:运维压力转嫁给云服务厂商,解决了HDFSNameNode单点瓶颈和百PB以上数据扩容的挑战。应用成效:例如,在零售行业中,百度智能云通过用户行为日志分析实现精准营销,使投资回报率(ROI)提升25%;在工业领域,设备传感器数据的实时分析支持预测性维护,减少停机时间40%。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论