• [问题求助] 华为云最新go sdk中更换实例安全组的api是什么?
    尝试使用: &model.NovaAssociateSecurityGroupRequestBody和&model.NovaDisassociateSecurityGroupRequestBody来实现安全组的更改,但是提示NovaDisassociateSecurityGroupRequestBody:The API does not exist or has not been published in the environment。又试了使用UpdatePort来更改属性,但是也报错:The API does not exist or has not been published in the environment    nicId, err := c.getPrimaryNicId(instanceId)    request := &vpcModel.UpdatePortRequest{        PortId: nicId,        Body: &vpcModel.UpdatePortRequestBody{            Port: &vpcModel.UpdatePortOption{                SecurityGroups: &[]string{NewSegId},            },        },    }    _, err = client.UpdatePort(request) 找了很多api,但是没找到github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.168这个版本可用的api
  • [干货汇总] 开发者技术支持-中文文本如何转汉语拼音
    1.1 问题说明用户想将中文字符串转拼音字符,没有很好的工具类1.2 原因分析没有使用好用的工具类和转化方法1.3 解决思路1)导入拼音工具类2)使用工具类转化方法3)输出转化结果1.4 解决方案1)导入i18n拼音库import { i18n } from '@kit.LocalizationKit';2)常用的拼音编码转化成带音标的:let transliterator1 = i18n.Transliterator.getInstance('Any-Latn');this.lantinMsg = transliterator1.transform(this.message);  转化成不带音标let transliterator2 = i18n.Transliterator.getInstance('Latin-ASCII');this.asciiMsg = transliterator2.transform(this.lantinMsg);  3)案例截图
  • [热门活动] 【华为开发者空间案例完成分享】基于DeepSeek+Dify构建财务报表分析模型,高效赋能财务数据智能化!
    大家好!我刚完成了华为开发者空间的一个实践案例——「基于DeepSeek+Dify构建财务报表分析模型」,特来分享我的成果和心得!✅ 完成时间:2025年8月30日21:50✅ 案例名称:基于DeepSeek+Dify的财务报表分析模型✅ 案例完成截图:     📌 实验心得:本次实践通过DeepSeek强大的自然语言处理能力与Dify平台的低代码开发功能,成功构建了一个智能财务报表分析模型。该模型能够自动提取关键财务指标(如利润率、资产负债结构等),并生成清晰的分析结论,大幅提升了财务数据处理的效率与准确性。在实验过程中,DeepSeek的帮助尤其显著——它能够精准理解财务术语和上下文,结合Dify灵活的工作流设计,让我快速完成了数据预处理、模型调优和部署测试。最终实现的模型不仅支持多格式报表上传,还能输出可视化分析结果,非常适合企业财务智能化升级的需求!华为开发者空间提供的资源和支持非常到位,让整个开发过程流畅且高效。期待未来能进一步探索DeepSeek和Dify在更多业务场景中的应用!按照活动要求,在此贴评论区分享我的案例完成情况,希望符合抽奖条件~同时也欢迎各位开发者一起交流!#华为开发者空间 #DeepSeek #Dify #财务报表分析 #AI应用开发
  • [问题求助] 在ModelArts中部署Qwen3-32B
    使用AI Gallery 资产详情_华为云的Qwen3-32B进行部署,但是一直处于同步失败的问题。我使用的是“西南-贵阳一”。请问有什么解决办法? 另外,我尝试使用ModelArts - Console中的商用模型api进行调用时,总是告诉我包含敏感信息,我们处理的是危化品文本数据。但我们使用阿里云的服务时没有被限制。所有请问这个能否依据自身情况来移除安全限制?
  • [问题求助] 华为公有云和stack如何一并对接
    各位大佬。公司有一套公有云ecs,内部还有一套云stack,现在想一个平台可以完成ecs的统一管理。我看公有云有sdk。配置了sk ak我试了一下,对接很方便。云stack看到了https://bbs.huaweicloud.com/forum/thread-0295102083773168122-1-1.html 【ManageOne二次开发】 【华为云Stack ManageOne运营面北向对接】云资源管理对接指导感觉有点深度啊,而且看来必须通过api的方式对接manageone来对接。所以两个问题请教一下:1. sdk是否可以完成公有云和云stack的同时对接?2. 如果必须通过api的方式,那两种构型接口是否有差距,是否我只要配置不同的地址和授权就可以了(因为时间有限,原谅我没有仔细研究文档) 
  • [案例共创] 【案例共创】基于仓颉编程语言+Cangjie Magic智能体框架+华为云IoTDA+DeepSeek推动智能家居智能体落地
    案例介绍本案例帮助开发者了解仓颉编程语言的能力,以及如何利用仓颉编程语言和Cangjie Magic智能体框架,基于华为云提供的DeepSeek服务开发出功能强大的智能家居智能体,在其中演示了如何通过华为云IoTDA平台和物联网设备进行交互,以推动智能家居智能体技术的落地应用,为用户提供更加智能、便捷的服务体验。 原创声明:  本案例的内容均为原创,部分内容曾经在作者的CSDN博客(cid:link_2)发表过,不涉及抄袭。案例内容1 概述1.1 案例介绍大型语言模型(LLM)的常识推理能力和广泛的通用知识使其非常适合在智能家居场景中理解用户请求。然而,LLM 缺乏关于用户及其家庭的特定知识,这限制了其潜力。我们使用仓颉编程语言和Cangjie Magic智能体框架构建了基于华为云IoTDA的智能家居智能体 克服了现有智能家居App的限制:通过 IoTDA的用户侧API 读取所有设备信息,无需任何编码即可访问任何智能设备,并由智能体工具根据这些设备信息和用户的场景需求自动产生操作设备的指令,并调用IoTDA的用户侧API 发送给智能设备。例如,当用户的请求是“我想看大片”时,智能体就能够自动做出决策:打开客厅电视,调低客厅灯的亮度并关闭客厅窗帘制作影院式的氛围。本案例的架构图参见图1。  图1 案例架构图1.2 适用对象企业个人开发者高校学生本案例需要使用者有仓颉语言编程、大语言模型、智能体以及智能物联网的基本知识。1.3 案例时间本案例总时长预计60分钟。1.4 资源总览本案例预计花费总计0元。资源名称规格单价(元)时长(分钟)云主机2vCPU 4GB X86 Ubuntu 或4vCPUs 8GB ARM Ubuntu免费60IoTDA接入服务标准版免费 2 基于Cangjie Magic开发智能家居智能体2.1 准备开发环境有关华为开发者空间云主机安装仓颉语言开发板环境的详细说明,可参考以下链接:cid:link_02.2 下载并阅读案例代码确保在执行下面步骤前,先运行Cangjie SDK目录中的envsetup.h设置环境变量。先安装并配置Cangjie Magic。进入云主机桌面,右键选择Open Terminal Here打开终端命令窗口,执行命令:git clone https://gitcode.com/Cangjie-TPC/CangjieMagic.git -b devcd CangjieMagic cjc -o build build.cj ./build pre-build然后访问Gitcode网站下载本案例的代码(这里假定CangjieMagic和iotagent是同一级目录)。git clone https://gitcode.com/zealsoft/iotagent.git使用CodeArts IDE for Cangjie打开IoTAgent示例项目。左上点击文件—打开项目,选择前面克隆的示例代码目录。2.3 Cangjie对接DeepSeek接口华为云提供了单模型200万免费Tokens,包含DeepSeek-R1&V3满血版,我们可以登录华为云ModelArts Studio(MaaS)控制台领取免费额度,这里我们选择DeepSeek-V3满血版来搭建我们的智能家居智能体。之所以选择V3而不是R1,主要原因是R1的推理速度太慢了,而智能家居智能体应该有较快的反应速度,所以选择V3版本。在云主机桌面底部菜单栏,点击打开火狐浏览器。用火狐浏览器访问ModelArts Studio首页:cid:link_1,点击ModelArts Studio控制台跳转到登录界面,按照登录界面提示登录,即可进入ModelArts Studio控制台。进入ModelArts Studio控制台首页,区域选择西南-贵阳一,在左侧菜单栏,选择在线推理 > 预置服务 > 免费服务,选择DeepSeek-V3-32K模型,点击领取额度,领取200万免费token。 领取后点击调用说明,可以获取到对应的API地址、模型名称。点击API Key管理-创建API Key。(注意保存好API Key,这个Key只显示一次,以后就无法复制了) 至此,华为云MaaS提供的免费DeepSeek Tokens就领取完成啦,记录对应的API地址、模型名称、API Key留作下面步骤使用。2.4 创建IAM用户登录华为云,在右上角单击“控制台”。在控制台页面,鼠标移动至右上方的用户名,在下拉列表中选择“统一身份认证”。在左侧导航窗格中,选择“用户”,单击右上方的“创建用户”。在“创建用户”界面配置用户基本信息。单击右下角的“下一步”,进入“加入用户组(可选)”界面。选择“按身份策略配置”,确保用户拥有IoTDA相关的权限。单击右下角的“创建用户”,用户创建成功。管理员在用户列表中,单击用户名称,或单击右侧的“安全设置”,进入用户详情页面。选择“安全设置”页签。单击“登录凭证>登录密码”右侧的,重置IAM用户的登录密码。记录下IAM用户名和密码,后面会用到。2.5 在IoTDA中建立智能设备首先进入华为云 IoTDA 网站: https://www.huaweicloud.com/product/iothub.html,点击控制台按钮进行登录。 在控制台界面处点击左上角三条横线,会出现菜单,选择“IoT 物联网” ——“设备接入 IoTDA” , 在左侧栏目中选择 IoTDA 实例,在标准版处选择购买实例。 每位用户都有一次免费的使用机会,在其中选择免费单元即可。 点击“产品”进入页面,然后点击“创建产品”。在产品名称部分输入“智能灯”,协议类型为“MQTT”,数据格式为JSON,其他内容随便填写,然后点击确定。类似的,创建“智能电视”和“智能窗帘”。点击左侧的“所有设备”,然后点击“注册设备”,选择所属的资源空间,然后在“所属产品”中选择“智能灯”,设备标识码为livingroomlight。然后点击确定。进入到“客厅智能灯”的详情页,点击“MQTT连接参数”后的“查看”,会出现下图窗口,记住其中的参数,下面会用到。类似的,建立两个设备“客厅窗帘”和“客厅电视”。2.6 使用MQTTX模拟设备MQTTX是一个免费的MQTT协议客户端,我们借助它来模拟智能家居设备。首先从MQTTX网站下载软件:https://mqttx.app/zh。在 MQTTX 中点击左侧的加号创建一个 MQTT 连接,其中 name 设置为 “客厅照明灯”, Client ID、Host和username password请参照上一节记录的连接参数填写, Port 为 1883,不支持 SSL/TLS。设置如下图所示: 然后点击Connect按钮建立模拟设备到云端的连接。类似的建立另外两个设备的连接。在IoTDA的控制台可以看到3个设备在线。2.7 运行智能家居智能体案例修改main.cj中main函数,添加华为云DeepSeek V3密钥:    Config.env["DEEPSEEK_API_KEY"] = "XXXXXXXXXXXXXXXX"按照实际情况修改下面的参数(请使用华为云账号登录“我的凭证”页面。在“我的凭证”页面,“项目列表”区域可以查看项目ID,账号名就是下面的domain name):    iotda.iotdaEndpoint = "https://bde4cbe7aa.st1.iotda-app.cn-north-4.myhuaweicloud.com"    iotda.projectId = "<yourprojectid>"    iotda.region = "cn-north-4"    iotda.token = iotda.getToken("<domain name>", "<iamusername", "<iampassword>") 先运行Cangjie SDK目录中的envsetup.h设置环境变量,然后执行cjpm run --name iotagent执行智能体程序。可以看到智能体会发送3条指令给设备。此时,在MQTTX中可以看到云端下发的指令。到此整个项目案例创建完成。 3. 案例的扩展考虑到案例的篇幅有限,并且难度不宜过大,有些内容没有包括在本案例中,有兴趣的朋友可以对案例做如下扩展。3.1 设备指令模型目前由于缺乏设置指令的信息,所以智能体发出的指令内容有点随机。IoTDA缺乏对设备支持的指令的描述。所以我们可以在智能体中增加关于设备指令的模型,从而确保大模型发出的指令信息是设备所支持的。3.2 用户偏好记忆Cangjie Magic智能体框架提供了记忆组件,支持多轮对话和长期记忆,我们可以通过对话分析用户的偏好(比如用户喜欢什么风格的音乐和电影),从而提供更好的用户体验。 欢迎朋友们和我一起扩展智能家居智能体。Cangjie Magic智能体框架好啊,要学,真程序员必学仓颉编程语言。我正在参加【案例共创】第4期 基于华为开发者空间+仓颉/DeepSeek/MCP完成应用构建开发实践 https://bbs.huaweicloud.com/forum/thread-02127182415062274055-1-1.html
  • [技术干货] 探索华为云物联网开发:从基础到实践
    引言随着物联网(IoT)技术的迅猛发展,越来越多的开发者和企业开始关注如何高效地构建和管理智能设备。物联网概览物联网通过传感器、RFID等技术实现了物品与物品、物品与人之间的信息交换与通信,构建了一个智能化网络。其架构分为感知层、网络层和应用层,各层次协同工作,实现数据采集、传输与处理。据预测,到2025年全球物联网市场规模将达到1.5万亿美元,在智能家居、智能交通等领域有广泛的应用前景。应用案例智能家居:智能音箱可通过语音控制家电,智能门锁实现远程开门,智能摄像头实时监控家庭安全。智能交通:利用传感器优化交通流量,车联网技术提升交通安全与效率。工业物联网:通过传感器监控生产设备状态,提高生产效率和产品质量。华为云IoT平台介绍华为云IoT平台提供了一套完整的设备接入解决方案,支持设备注册、状态监控、远程控制等功能模块,帮助用户快速搭建稳定的物联网应用。主要功能设备管理:包括设备注册区、设备管理列表、设备详情页等部分,支持多种设备类型的注册与批量操作。在线调试:提供详细的设备创建流程指导,简化了开发者接入设备的难度。消息跟踪:实时监控设备上报的数据,并能下发命令给设备。实例展示以智慧烟感器为例,演示了设备连接平台、上报数据到平台以及平台下发命令给设备的过程。这不仅展示了平台的功能性,还证明了其实时性和高效性。首页搜索“设备接入”,进行服务的开通随后来到控制台,点击你所开通的服务在产品里“创建产品”输入相关产品信息随后到设备页面进行注册设备相关demo案例引导可参考:https://support.huaweicloud.com/qs-iothub/iot_05_00010.html以一款虚拟的智慧烟感器为例,带您快速体验平台的三个基本功能:设备连接平台,设备上报数据到平台,平台下发命令给设备API Explorer助力开发API Explorer是华为云提供的一个强大的工具,它允许开发者快速调试API、查看文档并获取代码示例,极大地提高了开发效率。功能亮点快速上手:降低调试难度,减少开发时间。多语言支持:丰富的代码示例覆盖多种编程语言,满足不同需求。应用场景多样:适用于物联网设备开发、数据分析等多种场景。首页搜索“API Explorer”找到你想要测试的API带星号的是必填信息,填入相关信息即可调试在右侧窗口可查看代码示例复制到IDE里需要填充请求头里的token!!!具体token可使用IAM接口获取结语华为云通过一系列创新的物联网解决方案,为开发者们提供了强大而灵活的工具集,推动了物联网技术的发展。
  • 中国移动和华为联合打造的“移动云手机”荣获2023年ICT优秀案例
    近日,中国移动与华为联合申报的“5G时代算网融合标志性应用——移动云手机”入选了由工业和信息化部新闻宣传中心(人民邮电报社)组织征集的2023年ICT优秀案例,并凭借其在5G业务创新、提升用户体验、算力惠民等方面的突出价值,被授予“算力赋能创新应用”荣誉称号。 作为实体手机的云端延伸,移动云手机基于5G超宽连接通道,接入云端无限算力,突破了本地设备限制,让公众在保障安全私密的前提下实现云端算力的即取即用。其典型场景有:一是算力随身,弹性调用云端算力,突破物理手机性能限制;二是真机延伸,应用及文件上云,释放物理手机存储空间;三是公私分离,多账号绑定,实现一机多机多身份管理;四是数据安全,数据云端存储不落地,手机永不“丢”;五是多端协同,跨云终端之间同屏互动,实现远程协同。 华为基于ARM架构云底座,融合多种创新技术打造云手机极致体验:一、通过自研Monbox软件仿真架构,实现单服务器云机密度翻倍提升,端到端时延持续优化;二、超分还原+AVS3视频流,实现高清低码,大幅提升云上渲染效率;三、创新指令流分离渲染技术,在确保画质的同时进一步降低时延和流量消耗。 移动云手机作为5G用户的个人算力终端,高度契合“算网时代算力赋能数字经济高质量发展”的趋势,为广大用户带来全新的差异化体验和算力普惠服务,而中国移动作为“连接+算力+能力”新型信息服务体系的建设者,有望借此重构算力消费新体验,重构能力底座,重构用户信息服务新入口,为5G发展开辟一条全新业务赛道。
  • [公告] 中国根域名服务器:现状根镜像服务器:( “雪人计划”与IPv6根服务器:网络安全与治理)
    全球根域名服务器分为IPv4和IPv6两种。在IPv4体系中,全球共有13台根服务器,其中1个主根服务器位于美国,其余12个为辅根服务器,分布在美国、欧洲和日本1。在IPv6体系中,全球有25台根服务器,中国写阶段部署了其中的4台,包括1台主根和3台辅根服务器12。中国根域名服务器现状根镜像服务器:中国部署了数十个根镜像服务器,遍布各大骨干网,承担了大量域名解析请求,提高了国内网络访问速度和稳定性34。“雪人计划”与IPv6根服务器:中国积极参与并推动了“雪人计划”,在全球16个国家完成25台IPv6根服务器的架设,其中中国部署了4台,包括1台主根和3台辅根服务器,增强了中国互联网的自主性和安全性25。网络安全与治理:中国建立了根区异常监测系统,实时感知国际根区解析状态,并能在必要时启动快速重路由策略,由国内调度体系接管流量,确保网络稳定运行3。综上所述,中国通过根镜像服务器和IPv6根服务器的布局,构建起了一道坚实的网络安全防线,增强了网络自主性和安全性。
  • [热门活动] 心得
    本人是一名作为大学生,小白,参与次参加了华为活动,并拿下这些认证,于我而言是宝贵的学习历程。在接触人工智能入门认证时,起初看着文档操作,从陌生到逐渐熟悉。跟着文档步骤搭建环境、配置参数,过程中虽因对概念理解不深偶有卡顿,但每解决一个小问题,都让我对ai的底层逻辑有了新认识。我觉得这些认证看似按部就班,但是实则是在不断积累对人工智能算法和开发流程的感知。这段跟着文档学习拿证的经历,让我明白理论与实践结合的重要性。它不仅为我构建了基础技术框架,更培养了我自主学习和解决问题的能力。未来,我会凭借这份经验,更深入探索相关技术领域。  
  • [问题求助] 如何获取华为云主账号的TOKEN?
    1、无法获取华为云账号用户里的企业管理员的TOKEN2、使用IAM登录企业管理员时,提示我该IAM用户名不存在,但是输入的账号名和IAM用户名与我的凭证中一致
  • [问题求助] AKSK java后台鉴权报错
    使用JDK jdk1.8.0_241进行动态鉴权,一直报javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates do not conform to algorithm constraints     at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)     at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)     at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)     at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)     at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1640)     at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)这个是什么原因呢
  • [问题求助] 命令下发的响应怎么写
    响应这么写的:{"result_code":0,"response_name":"COMMAND_RESPONSE","paras":{"result":"success"}},收到命令后,通过调试助手发送响应仍显示超时,怎么办?
  • [技术干货] 登录注册
    主页import prompt from '@ohos.prompt';import Prompt from '@system.prompt';import router from '@ohos.router';/** * Main page */@Entry@Componentstruct MainPage { @State currentIndex: number = 0; private tabsController: TabsController = new TabsController(); private swiperController: SwiperController = new SwiperController(); @State pictures: any[] = [ { Simg1:$r('app.media.fig1')}, { Simg2:$r('app.media.fig2')}, { Simg3:$r('app.media.fig3')}, { Simg4:$r('app.media.fig4')} ] @State othersItems:any[]=[ {title:'我的最爱',img:$r('app.media.love')}, {title:'历史记录',img:$r('app.media.record')}, {title:'消息通知',img:$r('app.media.message')}, {title:'回收站',img:$r('app.media.recycle')}, {title:' 收藏',img:$r('app.media.favorite')}, {title:'购物清单',img:$r('app.media.shopping')}, {title:'动态',img:$r('app.media.circle')}, {title:'计划目标',img:$r('app.media.target')}, ] @State listItems: any[] = [ {title:'排行榜', img:$r('app.media.top'), text: '并肩于雪上之巅'}, {title:'新品首发', img:$r('app.media.new'), text: '新品抢先购!'}, {title:'大牌闪购', img:$r('app.media.brand'), text: '不存在中间商赚差价'}, {title:'发现好物', img:$r('app.media.found'), text: '你想要的这里都有'} ] @State setItems: any[] = [ {title:'推送通知', img:$r('app.media.news'), textF:'开关'}, {title:'数据管理', img:$r('app.media.data')}, {title:'菜单设置', img:$r('app.media.menu')}, {title:'关于', img:$r('app.media.about')}, {title:'清除缓存', img:$r('app.media.storage')}, {title:'隐私协议', img:$r('app.media.privacy')} ] @Builder TabBuilder(title: string, index: number, selectedImg: Resource, normalImg: Resource) { Column() { Image(this.currentIndex === index ? selectedImg : normalImg) .width(25) .height(25) Text(title) .margin({ top: 4 }) .fontSize(10) .fontColor(this.currentIndex === index ? '#1698CE' : '#6B6B6B') } .justifyContent(FlexAlign.Center) .height(56) .width('100%') .onClick(() => { this.currentIndex = index; this.tabsController.changeIndex(this.currentIndex); }) } @Builder settingCell(sI) { Row() { Row({ space: 12 }) { Image(sI.img) .width(22) .height(22) Text(sI.title) .fontSize(16) } if (sI.textF === null) { Image($r('app.media.right_grey')) .width(12) .height(24) } else { Toggle({ type: ToggleType.Switch, isOn: false }) } } .justifyContent(FlexAlign.SpaceBetween) .width('100%') .padding({ left: 8, right: 22 }) } build() { Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) { TabContent() { Scroll() { Column({ space: 12 }) { Column() { Text('首页') .fontWeight(FontWeight.Medium) .fontSize(24) .margin({ top: 12 }) .padding({ left: 12 }) } .width('100%') .alignItems(HorizontalAlign.Start) Swiper(this.swiperController) { ForEach(this.pictures, (img) => { Image(img.Simg1) .borderRadius(16) Image(img.Simg2) .borderRadius(16) Image(img.Simg3) .borderRadius(16) Image(img.Simg4) .borderRadius(16) }, (img: Resource) => JSON.stringify(img.id)) } .margin({ top: 24 }) .autoPlay(true) Grid() { ForEach(this.othersItems, (oI) => { GridItem() { Column() { Image(oI.img) .width(24) .height(24) Text(oI.title) .fontSize(12) .margin({ top: 4 }) } } }) } .columnsTemplate('1fr 1fr 1fr 1fr') .rowsTemplate('1fr 1fr') .columnsGap(8) .rowsGap(12) .padding({ top: 12, bottom: 12 }) .height(124) .backgroundColor(Color.White) .borderRadius(24) Text('列表') .fontSize(16) .fontWeight(FontWeight.Medium) .width('100%') .margin({ top: 12 }) Grid() { ForEach(this.listItems, (lI) => { GridItem() { Column() { Text(lI.title) .fontSize(16) .fontWeight(FontWeight.Medium) Text(lI.text) .margin({ top: 4 }) .fontSize(12) .fontColor('"#99182431"') } .alignItems(HorizontalAlign.Start) } .padding({ top: 8, left: 8 }) .borderRadius(12) .align(Alignment.TopStart) .backgroundImage(lI.img) .backgroundImageSize(ImageSize.Cover) .width('100%') .height('100%') }) } .width('100%') .height(260) .columnsTemplate('1fr 1fr') .rowsTemplate('1fr 1fr') .columnsGap(8) .rowsGap(12) .margin({ bottom: 55 }) } } .height('100%') } .padding({ left: 12, right: 12 }) .backgroundColor('#F1F3F5') .tabBar(this.TabBuilder('首页', 0, $r('app.media.home_selected'), $r('app.media.home_normal'))) TabContent() { Scroll() { Column({ space: 12 }) { Column(){ Text('我的') .fontWeight(FontWeight.Medium) .fontSize(24) .margin({ top: 12 }) .padding({ left: 12 }) } .width('100%') .alignItems(HorizontalAlign.Start) Row() { Image($r('app.media.account')) .width(48) .height(48) Column() { Text('Mr.Xie') .fontSize(20) Text('2521885390@qq.com') .fontSize(12) .margin({ top: 4 }) } .alignItems(HorizontalAlign.Start) .margin({ left: 24 }) } .margin({ top: 24 }) .alignItems(VerticalAlign.Center) .width('100%') .height(96) .backgroundColor(Color.White) .padding({ left: 24 }) .borderRadius(16) List() { ForEach(this.setItems, (sI) => { ListItem() { this.settingCell(sI) } .height(48) }) } .backgroundColor(Color.White) .width('100%') .height('42%') .divider({ strokeWidth: 0.25, color: Color.Grey, startMargin: 42, endMargin: 24 }) .borderRadius(16) .padding({ top: 4, bottom: 4 }) Blank() Button('退出登录', { type: ButtonType.Capsule }) .width('90%') .height(40) .fontSize(16) .fontColor('#FA2A2D') .fontWeight(FontWeight.Medium) .backgroundColor('#E5E8EA') .margin({ bottom: 55}) .onClick(() => { AlertDialog.show({ title:'提示消息', message: '确定退出登录吗?', offset:{ dx:0, dy: -20}, alignment: DialogAlignment.Bottom, gridCount:4, autoCancel:true, primaryButton:{ value:'取消', action:() => { //取消操作 } }, secondaryButton:{ value:'确定', action:() => { router.back({ url: 'pages/LoginPage'}) } }, cancel:() => { //取消操作 } }) }) } .height('100%') } } .padding({ left: 12, right: 12 }) .backgroundColor('#F1F3F5') .tabBar(this.TabBuilder('我的', 1, $r('app.media.mine_selected'), $r('app.media.mine_normal'))) } .width('100%') .backgroundColor(Color.White) .barHeight(56) .barMode(BarMode.Fixed) .onChange((index: number) => { this.currentIndex = index; }) }}登录import router from '@ohos.router'import prompt from '@ohos.promptAction';@Extend(TextInput) function InputStyle(){//输入框统一样式 .width('90%').height('25%') .backgroundColor('#f1f3f5') .placeholderColor('#99182431')}@Extend(Line)function linestyle(){//直线统一样式 .height(1) .width('100%') .backgroundColor(Color.Gray)}@Extend(Button)function buttonstyle(){//按钮统一样式 .type(ButtonType.Circle) .width(65) .height(65) .backgroundColor('#d7eef8f7')}@Entry@Componentstruct denglu { @State account:string='' @State password:string='' @State caccount:string=(router.getParams()as Record<string,string>)['account'] @State cpassword:string=(router.getParams()as Record<string,string>)['password'] denglu():void{ if(this.account==''||this.password=='') { prompt.showToast({ message:'账户或密码不能为空!' }) }else { if( (this.account!= this.caccount) ||(this.password!=this.cpassword)){ prompt.showToast({ message: '账号或密码错误,请重新输入' }) } else { router.pushUrl({ url:'pages/zhuye', }) } } } build() { // 根组件 Column({space:10}){ // logo Column(){ Row(){ Image($r("app.media.icon")) .width(70) .height(70) .margin({top:25}) } Row(){ Text('登录界面') .fontSize(30) .fontWeight(FontWeight.Bold) .margin({top:12}) } Row(){ Text('登录已享受更多服务') .fontColor(Color.Gray) .fontSize(17) .fontWeight(FontWeight.Regular) .margin({top:10}) } } .height('20%') .width('100%') .margin({top:35}) // 输入框 Column(){ Column({space:17}){ TextInput({placeholder:'账号'}) .InputStyle() .type(InputType.Number) .maxLength(15) .onChange((value:string)=>{ this.account=value }) Line() .linestyle() TextInput({placeholder:'密码'} ).InputStyle() .type(InputType.Password) .maxLength(8) .onChange((value:string)=>{ this.password=value }) Line() .linestyle() } Row(){ Row(){ Text('发送短信验证码') .fontSize(16) .fontColor('#ff137cf1') .margin(10) }.justifyContent(FlexAlign.Start) .width('50%') Row(){ Text('重置') .fontSize(16) .fontColor('#ff137cf1') .margin(10) }.justifyContent(FlexAlign.End) .width('50%') }.width('100%') .margin({top:15}) } .height('30%') .width('100%') .margin({top:45}) // 登录方式 Column() { Row() { Button('登录') .width('70%') .height('14%') .fontColor(Color.White) .fontWeight(FontWeight.Bold) .fontSize(30) .onClick(()=>{ this.denglu() }) }.margin({ bottom: 20 }) Row() { Text('注册账号') .fontSize(27) .fontWeight(FontWeight.Bold) .fontColor('#007dff') }.justifyContent(FlexAlign.Center) .width('30%') .onClick(()=>{ router.pushUrl({url:'pages/zhuce'}) }) Row() { Text('其他登录方式') .fontSize(16) .fontColor('#99182431') .fontWeight(400) }.margin({top:25}) Row(){ Button() { Image($r('app.media.weixin')) .width(60) .height(60) }.buttonstyle() Button() { Image($r('app.media.qq')) .width(60) .height(60) }.buttonstyle() Button() { Image($r('app.media.douyin')) .width(60) .height(60) }.buttonstyle() } .margin({top:25}) .justifyContent(FlexAlign.SpaceAround) .width('100%') } .height('60%') .width('100%') } .width('100%') .height('100%') .backgroundColor('#d7b1e2f0') }}注册import router from '@ohos.router'import prompt from '@ohos.promptAction';@Extend(TextInput) function InputStyle(){//输入框统一样式 .width('90%').height('16%') .backgroundColor('#f1f3f5') .placeholderColor('#99182431')}@Extend(Line)function linestyle(){//直线统一样式 .height(1) .width('100%') .backgroundColor(Color.Gray)}@Extend(Button)function buttonstyle(){//按钮统一样式 .type(ButtonType.Circle) .width(65) .height(65) .backgroundColor('#d7eef8f7')}@Entry@Componentstruct zhhuce { @State account:string='' @State password:string='' @State rpassword:string=''@State isShowProgress:boolean=false private timeOutId=-1; zhuce():void{ if(this.account==''||this.password==''||this.rpassword=='') { prompt.showToast({ message:'注册信息不能为空,请重新输入' }) }else { if (this.password != this.rpassword) { prompt.showToast({ message: '密码不一致,请重新核对后输入' }) } else { this.isShowProgress=true if(this.timeOutId===-1){ this.timeOutId=setTimeout(()=>{ prompt.showToast({ message:'注册成功!' }) this.isShowProgress=false this.timeOutId=-1 router.pushUrl({ url:'pages/denglu', params:{ account:this.account, password:this.password } }) },2000) } } } } aboutToDisappear(){ clearTimeout(this.timeOutId) this.timeOutId=-1 } build() { // 根组件 Column({space:10}){ // logo Column(){ Row(){ Image($r("app.media.icon")) .width(70) .height(70) .margin({top:25}) } Row(){ Text('注册界面') .fontSize(30) .fontWeight(FontWeight.Bold) .margin({top:12}) } Row(){ Text('注册新用户') .fontColor(Color.Gray) .fontSize(17) .fontWeight(FontWeight.Regular) .margin({top:10}) } } .height('30%') .width('100%') .margin({top:25}) // 输入框 Column(){ Column({space:17}){ TextInput({placeholder:'账号'}) .InputStyle() .type(InputType.Number) .maxLength(15) .onChange((value:string)=>{ this.account=value }) Line() .linestyle() TextInput({placeholder:'密码'} ).InputStyle() .type(InputType.Password) .maxLength(8) .onChange((value:string)=>{ this.password=value }) Line() .linestyle() TextInput({placeholder:'确认密码'}) .InputStyle() .type(InputType.Password) .maxLength(8) .onChange((value:string)=>{ this.rpassword=value }) Line() .linestyle() } Row(){ Row(){ Text('发送短信验证码') .fontSize(16) .fontColor('#ff137cf1') .margin(10) }.justifyContent(FlexAlign.Start) .width('50%') Row(){ Text('重置') .fontSize(16) .fontColor('#ff137cf1') .margin(10) }.justifyContent(FlexAlign.End) .width('50%') }.width('100%') .margin({top:15}) } .height('40%') .width('100%') .margin({top:-40}) if(this.isShowProgress){ LoadingProgress() .margin({top:-50}) .backgroundColor('#182431') .width(60) .height(60) } // 登录方式 Column() { Row() { Button('注册') .width('90%') .height('11%') .fontColor(Color.White) .fontWeight(FontWeight.Bold) .fontSize(25) .onClick(()=>{ this.zhuce() }) }.margin({top:-18}) Row() { Text('登录') .fontSize(25) .fontWeight(FontWeight.Bold) .fontColor('#007dff') .onClick(()=>{ router.pushUrl({ url:'pages/denglu', params:{ account:this.account, password:this.password } }) }) }.justifyContent(FlexAlign.Center) .width('30%') .margin({ top: 10 }) Row() { Text('其他登录方式') .fontSize(16) .fontColor('#99182431') .fontWeight(400) }.margin({top:25}) Row(){ Button() { Image($r('app.media.weixin')) .width(60) .height(60) }.buttonstyle() Button() { Image($r('app.media.qq')) .width(60) .height(60) }.buttonstyle() Button() { Image($r('app.media.douyin')) .width(60) .height(60) }.buttonstyle() } .margin({top:25}) .justifyContent(FlexAlign.SpaceAround) .width('100%') } .height('60%') .width('100%') } .width('100%') .height('100%') .backgroundColor('#d7eef8f7') }}
  • [大赛专区] 【开发者学习赛-CodeArt API赛道】【语音合成应用开发】指导文档
    【大赛简介】随着智能客服、服务机器人、出行导航、智能家居等应用的普及,语音合成技术也迎来了新的机遇。本赛道围绕华为云CodeArts API和IDE服务,并结合AI技术,可以快速创建语音合成应用,并实现按照文本要求输出专属场景音色音频。本赛题要求参赛选手根据指导文档,通过华为云CodeArts API和IDE服务完成语音合成应用开发,并生成音频。操作指导如下:【环节一】 通过CodeArts API设计语音合成接口1、 进入CodeArts API官网点击网页版体验并登录https://developer.huaweicloud.com/develop/codeartsapi.html2、创建项目登录后点击页面右上角的“创建项目”按钮在创建项目弹窗中输入项目名称:语音合成,并点击保存提示保存成功,点击API设计页签,进入到API设计页面3、设计接口点击接口搜索栏右侧“+”,选择 “新建API接口”。显示新建标签页输入接口的URL:/tts输入接口名称:语音合成下拉滚动条到请求体区域,单击“Body页面”,单击“raw”显示请求体的数据结构模板,默认根节点类型为“object”点击根节点最右侧的“+”操作页面上在根节点下新增一条参数(可以通过滚动条左右拖动)将参数名设置为text,描述设置为待合成的文本下拉页面,看到返回响应区域同样点击根节点最右侧的“+”操作(可以通过滚动条拖动到最右侧),在根节点下显示一条新的参数将参数名设置为result,将描述设置为合成结果点击右上角的保存按钮保存成功,设计完成【环节二】通过API Explorer调试语音合成接口,生成5段数据流登录API Explorer链接>>cid:link_2调整音频格式、采样率、男女声、语速、音色等参数,输入文字文本后,生成语音。如生成语音格式为wav,采样率:8000,标准女音,语速0,音色0生成语音格式为mp3,采样率:8000,标准女音,语速100,音色100【环节三】基于华为云自研CodeArts IDE,实现数据流转换为音频的功能1、打开CodeArts IDE ONLINE点击链接>>cid:link_4,免费体验云开发2、实现数据流转换为音频2.1 将实验用Demo工程上传到CodeArts IDE Online1)Demo工程下载链接>>cid:link_1打开CodeArts IDE Online后,左上角点击“文件”->“上传文件”:2)上传“CodeArtsProject.zip”,点击“终端”对工程进行解压3)左上角->文件->打开,打开解压后的工程目录2.2 在华为云控制台新增访问秘钥,配置AK/SK1)登录华为云控制台:https://console.huaweicloud.com/iam/?agencyId=599e2ee1492f48e9b69a0a682d435fb8®ion=cn-north-4&locale=zh-cn#/mine/accessKey,选择“我的凭证”->“访问秘钥”->新增访问秘钥,如果已经有AK/SK秘钥,不需要新增访问秘钥创建秘钥成功后点击“立即下载”,即可获得“credentials.csv”文件,里面可以查看到AK(Access Key Id)和SK(Secret Access Key)2)进入工程,src/main/resources下选择credentials.properties,讲AK/SK配置上2.3 将API Explorer上调试成功的流数据文件配置到APIResponse.json中在语音合成章节,我们在API Explorer完成接口的调试cid:link_2,最终生成“SIS_RunTts_ResponseBody_xxxxxxxxxxxxx.json”文件,打开json文件,复制响应体内容打开工程,进入src/main/resources中,选择APIResponse.json,将json文件的内容复制到APIResponse.json中。2.4 执行“should_return_audio_when_response_json”,生成mps格式音频文件找到test目录下的测试类SisServiceTest.java,点击找到方法“should_return_audio_when_response_json()”,点击Run Test,最后可以看到目录下生成的音频文件。目录下生成“devkit.mps”文件右击下载,可以获得转换后的音频文件,实验结束【提交要求】1、提交内容:(1)环节一、二、三均需要提交最终完成页面的截图;(2)环节三需要额外提交生成的音频文件;(3)截图需要包含华为云账号。2、提交方式::将提交内容打包成RAR/ZIP压缩包上传至大赛“提交作品”页>>Link。3、作品命名:以“姓名-联系方式”格式命名。4、提交次数:赛事期间,每人每天最多可提交2次,以最终提交的版本为准。
总条数:162 到第
上滑加载中