-
早在 2018 年,OpenAI 就发布了最初版本的 GPT 模型,从 OpenAI 公开的论文(Improving Language Understanding by Generative Pre-Training)可以了解到,这个模型采用了 12 层的 Transformer Decoder 结构,用了大约 5GB 的无监督文本数据进行语言模型任务的训练。虽然初代 GPT 模型采用的就已经是生成式的预训练(这也是 GPT 名字的由来,Generative Pre-Training,即生成式预训练),但使用的是无监督预训练 + 下游任务微调的范式。这一范式其实并不是什么新的发明,它在 CV(计算机视觉)领域已经有比较广泛的应用,只是由于当年 ELMo 模型的出色表现,把它重新介绍到了 NLP 领域。GPT 模型的出现在那一年确实引来了一些业内的关注,但它并不是那一年的 C 位主角。因为就在同年,Google 的 BERT 模型横空出世,以优异的效果吸引了几乎全部的目光(这个景象有点像现在的 ChatGPT,不禁感叹 Google 和 OpenAI 之间的。图片来自 BERT 论文,从图示中可以一窥当年 BERT 对标的就是 GPT,并引以为傲地指出双向编码能力。BERT 模型虽然也是采用和 GPT 一样的 Transformer 模型结构,但它几乎就是为无监督预训练 + 下游任务微调的范式量身定制的模型。和 GPT 相比,BERT 所使用的掩码语言模型任务(Masked Language Model)虽然让它失去了直接生成文本的能力,但换来的是双向编码的能力,这让模型拥有了更强的文本编码性能,直接的体现则是下游任务效果的大幅提升。而 GPT 为了保留生成文本的能力,只能采用单向编码。以当年的眼光来看,BERT 绝对是一个更加优秀的模型。因为既然 BERT 和 GPT 两者都是采用「预训练 + 微调」的范式,并且下游任务依然是分类、匹配、序列标注等等经典的 NLP 任务形式,那么像 BERT 模型这种更注重特征编码的质量,下游任务选一个合适的损失函数去配合任务做微调,显然比 GPT 这种以文本生成方式去迂回地完成这些任务更加直接。从 BERT 模型出来以后, 无监督训练 + 下游任务微调 的范式便奠定了它的霸主地位,各类沿着 BERT 的思路,琢磨如何获得更好的文本特征编码的方法大量涌现,以至于 GPT 这个以生成式任务为目标的模型显得像一个异类。
-
PyCharm ToolKit介绍由于AI开发者会使用PyCharm工具开发算法或模型,为方便快速将本地代码提交到ModelArts的训练环境,ModelArts提供了一个PyCharm插件工具PyCharm ToolKit插件下载请参见下载并安装ToolKit工具),协助用户完成代码上传、提交训练作业、将训练日志获取到本地展示等,用户只需要专注于本地的代码开发即可。使用限制 当前仅支持PyCharm 2019.2及以上版本,包括社区版和专业版。 使用PyCharm ToolKit远程连接Notebook开发环境,仅限PyCharm专业版。 使用PyCharm ToolKit提交训练作业,社区版和专业版都支持,PyCharm ToolKit 2.x版本仅限于提交旧版训练作业,PyCharm ToolKit latest版本仅限提交新版训练作业。 PyCharm ToolKit工具支持Windows、Linux或Mac版本的PyCharm。支持的功能表1 ToolKit(latest)功能列表 支持的功能说明对应操作指导SSH远程连接支持SSH远程连接ModelArts的Notebook开发环境。配置PyCharm ToolKit远程连接Notebook训练模型支持将本地开发的代码,快速提交至ModelArts并自动创建新版训练作业,在训练作业运行期间获取训练日志并展示到本地。提交训练作业(新版训练)停止训练作业查看训练日志OBS上传下载上传本地文件或文件夹至OBS,从OBS下载文件或文件夹到本地。OBS上传下载表2 ToolKit(2.x版本)功能列表 支持的功能说明对应操作指导SSH远程连接支持SSH远程连接ModelArts的Notebook开发环境。配置PyCharm ToolKit远程连接Notebook训练模型支持将本地开发的代码,快速提交至ModelArts并自动创建旧版训练作业,在训练作业运行期间获取训练日志并展示到本地。提交训练作业(旧版训练)查看训练作业详情启动或停止训练作业查看训练日志提交不同名称的训练作业部署上线支持将训练好的模型快速部署上线为在线服务。部署上线OBS上传下载上传本地文件或文件夹至OBS,从OBS下载文件或文件夹到本地。OBS上传下载Pycharm远程插件Toolkit
-
AI产品和服务智能输入一个字便可作一首诗。
-
2017年,谷歌大脑团队(Google Brain)在神经信息处理系统大会(NeurIPS,该会议为机器学习与人工智能领域的顶级学术会议)发表了一篇名为“Attention is all you need”自我注意力是你所需要的全部,的论文。作者在文中首次提出了基于自我注意力机制(self-attention)的变换器(transformer)模型,并首次将其用于理解人类的语言,即自然语言处理。在这篇文章面世之前,自然语言处理领域的主流模型是循环神经网络(RNN,recurrent neural network)。循环神经网络模型的优点是,能更好地处理有先后顺序的数据,比如语言,但也因为如此,这种模型在处理较长序列,例如长文章、书籍时,存在模型不稳定或者模型过早停止有效训练的问题(这是由于模型训练时的梯度消失或梯度爆炸现象而导致,在此不具体展开),以及训练模型时间过长的问题。最初的变换器(Transformer)模型的架构2017年提出的Transformer模型,则能够同时并行进行数据计算和模型训练,训练时长更短,并且训练得出的模型可用语法解释,也就是模型具有可解释性。这个最初的Transformer模型,一共有6500万个可调参数。谷歌大脑团队使用了多种公开的语言数据集来训练这个最初的Transformer模型。这些数据集包括2014年英语-德语机器翻译研讨班(WMT)数据集(有450万组英德对应句组),2014年英语-法语机器翻译研讨班数据集(3600万英法对应句组),以及宾夕法尼亚大学树库语言数据集中的部分句组(分别取了其中来自《华尔街日报》的4万个句子,以及另外在该库中选取1700万个句子)。而且,谷歌大脑团队在文中提供了模型的架构,任何人都可以用其搭建类似架构的模型来并结合自己手上的数据进行训练。经过训练后,这个最初的Transformer模型在包括翻译准确度、英语成分句法分析等各项评分上都达到了业内第一,成为当时最先进的大型语言模型Large Language Model, LLM。大型语言模型(LLM)主要大事记Transformer模型自诞生的那一刻起,就深刻地影响了接下来几年人工智能领域的发展轨迹。短短的几年里,该模型的影响已经遍布人工智能的各个领域——从各种各样的自然语言模型、到预测蛋白质结构的AlphaFold2模型,用的是它。
-
作者:关耳山石目录前言一、ChatGPT是什么?ChatGPT背后的公司ChatGPT背后的技术从GPT-3.5到ChatGPT的意义二、ChatGPT会对我们产生什么影响?三、ChatGPT并非万能四、我们如何利用ChatGPT五、写在最后前言年前到现在,一直被ChatGPT的新闻轰炸,现在还越来越热闹了,关于ChatGPT技术,关于人与ChatGPT未来发展的讨论,网络上众说纷纭。我就让同事从海外注册账号,直接问了ChatGPT这个问题,最后用Stable Diffusion生成了ChatGPT眼中未来的图像,如下图:关于,这幅景象,它是这么描述的:于是,作为一位严谨的“民科”和积极的开发者,立即开始跟随潮流,了解新技术 !希望能与大家一起交流看法,欢迎大家留言讨论~一、ChatGPT是什么?1、ChatGPT背后的公司们·OpenAI&微软要聊ChatGPT,必须得先聊OpenAI。这本来是一家搞全栈AI创新的非盈利组织,重点研究物理机器人,背后甚至还有钢铁侠、彼得·蒂尔、YC总裁Sam(任CEO)等一众硅谷大佬身影,而GPT系列模型只是众多研究方向之一。因为非盈利组织无法进行融资,就搞了个商业的壳子,吸引了微软投资,最后达成的结果是:OpenAI要优先使用微软的技术(主要是Azure),微软得到了OpenAI技术的使用权,这也是ChatGPT与微软之间的联系。2、ChatGPT背后技术·GPT-3.5GPT这模型已经发展四代了,目前开放了GPT-3的API(收费的),ChatGPT用的是GPT-3.5,还有一代GPT-4没见过(据说Bing融合的就是这个)。这个东西到底是干啥的,如果感兴趣,建议去看李宏毅老师的视频,省流版就是: 文字接龙机器人,一个学了2/3的互联网知识,整个Wikipedia,多个书籍库,以及一套“自动补齐”能力的文字接龙机器人。(引至李宏毅老师的视频)但是平时咱们用的输入法基本也会一些文字接龙,但是接起来的感觉前言不搭后语的,为啥ChatGPT就行了呢?网上还找不着GPT-3.5相关的材料,只能研究研究GPT-3的创新点去推断了:模型相当大1750亿参数,这个参数大概意思是表示每个字/词出现的可能性。到底有多大,看下图就有个直观的感受。当然,训练数据量也极其的大,大约是4990亿个Token(简单理解为字/词),号称学了2/3个互联网、整个Wikipedia和几个书籍库。按照这个信息量,一定是高度冗余的,也是绝对充分了。(图片源于网络)“加钱”效果相当好这玩意还有个很神奇的地方,就是有钱能使它推磨,“加价”的效果立竿见影:从趋势来看,模型越大,效果越好。想必将来还会有更大的模型出来,毕竟有多大钱,GPT能创造多少奇迹嘛!(DeepMind还做了个推导,算出来一个模型参数与数据量的最优线性关系)通用性相当好这也算个特别牛的事情,不用进行额外的“调教”,已经学会了干很多事,简直是AI工程师的福音。举个例子,我们有个相似需求推荐的场景,是基于BERT的基础模型,加上一堆(上千条)人工标注的训练数据集,再调优一把,才能使用在我们的场景里。有了这个大力仔,就不需要这一套了,直接拿来即用。而且还有个比较有意思的,哪怕要教模型做点事,也不需要工程师了,直接在输入里写上寥寥几个例子(In Context Learning),模型就学会了。“意识”涌现相当惊人学名叫Chain-of-Thought,思维链,这是最让人惊讶和细思极恐的了。就是当模型足够大,层数足够多的时候,居然还就从量变到质变了,产生了一些类人的逻辑思维能力。这玩意我没看到更深刻的解释,但是从表象上看,确实会做一些逻辑题了。比如算算数、做一些逻辑推理。PS:我从网上看到一个数据,列在这里做个备注 - OpenAI的GPT 3的规模为175B,Google的LaMDA规模为137B,PaLM的规模为540B,DeepMind的Gogher规模为280B等,不一而足。国内也有中文巨型模型,比如清华&智谱GLM规模130B,华为“盘古”规模200B,百度“文心”规模260B,浪潮“源1.0”规模245B。(规模 = 模型的参数规模,单位是Billion)(图片源于网络)3、从GPT-3.5到ChatGPT的意义如果说GPT-3是理论或底层能力的创新,那么ChatGPT的创新就是工程和商业层面的,甚至是一个里程碑式的。这是一个“现象级”的产品首先,我认为,将一个大众无法理解的技术,变成“现象级”产品,是ChatGPT的最牛创新,使得“AI使能”落入寻常百姓家,与每个人产生了化学反应,所以这绝对是划时代的。Google 2022年I/O大会的时候,我也做了一波洞察,看到LaMDA、PaLM的展示,能够体验的人极少,感知到其魅力的也是极少的。而ChatGPT做了个简陋的Playground就迅速抢占了大众的心智,看到有数据说,从0~100万用户只用了5天,过亿只用了2个月,基本没有额外的获客成本。甚至还让竞争对手意识到,再不搞起早起五更都赶不上晚集了。以至于前几天Google不仅召回了两位创始人,快速规划对话式搜索的上线,还大笔投资了OpenAI的“港湾”组织 – Anthropic)。从工程上,我理解ChatGPT是GPT-3.5的一个优化应用。简单说,就是先人肉标注一些GPT-3.5返回数据,以教GPT-3.5说话,然后用强化学习的算法来持续评价,最终实现了这么个神奇的模型。(号称用到了40+的人力来持续教AI做事,据说还有肯尼亚的低价劳工。)可惜不开源ChatGPT不开源,GPT-3.5模型也不开源。两者都不支持在中国使用(包括HK),所以网络上开始有二道贩子开始倒卖,或直接接到微信上付费使用。两者目前都有商业化的手段,GPT模型是直接卖API,ChatGPT出了Plus版,20美刀一个月,优先使用。(GPT-1模型和GPT-2的部分小规模模型是开源的,OpenAI的理由是,大规模模型能力太强大,怕被坏人利用)二、ChatGPT会对我们产生什么影响?首先,我们得先认识到,ChatGPT只是众多LLM中比较会秀的一个。GPT系列属于大规模语言模型(LLM)前沿中的一支,DeepMind(搞AlphaGo下围棋的那公司)、Google、FB,都有自己的优秀实践。从技术能力上,我觉得还远没有到比哪个更好的程度,倒是ChatGPT这一波秀出圈以后,大家找金主爸爸要钱会更容易了,这是个大家都开心的事儿。关于替代人类工作的讨论,用微软CEO纳德拉的话说:“信息的整合、转译和流通,变得廉价”。因此对于所有与信息整合、转译和流通相关的工作,还是会有影响。侵入“创造性”工作GPT模型已经离谱到,直接把图案转成向量喂给它,就能帮我们补齐图片(image-gpt)的地步,或许我们曾以为的文案、绘图,甚至是编码这些曾经被认为无法被AI替代的工作都将被入侵。取代“搜索和问答”人类在已有知识的搜索和输出上,可能永远无法超过AI。Google已经开始加快LaMDA的速度,然后是微软继续加注OpenAI并开始在Bing中融入,再然后StackOverflow(技术类知识问答界的明珠)用户量降了3200万,所以我觉得,大模型是靠谱的,替代也是迟早的事儿。让AI应用更简单ChatGPT的Zero-shot效果显著(LLM有三种学习方式,Few-shot、One-shot、Zero-shot,讲人话就是举多反一、举一反一、无中生有),这个能力在语言模型中,影响极其深远。简单来说,就是我们如果想在项目中引入AI能力,GPT很好的通用性、极少的“调教”量会使得工程上更简单。ChatGPT背后基础模型能力成熟且强,更多此类大模型被打造出来后,使得千千万万的AI加持变成可能,实现“AI使能”落入寻常百姓家。而且,OpenAI卖通用AI的API的生意还是可以赚钱的(见下图,1k token大约等于750个字,看着不算贵,默认还有18刀的体验费用),这里不得不开个玩笑:AI工程师们,你们把AI的道拓宽了,把自己的道都走窄了啊!三、ChatGPT并非万能从根子上理解,GPT算法在做的其实是“补齐”工作:即通过学习人类说话的方式,基于上下文,推测后面你打算说啥。具体要回答啥,则完全靠概率计算,靠“违和感”。如此一来,当下的GPT算法势必就有几个特点:需要海量的数据、算力和钱搞个这种算法,总共烧了多少钱呢?22年是5个亿刀,前七年40亿刀,最近微软新加注100亿刀。(我看网上说,ChatGPT训练下来大约1200多万美金,这样看来,微软的投资,还是打好算盘的,钱要花在自己身上才算值)。而且,搜索引擎和信息入口企业已占先机,想要再进入,都需要更多的数据、钱和算力。当然,还需要很多标注人力来调教模型,让其有人的习惯和三观。真实版“人云亦云”:类比鹦鹉学舌,有响应不代表有思考,响应够用也不代表足够 优美。虽然它对通识类的知识理解,效果非常好(何谓通识?就是搜索引擎能搜出一堆来的知识,互联网本身信息已经高度冗余了,只是作为个体的人类不太清楚罢了),但其实AI也并不知道自己说的对不对,它只是知道,大家一般都这么说,然后做一些看起来不错的回答。(思维链除外,这个东西细思极恐,只是欺负它目前还没有那么成熟)时效性问题即目前ChatGPT学的是2021年前的知识,所以不知道2022年世界杯谁赢了,不过对于这个问题是可解的。OpenAI的WebGPT算法,已经与Bing结合,把最新的信息投喂给模型,如此一来,它也就知道最新消息了。(我不清楚具体是如何实现,猜测应该不是去实时训练基础模型,而是在上层叠加了什么)四、我们如何利用ChatGPT这个问题我想再扩大一点,扩大到AIGC这个话题上,AIGC已经被Science列为2022年TOP10科学突破,2022年是当之无愧的AIGC元年,结合我们的日常工作,我认为以下方面是可以快速尝试和引入的:信息摘要和初级创作:主要用于日常办公效率提升的场景从信息摘要的角度,这就是信息爆炸时代的良药,简要描述为用魔法打败魔法:直接让AI从繁杂的信息中摘取需要的重点内容,节约人力;从初级创作性工作替代上来看, AIGC可以快速帮我们做完早期的工作,更多精力投入“微雕”。从OpenAI的Codex来看(支撑Github Copilot),对于常用算法、业务逻辑代码、重构(包括跨语言的重构,比如从java改成go)、代码注释(福音啊!)等的代码生成能力已经逐渐成型, 我试着面向GPT编程,效果相当好:语法工整、注释清晰、变量准确(除了逻辑错了一丢丢 – 返回是月末周日,而不是周六)通识类问题解答:主要用于通识类知识搜索和问答场景,在公开域搜索信息,以减少人力搜索和辨别的过程。IT系统拟人化:主要用于人机交互场景,这个用途好像很少有人提,可能太偏门了。我觉得其实AIGC特别合适帮我们IT系统的输出更“丝滑”、更“拟人”、更“准确”,优化机器输出更加的“人性化”,符合普遍大众的习惯。五、写在最后“吾生也有涯,而知也无涯。以有涯随无涯,殆已!”,我觉得古人的智慧足以回答关于人类与ChatGPT未来发展的问题,在我看来,对于ChatGPT,甚至是更宽广的技术发展来说,科技是为了解放人类的双手,让我们用更充足的精力去进行思考、探索和创造,AI应该成为我们的辅助能力,而不是竞争者。想要了解华为盘古大模型的,回复“盘古大模型”,文末领取丰厚资料包~
-
-
-
智能制作诗词,AI应用语言开发
-
XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。它在 Gradient Boosting 框架下实现机器学习算法。XGBoost提供并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。相同的代码在主要的分布式环境(Hadoop,SGE,MPI)上运行,并且可以解决数十亿个示例之外的问题。XGBoost 是对梯度提升算法的改进,求解损失函数极值时使用了牛顿法,将损失函数泰勒展开到二阶,另外损失函数中加入了正则化项。训练时的目标函数由两部分构成,第一部分为梯度提升算法损失,第二部分为正则化项。损失函数定义为其中n为训练函数样本数,l是对单个样本的损失,假设它为凸函数,为模型对训练样本的预测值,为训练样本的真实标签值。正则化项定义了模型的复杂程度:其中,和为人工设置的参数,w为决策树所有叶子节点值形成的向量,T为叶子节点数。Boost核心算法1.不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残2.当我们训陈练完成得到棵树,我们要预湨一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数3.最后只需要将每棵树对应的分数加起来就是该样本的预湨值。需要带入的包from sklearn.metrics import precision_scorefrom sklearn.model_selection import train_test_splitfrom matplotlib.colors import ListedColormapfrom sklearn.preprocessing import LabelEncoderfrom sklearn.metrics import classification_reportfrom sklearn.model_selection import GridSearchCVimport matplotlib.pyplot as pltimport seaborn as snsimport warningsimport xgboost as xgbimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltwarnings.filterwarnings("ignore")
-
已完成
-
ChatGPT,美国“开放人工智能研究中心”研发的聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。发展历程ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。在OpenAI的官网上,ChatGPT被描述为优化对话的语言模型,是GPT-3.5架构的主力模型。ChatGPT具有同类产品具备的一些特性,例如对话能力,能够在同一个会话期间内回答上下文相关的后续问题。然而,其在短时间内引爆全球的原因在于,在网友们晒出的截图中,ChatGPT不仅能流畅地与用户对话,甚至能写诗、撰文、编码。ChatGPT还采用了注重道德水平的训练方式,按照预先设计的道德准则,对不怀好意的提问和请求“说不”。一旦发现用户给出的文字提示里面含有恶意,包括但不限于暴力、歧视、犯罪等意图,都会拒绝提供有效答案。2022年11月底,人工智能对话聊天机器人ChatGPT推出,迅速在社交媒体上走红,短短5天,注册用户数就超过100万。2023年一月末,ChatGPT的月活用户已突破1亿,成为史上增长最快的消费者应用。2023年2月2日,美国人工智能(AI)公司OpenAI发布ChatGPT试点订阅计划——ChatGPT Plus。ChatGPT Plus将以每月20美元的价格提供,订阅者可获得比免费版本更稳定、更快的服务,及尝试新功能和优化的优先权。2023年2月2日,微软官方公告表示,旗下所有产品将全线整合ChatGPT,除此前宣布的搜索引擎必应、Office外,微软还将在云计算平台Azure中整合ChatGPT,Azure的OpenAI服务将允许开发者访问AI模型。2023年2月3日消息,IT 行业的领导者们担心,大名鼎鼎的人工智能聊天机器人 ChatGPT,已经被黑客们用于策划网络攻击时使用。黑莓 (Black Berry) 的一份报告调查了英国 500 名 IT 行业决策者对 ChatGPT 这项革命性技术的看法,发现超过四分之三 (76%) 的人认为,外国已经在针对其他国家的网络战争中使用 ChatGPT。近一半 (48%) 的人认为,2023 年,将会出现有人恶意使用 ChatGPT 而造成“成功”的网络攻击。当地时间2023年2月2日,ChatGPT的开发公司——美国人工智能公司OpenAI顺势推出了这一应用程序的付费订阅版本。2023年2月7日,微软宣布推出由ChatGPT支持的最新版本人工智能搜索引擎Bing(必应)和Edge浏览器。微软CEO表示,“搜索引擎迎来了新时代”。 8日凌晨,在华盛顿雷德蒙德举行的新闻发布会上,微软宣布将OpenAI传闻已久的GPT-4模型集成到Bing及Edge浏览器中。技术逻辑结合ChatGPT的底层技术逻辑,有媒体曾列出了中短期内ChatGPT的潜在产业化方向:归纳性的文字类工作、代码开发相关工作、图像生成领域、智能客服类工作。核心竞争力ChatGPT受到关注的重要原因是引入新技术RLHF (Reinforcement Learning with Human Feedback,即基于人类反馈的强化学习)。RLHF 解决了生成模型的一个核心问题,即如何让人工智能模型的产出和人类的常识、认知、需求、价值观保持一致。ChatGPT是AIGC(AI- Generated Content,人工智能生成内容)技术进展的成果。该模型能够促进利用人工智能进行内容创作、提升内容生产效率与丰富度。技术局限性ChatGPT 的使用上还有局限性,模型仍有优化空间。ChatGPT模型的能力上限是由奖励模型决定,该模型需要巨量的语料来拟合真实世界,对标注员的工作量以及综合素质要求较高。ChatGPT可能会出现创造不存在的知识,或者主观猜测提问者的意图等问题,模型的优化将是一个持续的过程。若AI技术迭代不及预期,NLP模型优化受限,则相关产业发展进度会受到影响。此外,ChatGPT盈利模式尚处于探索阶段,后续商业化落地进展有待观察。
-
前言 本程序主要实现了python的opencv人工智能视觉模块的口罩检测实时语音检测报警。 若不知道怎么安装opencv或者使用的请看我的这篇文章(曾上过csdn综合热榜的top1): python进阶——人工智能视觉识别_lqj_本人的博客-CSDN博客 同时,另一篇基于opencv的人工智能视觉实现的目标实时跟踪功能(增上过csdn综合热榜的top5): python进阶——人工智能实时目标跟踪_lqj_本人的博客-CSDN博客 项目介绍 PaddlenHub模块 PaddleHub是飞桨预训练模型管理和迁移学习工具,通过PaddleHub开发者可以使用高质量的预训练模型结合Fine-tune API快速完成迁移学习到应用部署的全流程工作。其提供了飞桨生态下的高质量预训练模型,涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、视频分类、图像生成、图像分割、文本审核、关键点检测等主流模型。 使用时可能遇到的bug AttributeError: partially initialized module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘ bug显示:cv2没有指定的依赖。 解决方法 在我们的pycharm中自带的命令窗口中输入: pip install opencv-python install "opencv-python-headless<4.3" 然后,我们再把我们的opencv-python降低版本为与我们安装的opencv-python-headless版本相同即可,我这里用的都是4.2.0.34版本。 方法解释 因为opencv4.3以上的版本会存在与其他模块依赖的兼容性问题,4.3以上的版本兼容性较差,所以,有时会出现一下bug之类的错误。有时,其实我们写的代码没有问题,只是问题出在了依赖的兼容性问题上! playsound模块 PlaySound是Windows用于播放音乐的API函数(方法)。在vs2010以上版本需要加入#pragma comment(lib, "winmm.lib")才能使用PlaySound。PlaySound函数原型为 BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound)。PlaySound参数,pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。 项目思路 1.使用PaddlenHub模块指定算法,根据面部特征的上下左右来判断是否面部有物体遮挡,并判断遮挡区域及位置,若判断条件成功,则绘制绿色矩形及英文提示。若判断条件失败,则绘制红色矩形及英文提示! 2.使用playsound模块指定我们录制好的MP3文件,当判断条件符合时,则按照playsound模块原生函数播放MP3文件,达到语音警告提示效果! 代码详解 首先导入相应模块 import paddlehub import cv2 from playsound import playsound 指定paddlehub模块中的算法并赋值 module=paddlehub.Module(name="pyramidbox_lite_mobile_mask") 调用本机摄像头 cap=cv2.VideoCapture(0) 循环判断指定位置及遮挡区域 while(cap.isOpened()): frame = cap.read()[1] input_dict = {'data':[frame]} results = module.face_detection(data=input_dict) result = results[0] 设置绑定键盘按压事件 k = cv2.waitKey(1) & 0xFF # 判断按键 判断肯定条件时绿色字体和矩形 if result['data']!=[]: label = result['data'][0]['label'] left = result['data'][0]['left'] right = result['data'][0]['right'] top = result['data'][0]['top'] bottom = result['data'][0]['bottom'] color = (0,255,0) color2 = (0,255,0) 判断否定条件时红色字体和矩形,并播放语音警告提示 if label == 'NO MASK': color = (0,0,255) color2 = (0,0,255) playsound('1.mp3') cv2最后的绘制及显示交互窗口 cv2.rectangle(frame,(left,top),(right,bottom),color,3) cv2.putText(frame,label,(left,top-10),cv2.FONT_HERSHEY_SIMPLEX,0.8,color2,2) cv2.imshow('xianshi',frame) 判断监听键盘按压事件 if k == ord(' '):#退出 break 释放摄像头及内存 #释放摄像头 cap.release() #释放内存 cv2.destroyAllWindows() 完整代码及注释 import paddlehub import cv2 from playsound import playsound #指定paddlehub模块的视觉算法 module=paddlehub.Module(name="pyramidbox_lite_mobile_mask") #调用本机摄像头 cap=cv2.VideoCapture(0) #循环判断面部区域位置 while(cap.isOpened()): frame = cap.read()[1] input_dict = {'data':[frame]} results = module.face_detection(data=input_dict) result = results[0] #绑定键盘监听事件 k = cv2.waitKey(1) & 0xFF # 判断按键 #当判断为肯定时,则绘制绿色矩形及文字 if result['data']!=[]: label = result['data'][0]['label'] left = result['data'][0]['left'] right = result['data'][0]['right'] top = result['data'][0]['top'] bottom = result['data'][0]['bottom'] color = (0,255,0) color2 = (0,255,0) #当判断为否定式绘制红色矩形及文字 if label == 'NO MASK': color = (0,0,255) color2 = (0,0,255) #打开录制的MP3语音文件 playsound('1.mp3') #cv2最会的绘制及显示 cv2.rectangle(frame,(left,top),(right,bottom),color,3) cv2.putText(frame,label,(left,top-10),cv2.FONT_HERSHEY_SIMPLEX,0.8,color2,2) #显示交互窗口 cv2.imshow('xianshi',frame) #监听键盘事件,并判断是否退出 if k == ord(' '):#退出 break #释放摄像头 cap.release() #释放内存 cv2.destroyAllWindows() 效果展示(不带口罩时会有重复语音警告) ———————————————— 版权声明:本文为CSDN博主「lqj_本人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lbcyllqj/article/details/128905097
-
前言 python在人工智能方面可以毫不客气的说,比其他的所有语言都要有优势,因为python的背后有一个非常强大的资源库来支撑着python运作。 opencv库 opencv是最经典的python视觉库,它里面包含了很多种视觉的识别类型供开发者们使用。 opencv库的下载 我们可以在我们的pycharm里面输入以下代码进行下载,但这里我们下载的是阉割版的。 pip install opencv-python 当我们的pycharm下载完成之后,我们呢还需要在opencv的官网进行下载: 首页 - OpenCV 然后我们选择(如下图所示): 进入之后,我们就可以看到opencv相对应的版本了: 然后,我们选择自己使用的系统进行下载并安装即可(仅安装即可,opencv不用环境配置!只需要记住安装在哪里,当我们使用的时候直接调取我们的安装目录就可以!) 当安装完成之后,我们就可以看到安装路径下的这些文件: 里面包含眼睛识别,面部识别等一些强大的识别算法! 人脸检测报警系统(可用于:家用监控;人脸门禁;人脸打卡签到等) 这里我将本功能分为了三个py文件来展开描述: 抓取人脸功能模块 首先,导入cv库 import cv2 然后调取我们的摄像头(0代表本机摄像头,其他代表外接摄像头) cap = cv2.VideoCapture(0) 用while来判断是否为开启状态: while(cap.isOpened()): 得到每一帧的图片进行赋值: ret_flag,Vshow = cap.read() 调用控制键盘函数,控制判断按键: k = cv2.waitKey(1) & 0xFF 使用imshow函数显示拍摄图像: cv2.imshow('ceshi',Vshow) 键盘监听,按s键进行保存: if k == ord('s'): 保存拍摄图像的格式,打印提示文字: cv2.imwrite('E:/tupian/'+str(num)+'.name'+'.jpg',Vshow) print('保存成功'+str(num)+".jpg") print("-------------------------") num += 1 释放摄像头与内存: #释放摄像头 cap.release() #释放内存 cv2.destroyAllWindows() 完整代码: import cv2 cap = cv2.VideoCapture(0) falg = 1 num = 1 while(cap.isOpened()):#检测是否在开启状态 ret_flag,Vshow = cap.read()#得到每一帧的图像 k = cv2.waitKey(1) & 0xFF#判断按键 cv2.imshow('ceshi',Vshow)#显示图像 if k == ord('s'):#按s键保存 cv2.imwrite('E:/tupian/'+str(num)+'.name'+'.jpg',Vshow) print('保存成功'+str(num)+".jpg") print("-------------------------") num += 1 elif k == ord(' '):#退出 break #释放摄像头 cap.release() #释放内存 cv2.destroyAllWindows() 录入人脸功能模块 在写这个功能模块之前,我们要在pycharm中或cmd中的本文件根目录下使用命令行,安装face模块使用函数: pip install opencv-contrib-python 导入第三方库: import os import cv2 from PIL import Image import numpy as np 存储人脸数据: facesSamples=[] 存储姓名数据: ids=[] 存储图片信息: imagePaths=[os.path.join(path,f) for f in os.listdir(path)] 加载分类器(就是我们上面讲到的在opencv官网下载的库,我们只需要调取安装目录就可以): face_detector = cv2.CascadeClassifier('E:/open-cv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') 遍历列表中的图片: for imagePath in imagePaths: 将打开的图片灰度化: PIL_img = Image.open(imagePath).convert('L') 将图片转化为数组: img_numpy = np.array(PIL_img,'uint8') 获取图片人脸特征: faces = face_detector.detectMultiScale(img_numpy) 获取每一张拍摄图片的id与姓名: id = int(os.path.split(imagePath)[1].split('.')[0]) 做判断,预防拍摄无面容图片: for x,y,w,h in faces: ids.append(id) facesSamples.append(img_numpy[y:y+h,x:x+w]) 打印面部特征与id,并返回数据: print('id',id) print('fs:',facesSamples) return facesSamples,ids 调用图片路径(有第一步抓取人脸后按s键保存到'E:/tupian/'路径下的图片): path = 'E:/tupian/' 获取图像数组和id标签数组和姓名: faces,ids=getImageAndLabels(path) 加载识别器: recognizer = cv2.face.LBPHFaceRecognizer_create() 训练数据: recognizer.train(faces,np.array(ids)) 保存面部特征到文件夹(创建一个文件夹,用于存放读取的面部信息): recognizer.write('tupian/tupian.yml') 完整代码: import os import cv2 from PIL import Image import numpy as np def getImageAndLabels(path): #储存人脸数据 facesSamples=[] #储存姓名数据 ids=[] #储存图片信息 imagePaths=[os.path.join(path,f) for f in os.listdir(path)] #加载分类器 face_detector = cv2.CascadeClassifier('E:/open-cv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') #遍历列表中的图片 for imagePath in imagePaths: #打开图片,灰度化PIL有九种不同的模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F PIL_img = Image.open(imagePath).convert('L') #将图像转化为数组,以黑白深浅 img_numpy = np.array(PIL_img,'uint8') #获取图片人脸特征 faces = face_detector.detectMultiScale(img_numpy) #获取每一张图片的id和姓名 id = int(os.path.split(imagePath)[1].split('.')[0]) #预防无面容照片 for x,y,w,h in faces: ids.append(id) facesSamples.append(img_numpy[y:y+h,x:x+w]) #打印面部特征和id print('id',id) print('fs:',facesSamples) return facesSamples,ids if __name__ == '__main__': #图片路径 path = 'E:/tupian/' #获取图像数组和id标签数组和姓名 faces,ids=getImageAndLabels(path) #加载识别器 recognizer = cv2.face.LBPHFaceRecognizer_create() #训练 recognizer.train(faces,np.array(ids)) #保存文件 recognizer.write('tupian/tupian.yml') 人脸识别功能模块 导入第三方库: import cv2 import os 加载训练过的数据文件: recogizer = cv2.face.LBPHFaceRecognizer_create() 加载保存过的面部信息: recogizer.read('tupian/tupian.yml') 定义名称数组: names=[] 识别全局变量定义: warningtime = 0 识别视频中人脸模块: def face_detect_demo(img): gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换为灰度 face_detector=cv2.CascadeClassifier('E:/open-cv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') face=face_detector.detectMultiScale(gray) for x,y,w,h in face: cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1) # 人脸识别 ids, confidence = recogizer.predict(gray[y:y + h, x:x + w]) if confidence > 80: global warningtime warningtime += 1 if warningtime > 100: # warning() warningtime = 0 cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) else: cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) cv2.imshow('result',img) 导入存储的图片名字标签: def name(): path = 'E:/tupian/' # names = [] imagePaths=[os.path.join(path,f) for f in os.listdir(path)] for imagePath in imagePaths: name = str(os.path.split(imagePath)[1].split('.',2)[1]) names.append(name) 加载监控或已保存下来的视频: cap=cv2.VideoCapture('1.mp4') name() while True: flag,frame=cap.read() if not flag: break face_detect_demo(frame) if ord(' ') == cv2.waitKey(10): break 释放内存与视频: cv2.destroyAllWindows() cap.release() 完整代码: import cv2 import os #加载训练数据文件 recogizer = cv2.face.LBPHFaceRecognizer_create() #加载数据 recogizer.read('tupian/tupian.yml') #名称 names=[] #报警全局变量 warningtime = 0 #准备识别的图片 def face_detect_demo(img): gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换为灰度 face_detector=cv2.CascadeClassifier('E:/open-cv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') face=face_detector.detectMultiScale(gray) for x,y,w,h in face: cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1) # 人脸识别 ids, confidence = recogizer.predict(gray[y:y + h, x:x + w]) if confidence > 80: global warningtime warningtime += 1 if warningtime > 100: # warning() warningtime = 0 cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) else: cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) cv2.imshow('result',img) #名字标签 def name(): path = 'E:/tupian/' # names = [] imagePaths=[os.path.join(path,f) for f in os.listdir(path)] for imagePath in imagePaths: name = str(os.path.split(imagePath)[1].split('.',2)[1]) names.append(name) #加载视频 cap=cv2.VideoCapture('1.mp4') name() while True: flag,frame=cap.read() if not flag: break face_detect_demo(frame) if ord(' ') == cv2.waitKey(10): break #释放内存+视频 cv2.destroyAllWindows() cap.release() 最终显示效果: 录入过的面部信息就会显示录入的姓名(如下面的LQJ),未录入过的面部信息就会显示unkonw(不知道的状态)。 ———————————————— 版权声明:本文为CSDN博主「lqj_本人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lbcyllqj/article/details/128801971
-
已完成,第一个字是风开头的。
-
使用ATC命令将LSTM算法模型的ONNX转om格式,报错。使用的脚本:export ASCEND_SLOG_PRINT_TO_STDOUT=1/home/quietwood/Ascend/ascend-toolkit/5.0.mdc300/atc/bin/atc --output="./lstm.om" --model=/home/quietwood/data/model/lstm_opset11.onnx --framework=5 --soc_version=Ascend310 --log=error报错日志:ATC start working now, please wait for a moment.[EVENT] GE(10621,atc.bin):2023-01-30-09:56:48.267.773 [../../../../../../graphengine/ge/init/gelib.cc:68]10621 Initialize:[GEPERFTRACE] GE Init Start[ERROR] FE(10621,atc.bin):2023-01-30-09:56:48.905.127 [../../../../../../fusion_engine/optimizer/graph_optimizer/fusion_common/fusion_pass_manager.cc:154]10621 OpenPassPath:"Failed to open plugin so."[EVENT] FE(10621,atc.bin):2023-01-30-09:56:48.959.909 [../../../../../../fusion_engine/optimizer/fusion_config_manager/fusion_config_parser.cc:243]10621 ParseFusionConfigFile:"[FE_PERFORMANCE]The time cost of FusionConfigParser::ParseFusionConfigFile is [1060] micro second."[EVENT] FE(10621,atc.bin):2023-01-30-09:56:48.960.475 [../../../../../../fusion_engine/optimizer/fusion_config_manager/fusion_priority_manager.cc:79]10621 SortGraphFusion:"[FE_PERFORMANCE]The time cost of FusionPriorityManager::SortGraphFusion is [531] micro second."[EVENT] FE(10621,atc.bin):2023-01-30-09:56:48.960.597 [../../../../../../fusion_engine/optimizer/fusion_manager/fusion_manager.cc:223]10621 Initialize:"[FE_PERFORMANCE]The time cost of FusionManager::Initialize is [638271] micro second."[EVENT] GE(10621,atc.bin):2023-01-30-09:56:49.033.810 [../../../../../../graphengine/ge/init/gelib.cc:97]10621 Initialize:[GEPERFTRACE] The time cost of GELib::Initialize is [765997] micro second.[EVENT] GE(10621,atc.bin):2023-01-30-09:56:49.114.167 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:790]10621 PreRun:PreRun start, graph node size 16, session id 0, graph id 0, graph name lstm.om[EVENT] FE(10621,atc.bin):2023-01-30-09:56:49.121.286 [../../../../../../fusion_engine/optimizer/graph_optimizer/fe_graph_optimizer.cc:467]10621 OptimizeGraphPrepare:"[FE_PERFORMANCE]The time cost of FEGraphOptimizer::OptimizeTagNoConstFoldingGraph is [464] micro second."[EVENT] GE(10621,atc.bin):2023-01-30-09:56:49.121.935 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:693]10621 PreRunOptimizeOriginalGraph:[GEPERFTRACE] The time cost of GraphManager::stages.optimizer.OptimizeOriginalGraphForQuantize is [1123] micro second.[EVENT] GE(10621,atc.bin):2023-01-30-09:56:49.121.964 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:694]10621 PreRunOptimizeOriginalGraph:[GEPERFTRACE] The time cost of GraphManager::stages.optimizer.HandleSummaryOp is [10] micro second.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.140.946 [../../../../../../../../cann/ops/built-in/op_proto/array_ops.cc:1496][OP_PROTO] SqueezeVerify:1496 OpName:[Squeeze] "input shape has dim not equal to 1."[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.140.976 [../../../../../../metadef/graph/shape_refiner.cc:735]10621 InferShapeAndType: ErrorNo: -1(failed) Verifying Squeeze failed.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.154 [../../../../../../graphengine/ge/graph/passes/infershape_pass.cc:41]10621 Run: ErrorNo: 1343242270(Prepare Graph infershape failed) infershape failed. node: Squeeze[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.165 [../../../../../../graphengine/ge/graph/passes/base_pass.cc:88]10621 RunPasses: ErrorNo: 1343225860(Internal errors) Failed to process pass InferShapePass on node Squeeze, result 1343242270, the passes will be terminated immediately.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.172 [../../../../../../graphengine/ge/graph/passes/base_pass.cc:216]10621 RunPassesOneGraph: ErrorNo: 1343242270(Prepare Graph infershape failed) Failed to process passes on node Squeeze type Squeeze, error code: 1343242270[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.199 [../../../../../../graphengine/ge/graph/preprocess/graph_preprocess.cc:1689]10621 InferShapeForPreprocess: ErrorNo: 1343242270(Prepare Graph infershape failed) Run ge_passes infershape for preprocess failed, ret:1343242270.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.219 [../../../../../../graphengine/ge/graph/preprocess/graph_preprocess.cc:1283]10621 FormatAndShapeProcess: ErrorNo: 1343242270(Prepare Graph infershape failed) Prepare Graph infershape failed[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.226 [../../../../../../graphengine/ge/graph/preprocess/graph_preprocess.cc:1417]10621 PrepareDynShape: ErrorNo: 1343242270(Prepare Graph infershape failed) Failed to process Prepare_FormatAndShapeProcess[EVENT] GE(10621,atc.bin):2023-01-30-09:56:49.141.233 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:696]10621 PreRunOptimizeOriginalGraph:[GEPERFTRACE] The time cost of GraphManager::stages.preparer.PrepareDynShape is [19263] micro second.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.239 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:696]10621 PreRunOptimizeOriginalGraph: ErrorNo: 1343242270(Prepare Graph infershape failed) Failed to process GraphManager_stages.preparer.PrepareDynShape[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.141.245 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:809]10621 PreRun: ErrorNo: 1343242270(Prepare Graph infershape failed) Run PreRunOptimizeOriginalGraph failed for graph:lstm.om.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.596 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:881]10621 StartForRunGraph: ErrorNo: 1343242270(Prepare Graph infershape failed) PreRun Failed.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.620 [../../../../../../graphengine/ge/graph/manager/graph_manager.cc:1253]10621 BuildGraph: ErrorNo: 1343242268(PreRun failed.) [BuildGraph] StartForRunGraph failed![ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.632 [../../../../../../graphengine/ge/generator/ge_generator.cc:882]10621 BuildModel: ErrorNo: 1343266819(Graph manager build graph failed.) GraphManager build graph fail, graph id: 0[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.644 [../../../../../../graphengine/ge/generator/ge_generator.cc:580]10621 GenerateModel: ErrorNo: 1343266819(Graph manager build graph failed.) Build model failed.[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.755 [../../../../../../../graphengine/ge/offline/main.cc:1000]10621 GenerateModel: ErrorNo: -1(failed) GE GenerateOfflineModel execute failed[ERROR] GE(10621,atc.bin):2023-01-30-09:56:49.148.768 [../../../../../../../graphengine/ge/offline/main.cc:1001]10621 GenerateModel: ErrorNo: -1(failed) ATC Generate execute failed[EVENT] FE(10621,atc.bin):2023-01-30-09:56:49.684.773 [../../../../../../fusion_engine/optimizer/fusion_manager/fusion_manager.cc:290]10621 Finalize:"[FE_PERFORMANCE]The time cost of FusionManager::Finalize is [525065] micro second."ATC run failed, Please check the detail log, Try 'atc --help' for more informationE14001: Op[Squeeze] type[Squeeze]'s shape is invalid, input shape has dim not equal to 1.
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签