华为云用户手册

  • 操作场景 分布式消息服务Kafka版为实例、Topic、消费者提供了几个常用配置参数的默认值,您可以根据实际业务需求,在控制台自行修改参数值。其他在控制台未列出的配置参数,请参考Kafka配置进行修改。 Kafka实例的参数分为动态参数和静态参数: 动态参数:动态参数修改成功后,无需重启实例,立即生效。 静态参数:静态参数修改成功后,需要手动重启实例才能生效。 部分老实例不支持修改配置参数,具体以控制台为准,此时请联系客服解决。 单机版实例不支持修改配置参数。
  • 删除Kafka Topic(Kafka客户端) Kafka客户端版本为2.2以上时,支持通过kafka-topics.sh删除Topic。 已开启密文接入的实例,“allow.everyone.if.no.acl.found”设置为“false”时,无法通过客户端删除Topic。 未开启密文接入的Kafka实例,在Kafka客户端的“/bin”目录下,通过以下命令删除Topic。 ./kafka-topics.sh --bootstrap-server ${connection-address} --delete --topic ${topic-name} 已开启密文接入的Kafka实例,通过以下步骤删除Topic。 (可选)Kafka安全协议为“SASL_PLAINTEXT”还是“SASL_SSL”? SASL_PLAINTEXT:如果已经设置了用户名和密码,请跳过此步骤。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码。 SASL_SSL:如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码,以及SSL证书配置。 在Kafka客户端的“/bin”目录下,通过以下命令删除Topic。 ./kafka-topics.sh --bootstrap-server ${connection-address} --delete --topic ${topic-name} --command-config ./config/ssl-user-config.properties
  • 查看消费进度(Kafka客户端) 未开启密文接入的Kafka实例,在Kafka客户端的“/bin”目录下,通过以下命令查询消费进度。 ./kafka-consumer-groups.sh --bootstrap-server ${connection-address} --offsets --describe --all-groups 已开启密文接入的Kafka实例,通过以下步骤查询消费进度。 (可选)Kafka安全协议为“SASL_PLAINTEXT”还是“SASL_SSL”? SASL_PLAINTEXT:如果已经设置了用户名和密码,请跳过此步骤。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码。 SASL_SSL:如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码,以及SSL证书配置。 在Kafka客户端的“/bin”目录下,通过以下命令查询消费进度。 ./kafka-consumer-groups.sh --bootstrap-server ${connection-address} --offsets --describe --all-groups --command-config ./config/ssl-user-config.properties
  • 变更实例规格的影响 变更实例规格的时长和代理数量有关,单个代理的变更时长一般在5~10分钟,代理数量越多,规格变更时间越长。 表2 变更实例规格的影响 变更配置类型 影响 基准带宽/代理数量 扩容基准带宽/代理数量不会影响原来的代理,业务也不受影响。 扩容基准带宽/代理数量时,系统会根据当前磁盘大小进行相应比例的存储空间扩容。例如扩容前实例的代理数为3,每个代理的磁盘大小为200GB,扩容后实例的代理数为10,此时代理的磁盘大小依旧为200GB,但是总磁盘大小为2000GB。 新创建的Topic才会分布在新代理上,原有Topic还分布在原有代理上,造成分区分布不均匀。通过修改分区平衡,实现将原有Topic分区的副本迁移到新代理上。 存储空间 扩容存储空间有次数限制,只能扩容20次。 扩容存储空间不会影响业务。 代理规格 若Topic为单副本,扩容/缩容期间无法对该Topic生产消息或消费消息,会造成业务中断。 若Topic为多副本,扩容/缩容代理规格不会造成服务中断,但可能会导致消费的分区消息发生乱序,请谨慎评估业务影响,建议您在业务低峰期扩容/缩容。 扩容/缩容代理规格的过程中,节点滚动重启造成分区Leader切换,会发生秒级连接闪断,在用户网络环境稳定的前提下,Leader切换时长一般为1分钟以内。多副本的Topic需要在生产客户端配置重试机制,方法如下: 生产客户端为Kafka开源客户端时,检查是否配置retries参数,建议此参数值设置为3~5。 生产客户端为Flink客户端时,检查是否配置重启策略,配置重启策略可以参考如下代码。 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, Time.seconds(20))); 若实例已创建的分区数总和大于待缩容规格的实例分区数上限,此时无法缩容。不同规格配置的实例分区数上限不同,具体请参见产品规格。 例如:kafka.4u8g.cluster*3的实例,已创建800个分区,您想把此实例的规格缩容为kafka.2u4g.cluster*3,kafka.2u4g.cluster*3规格的实例分区数上限为750,此时无法缩容。
  • 带宽限制值估算方法 带宽限制值受分区平衡任务执行时间、分区副本Leader/Follower分布情况以及消息生产速率等因素影响,具体分析如下。 带宽限制值作用范围为整个Broker,对该Broker内所有副本同步的分区进行带宽限流。 带宽限制会将分区平衡后新增的副本视为Follower副本限流,分区平衡前的Leader副本视为Leader副本限流,Leader副本的限流和Follower副本限流分开计算。 带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,因此两者的流量都会被限流统计。 假设分区平衡任务需要在200s内完成,每个副本的数据量为100MB,在以下几种场景中,估算带宽限制值。 场景一:Topic1有2分区2副本,Topic2有1分区1副本,所有Leader副本在同一个Broker上,Topic1和Topic2分别需要新增1个副本 表3 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1 Topic1 1 0 0,2 Topic2 0 0 0 表4 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1,2 Topic1 1 0 0,1,2 Topic2 0 0 0,2 图7 场景一分区平衡图 如图7所示,有3个副本需要从Broker 0拉取数据,Broker 0中每个副本的数据量为100MB,Broker 0中只有Leader副本,Broker 1和Broker 2中只有Follower副本,由此得出以下数据: Broker 0在200s内完成分区平衡所需的带宽限制值=(100+100+100)/200=1.5MB/s Broker 1在200s内完成分区平衡所需的带宽限制值=100/200=0.5MB/s Broker 2在200s内完成分区平衡所需的带宽限制值=(100+100)/200=1MB/s 综上所述,若想要在200s内完成分区平衡任务,带宽限制值应设为大于等于1.5MB/s。由于控制台的带宽限制只能是整数,因此带宽限制值应设为大于等于2MB/s。 场景二:Topic1有2分区1副本,Topic2有2分区1副本,Leader副本分布在不同Broker上,Topic1和Topic2分别需要新增1个副本 表5 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0 Topic1 1 1 1 Topic2 0 1 1 Topic2 1 2 2 表6 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,2 Topic1 1 1 1,2 Topic2 0 1 1,2 Topic2 1 2 2,0 图8 场景二分区平衡图
  • DMS for Kafka请求条件 您可以在创建自定义策略时,通过添加“请求条件”(Condition元素)来控制策略何时生效。请求条件包括条件键和运算符,条件键表示策略语句的 Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如dms:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。 DMS for Kafka通过 IAM 预置了一组条件键,例如,您可以先使用dms:ssl条件键检查Kafka实例是否开启SASL,然后再允许执行操作。下表显示了适用于DMS for Kafka服务特定的条件键。 表2 DMS for Kafka请求条件 DMS for Kafka条件键 运算符 描述 dms:connector Bool Null 是否开启Smart Connect dms:publicIP Bool Null 是否开启公网 dms:ssl Bool Null 是否开启SSL
  • DMS for Kafka自定义策略样例 如果系统预置的DMS for Kafka权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考细粒度策略支持的授权项。 目前华为云支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。下面为您介绍常用的DMS for Kafka自定义策略样例。 DMS for Kafka的权限与策略基于分布式消息服务DMS,因此在IAM服务中为DMS for Kafka分配用户与权限时,请选择并使用“DMS”的权限与策略。 由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的细粒度策略后,大概需要等待5分钟细粒度策略才能生效。 示例1:授权用户删除实例和重启实例 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dms:instance:modifyStatus", "dms:instance:delete" ] } ] } 示例2:拒绝用户删除实例 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予DMS FullAccess的系统策略,但不希望用户拥有DMS FullAccess中定义的删除实例权限,您可以创建一条拒绝删除实例的自定义策略,然后同时将DMS FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对DMS for Kafka执行除了删除实例外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dms:instance:delete" ] } ] }
  • DMS for Kafka资源 资源是服务中存在的对象。在DMS for Kafka中,资源包括:kafka,您可以在创建自定义策略时,通过指定资源路径来选择特定资源。 表1 DMS for Kafka的指定资源与对应路径 指定资源 资源名称 资源路径 kafka 实例 【格式】 DMS:*:*:kafka:实例ID 【说明】 对于实例资源,IAM自动生成资源路径前缀DMS:*:*:kafka: 通过实例ID指定具体的资源路径,支持通配符*。例如: DMS:*:*:kafka:*表示任意Kafka实例。
  • 示例流程 图1 给用户授权DMS for Kafka权限流程 创建用户组并授权 在IAM控制台创建用户组,并授予DMS for Kafka的只读权限“DMS ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择分布式消息服务Kafka版,进入Kafka实例主界面,单击右上角“购买Kafka实例”,尝试购买Kafka实例,如果无法购买Kafka实例(假设当前权限仅包含DMS ReadOnlyAccess),表示“DMS ReadOnlyAccess”已生效。 在“服务列表”中选择云硬盘(假设当前策略仅包含DMS ReadOnlyAccess),若提示权限不足,表示“DMS ReadOnlyAccess”已生效。 在“服务列表”中选择分布式消息服务Kafka版(假设当前策略仅包含DMS ReadOnlyAccess),进入Kafka实例主界面,如果能够查看Kafka实例列表,表示“DMS ReadOnlyAccess”已生效。
  • 基本概念 账号 用户注册时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在IAM中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 详情请参见区域和可用区。 可用区(AZ,Availability Zone) 一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中购买资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中资源,使得资源的权限控制更加精确。 图1 项目隔离模型 在我的凭证下,您可以查看项目ID。 git 分布式版本管理软件,最初由Linus Torvalds创作。 分支(Branching) 在版本控制与软件配置管理中,分支是由某个版本的程式码或软件物件中建立复制版本,在分支出来后的两个版本,可以独立进行修改。分支会形成树状结构,也被称为trees,streams或codelines。原始的版本,称为父分支(parent branch)或是上游分支(upstream branch)。分支出来的复本,称为子分支(Child branches)。作为最源头,没有父分支的分支,称为主干(trunk)或主线(mainline)。 修订标签 / 标签(revision tag / tag) 在版本控制系统中,对应某一项目特定修订版本的文本标签。可以让使用者针对项目的某一特定状态给予有意义的名称。一些版本控制系统的指令可以用修订标签代替修订版本标识符。在软件开发过程中,可以用修订标签来标示软件特定的软件版本周期,例如“1.2版”。 分叉(复刻/fork) 一个软件工程名词,发生在当开发人员从一个软件包拷贝了一份源代码然后在其上进行独立的开发,创建不同的软件。这个术语不只意味着版本控制上的分支,同时也意味着开发者社区的分割,是一种形式的分裂。 在Github出现之后,fork成为常态,再加上合并请求的机制,事实上社区并未分裂,却变得更加繁荣了。 合并请求(Pull requests/merge request) 用户可以将自己的代码(在fork仓库中编写,或者在某个新的分支中编写),提出合并请求,由代码仓库的管理审核,并合入。 父主题: 使用前必读
  • 结构定义 表1 请求Body参数 参数 是否必选 参数类型 描述 etag 是 String 参数说明:Map消息的etag,格式为:地图来源_格式标准_标准对应的版本_扩展说明_时间。仅允许数字、大小写字母及下划线(_)的组合。 mapParts 是 Array of UploadMapPart objects 参数说明:高精地图的区域列表。 表2 UploadMapPart 参数 是否必选 参数类型 描述 referencePoints 是 Array of UploadMapReferencePoint objects 当前区域的分割参考点,即当前区域地图数据需下发的目标设备 nodes 是 Array of UploadMapNode objects 基于V2X MAP消息集定义的node节点,单一分片地图暂定最大63个node partNo 否 Integer 参数说明:地图分片编号。当“referencePoints”中的“deviceType”为“OBU”时为必须填。 最小值:1 最大值:65535 表3 UploadMapReferencePoint 参数 是否必选 参数类型 描述 deviceType 是 String 参考点设备的设备类型。 deviceId 是 String 参考点设备的设备id, 若设备类型为RSU则为rsu_id,若设备类型为Edge则为v2x_edge_id,若设备类型为OBU则为"all"。设备id为36位小写字母、数字及中划线(-)的组合",或者是"all"。 表4 UploadMapNode 参数 是否必选 参数类型 描述 name 否 String 参数说明:节点属性名称。仅允许小写字母、大写字母、数字、下划线(_)及中划线(-)的组合。 最小长度:1 最大长度:256 id 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 refPos 是 UploadMapPosition3D object 参数说明:位置信息。 inLinks 否 Array of UploadMapLink objects 参数说明:节点上下游路段集合。 zone 否 Array of UploadMapZone objects 参数说明:特殊区域,如导流线,禁停区等。 表5 UploadMapPosition3D 参数 是否必选 参数类型 描述 lat 是 Number 参数说明:定义纬度数值,北纬为正,南纬为负,单位为:1°,精确到小数点后7位; 最小值:-90 最大值:90 lon 是 Number 参数说明定义经度数值。东经为正,西经为负,单位为:1°,精确到小数点后7位; 最小值:-180 最大值:180 ele 否 Number 参数说明:定义车辆海拔高程,可选,单位为分米。数值-4096 表示无效数值。 最小值:-4096 最大值:61439 表6 UploadMapLink 参数 是否必选 参数类型 描述 name 否 String 参数说明:路段名称。仅允许小写字母、大写字母、数字、下划线(_)及中划线(-)的组合。 最小长度:1 最大长度:256 upstreamNodeId 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 speedLimits 否 Array of UploadMapSpeedLimit objects 参数说明:限速列表,最大9个。 linkWidth 是 Integer 参数说明:车道宽度,单位cm。 最小值:0 最大值:400 points 否 Array of UploadMapPosition3D objects 参数说明:路段中心点,数量范围(2~31)。 movements 否 Array of UploadMapMovement objects 参数说明:下游信息,最大32个。 lanes 是 Array of UploadMapLane objects 参数说明:路段包含的车道,最大32个。 stopLine 否 Array of UploadMapPosition3D objects 参数说明:道路停止线,一般在红绿灯路口定义多个坐标点连接成为一条线,通常为两点连接为一条直线,也可以是一条折线,数量范围(2-32)。 表7 UploadMapMovement 参数 是否必选 参数类型 描述 remoteIntersection 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 phaseId 否 Integer 参数说明:信号灯相位ID,数值0表示无效ID。 最小值:0 最大值:255 表8 UploadMapLane 参数 是否必选 参数类型 描述 laneId 是 Integer 参数说明:车道ID。车道定义在每一条有向路段上,同一条有向路段上的每个车道,都拥有一个单独的ID。以该车道行驶方向为参考,自左向右从1开始编号 最小值:0 最大值:20 laneWidth 是 Integer 参数说明:车道宽度,单位cm。 最小值:0 最大值:400 laneAttributes 是 UploadMapLaneAttributes object 参数说明:定义车道属性。包括车道共享情况以及车道本身所属的类别特性。 maneuvers 否 Array of strings 参数说明:车道所允许的行驶方向。 取值范围: straightAllowed:允许直行 leftAllowed:允许左转向 rightAllowed:允许右转向 uTurnAllowed:允许掉头转向 leftTurnOnRedAllowed:红灯情况下允许左转向 rightTurnOnRedAllowed:红灯情况下允许右转向 laneChangeAllowed:允许变道 noStoppingAllowed:不允许停车 yieldAllWaysRequired:非保护车道状态,如永久黄灯状态 goWithHalt:停车,再前行 caution:小心前行 connectsTo 否 Array of UploadMapConnection objects 参数说明:车道与下游路段车道的连接关系列表。 speedLimits 否 Array of UploadMapSpeedLimit objects 参数说明:限速列表,最大9个。 points 是 Array of UploadMapPosition3D objects 参数说明:车道中间点列表。 parkingSlots 否 Array of UploadMapParkingSlot objects 参数说明:路边停车位。 表9 UploadMapLaneAttributes 参数 是否必选 参数类型 描述 shareWith 否 Array of strings 参数说明:定义车道被共享的情况。在已有的车道属性定义基础上,该数据表示此车道还会有其他的交通参与者出现,并可能拥有相同的路权。 取值范围: overlappingLaneDescriptionProvided:当存在其他车道时,描述重叠共享车道的路径。不适用简单交叉车道。 multipleLanesTreatedAsOneLane:当车道对象的路径和宽度细节表示多个车道的情况下,使用该参数判断是否为多个车道。各种模式和交通类型都可以共享该车道。 otherNonMotor:其他非机动车类型的共享车道情况。 individualMotorizedVehicle:个人机动车共享车道情况。 bus:公交车共享车道情况。 taxi:出租车共享车道情况。 pedestrians:人群共享车道情况。 cyclistVehicle:自行车共享车道情况。 trackedVehicle:履带车共享车道情况。 pedestrian:行人共享车道情况。 laneType 是 UploadMapLaneTypeAttributes object 参数说明:道路属性,根据道路类型定义其具体的属性。该属性包含多个子属性,对于一条车道,只有一个属性会生效,正常情况下只携带一个子属性。如果携带了多个子属性,属于异常情况,取第一个携带的子属性。 leftBoundary 是 UploadMapLaneBoundary object 参数说明:定义车道线属性。 rightBoundary 是 UploadMapLaneBoundary object 参数说明:定义车道线属性。 hovTimes 否 Array of UploadMapHovTime objects 参数说明:hov(多成员车道,High-Occupancy Vehicle Lane)生效时间。 busTimes 否 Array of UploadMapBusTime objects 参数说明:公交车道生效时间生效时间。 prohibitInfos 否 Array of UploadMapProhibitInfo objects 参数说明:禁行信息。 表10 UploadMapLaneTypeAttributes 参数 是否必选 参数类型 描述 vehicle 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable ramp hovLaneOnly busOnly taxiOnly publicUseOnly emergency permissionOnRequest crosswalk 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable bicyleAllowed xWalkFlyOver fixedCycleTime biDirectionalCycleTimes hasPushWalkButton audioSupport rfSignalRequestPresent unsignalizedSegmentsPresent bikeLane 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable pedestrianAllowed bikeFlyOver fixedCycleTime biDirectionalCycleTimes isolatedByBarrier unsignalizedSegmentsPresent sidewalk 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable bicyleAllowed sidewalkFlyOver walkBikes median 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable median whiteLineHashing stripedLines doubleStripedLines trafficCones constructionBarrier trafficChannels lowCurbs highCurbs striping 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable drawOnLeft drawOnRight connectingLanesLeft connectingLanesRight connectingLanesAhead trackedVehicle 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable commuterRailRoad lightRailRoad heavyRailRoad otherRailType parking 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable parallelParking headInParking notParkZone parkingForBus parkingForTaxi noPublicParking 表11 UploadMapLaneBoundary 参数 是否必选 参数类型 描述 type 是 String 参数说明:车道线类型。 取值范围: singleSolidLine: 单实线 doubleSolidLine: 双实线 singleDashedLine: 单虚线 doubleDashedLine: 双虚线 dashedSolidLine: 虚实线(内虚,外实) solidDashedLine: 实虚线(内实,外虚) curbside: 路牙 railing: 栏杆 wall: 墙 color 否 String 参数说明:车道线颜色。 取值范围: white: 白色 yellow: 黄色 width 否 Integer 参数说明:车道线宽度,单位:厘米 最小值:0 最大值:100 表12 UploadMapHovTime 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表13 UploadMapBusTime 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表14 UploadMapProhibitInfo 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 vehicleType 是 Integer 参数说明:车辆类型,参考车辆基本类型。 最小值:0 最大值:100 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表15 UploadMapConnection 参数 是否必选 参数类型 描述 remoteIntersection 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 connectingLane 否 UploadMapConnectingLane object 参数说明:用于定位上游车道转向连接的下游车道。包括下游车道 ID 以及该转向的允许行驶行为下游车道 ID 的作用范围是该车道所在的路段。 phaseId 否 Integer 参数说明:定义信号灯相位ID。数值0表示无效。 最小值:0 最大值:255 表16 UploadMapNodeReferenceId 参数 是否必选 参数类型 描述 region 否 Integer 参数说明:所在区域在地图中的编号,数值0仅用于测试。 最小值:0 最大值:65535 id 是 Integer 参数说明:节点编号。路网最基本的构成即节点和节点之间连接的路段。节点可以是路口,也可以是一条路的端点。一个节点的ID在同一个区域内是唯一的。 数值0~255预留为测试使用。 最小值:0 最大值:65535 表17 UploadMapConnectingLane 参数 是否必选 参数类型 描述 laneId 是 Integer 参数说明:车道定义在每一条有向路段上,同一条有向路段上的每个车道,都拥有一个单独的ID。车道号以该车道行驶方向为参考,自左向右从1开始编号。 最小值:1 最大值:255 maneuvers 否 Array of strings 参数说明:车道所允许的行驶方向。 取值范围: straightAllowed:允许直行 leftAllowed:允许左转向 rightAllowed:允许右转向 uTurnAllowed:允许掉头转向 leftTurnOnRedAllowed:红灯情况下允许左转向 rightTurnOnRedAllowed:红灯情况下允许右转向 laneChangeAllowed:允许变道 noStoppingAllowed:不允许停车 yieldAllWaysRequired:非保护车道状态,如永久黄灯状态 goWithHalt:停车,再前行 caution:小心前行 表18 UploadMapSpeedLimit 参数 是否必选 参数类型 描述 type 是 String 参数说明:限速类型。 取值范围: unknown: 未知 maxSpeedInSchoolZone: 学校区域的最大速度 maxSpeedInSchoolZoneWhenChildrenArePresent: 学校区域存在学生时的最大速度 maxSpeedInConstructionZone: 建筑区的最大速度 vehicleMinSpeed: 汽车最小速度 vehicleMaxSpeed: 汽车最大速度 vehicleNightMaxSpeed: 汽车夜间行驶最大速度 truckMinSpeed: 卡车最小速度 truckMaxSpeed: 卡车最大速度 truckMinSpeed: 卡车最小速度 truckNightMaxSpeed: 卡车夜间行驶最大速度 vehiclesWithTrailersMinSpeed: 拖车最小速度 vehiclesWithTrailersMaxSpeed: 拖车最大速度 vehiclesWithTrailersNightMaxSpeed: 拖车夜间行驶最大速度 speed 是 Integer 参数说明:限速大小,单位为0.02m/s。数值8191表示无效数值。 最小值:0 最大值:8191 表19 UploadMapParkingSlot 参数 是否必选 参数类型 描述 polygon 是 Array of UploadMapPosition3D objects 参数说明:停车位区域边界,通过坐标点顺序连接构成的多边形,一般是四边形,最大32个点。 lat 是 Number 参数说明:定义纬度数值,北纬为正,南纬为负,单位为:1°,精确到小数点后7位; 最小值:-90 最大值:90 lon 是 Number 参数说明定义经度数值。东经为正,西经为负,单位为:1°,精确到小数点后7位; 最小值:-180 最大值:180 side 是 Integer 参数说明:停车位与lane的方位关系。左侧:left(0),右侧:right(1),不使用:not used(2) 最小值:0 最大值:2 poiId 是 Integer 参数说明:停车位id。最大为65535。 最小值:0 最大值:65535 表20 UploadMapZone 参数 是否必选 参数类型 描述 type 是 String 参数说明: 区域类型。 取值范围: crosswalk:人行横道 constructionIsolation:施工隔离 guideLine:导流线区域 speedBump:减速带 gridLine:方格线区域 regionalBoundary 是 Array of UploadMapPosition3D objects 参数说明:通过坐标点顺序连接构成的多边形,最大32个点。
  • 参数配置 部分技能在运行的时候,需要用户配置相关的参数。比如一般人脸判断的技能都需要用户上传人脸库,运行技能时就需要配置相关的参数。 单击“添加参数”,按表3填写。 表3 参数配置说明 参数 说明 参数名称 参数名。必填参数。技能或容器镜像里可用该参数获取该参数的值。用户在添加技能作业时需要配置参数名称和参数的值。 类型 参数值的类型,表示该参数项的值是什么类型的数据。支持“string”、“int”、“float”、“object”类型。 必填 参数是否必填。 固定值 参数是否为固定值。 默认值 参数的默认值。如果参数为固定值,参数的默认值必填。 最大值 如果参数类型为“int”和“float”,则需要设置参数的最大值。 最小值 如果参数类型为“int”和“float”,则需要设置参数的最小值。 步长 如果参数类型为“int”和“float”,则需要设置参数的步长。 参数说明 填写参数相关说明,比如参数值的范围说明等。
  • 输出 技能运行时,数据输出位置,当前支持“DIS”、“Webhook”、“本地路径”、“本地屏幕”和“RTSP”。 DIS 输出数据到 数据接入服务 (Data Ingestion Service,简称DIS),需要提前在DIS控制台创建通道,详情请见数据接入服务 DIS 用户指南。 单击“选择DIS通道”,在对话框中选择通道,然后单击“确定”。 Webhook 输出数据到Webhook。按表2填写信息。 表2 Webhook输出 参数 说明 URL 输出数据的URL地址,仅支持http或https协议。 不能为空,请输入长度不超过255个字符,且合法的云侧算法地址。 请求头 输入“属性名”和“属性值”。其中“属性名”输入不能为空,请输入长度为1-63的字符,大小写字母或中划线开头,由数字、大小写字母、点号(.)、中划线(-)下划线(_)组成。 单击“添加消息头”,可添加多个请求头。 单击,可删除请求头。 本地路径 输出数据到本地路径。填入本地路径,如:C:/filename/video。 本地屏幕 显示在本地屏幕上的标题。如果有多个输出同时到同一个本地屏幕,可按标题区分。填入本地屏幕。 RTSP “windows”类型和“RK”类型的设备支持RTSP输出。填入RTSP地址。
  • 查看作业实例 在部署列表,可查看已有作业的实例详情,可选择启动或停止实例。 在专业版管理控制台左侧菜单栏选择“设备管理”。 进入“设备列表”页面。 单击设备名称,进入设备详情页。 默认进入“部署列表”页签。 选择部署,单击部署名称左侧的。 下方会出现当前部署工程的作业信息。 单击实例数列的“实例详情”下拉框。 弹出“实例详情”对话框,可查看“作业名称”、“作业ID”、“实例详情”。 操作列可根据实际业务选择“启动”或“停止”实例。
  • 输入 技能运行时,数据输入来源,输入当前支持“摄像头”、“URL”、“Edge Restful”、“VCN”和本地路径输入。 摄像头 勾选已添加在专业版管理控制台的摄像头。需要提前在管理控制台手动添加摄像头,详情请见添加摄像头。 设置“资源限制”和“每实例数路数限制”。 “资源限制” 设置视频流计算所需的计算资源,包括“起始资源”和“每增加1路所需资源”。 “起始资源”:指作业中接入第1路摄像头的视频流时,计算所需的基础资源。 “每增加1路所需资源”:指作业中每增加1路摄像头时所需的计算资源。 在设置资源限制项时,申请资源量指预留的最小计算资源,限制资源量指预留的最大计算资源。当接入路数计算所需资源超过所有实例的剩余资源时,该路视频流可能无法计算。 “每实例数路数限制” 每个实例下可接入摄像头总数的最大值。 图1 资源限制 URL 从URL输入数据。请输入长度不超过255,且合法的云侧算法地址,例如“https://test1.test2.test3”。 可单击“添加URL”,添加多个URL。 可单击“删除”,删除URL。 图2 URL 输入 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图3 计算资源 Edge Restful 从Edge Restful输入数据。按表1填写参数信息。 单击“添加配置”,可添加多个Edge Restful。 表1 Edge Restful输入 参数 说明 URL 视频流服务器提供用于获取rtsp地址的rest接口,仅支持http或https协议。 rtsp地址相对位置 在视频流服务器提供的响应体重,rtsp地址的相对位置。例如:"data/url"表示rtsp地址在"{data:{url:'rtsp://url'}}"中的相对位置。 请求头 输入“属性名”和“属性值”。请输入长度为1-63的字符,大小写字母或中划线开头,由数字、大小写字母、点号(.)、中划线(-)下划线(_)组成。 单击“添加消息头”,可添加多个请求头。 单击,可删除请求头。 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图4 计算资源 VCN 从VCN输入数据。填写IP地址、端口号、用户名、密码。 单击“添加”,输入摄像头ID,选择码流类型。 设置“资源限制”和“每实例数路数限制”。 “资源限制” 设置视频流计算所需的计算资源,包括“起始资源”和“每增加1路所需资源”。 “起始资源”:指作业中接入第1路摄像头的视频流时,计算所需的基础资源。 “每增加1路所需资源”:指作业中每增加1路摄像头时所需的计算资源。 在设置资源限制项时,申请资源量指预留的最小计算资源,限制资源量指预留的最大计算资源。当接入路数计算所需资源超过所有实例的剩余资源时,该路视频流可能无法计算。 “每实例数路数限制” 每个实例下可接入摄像头总数的最大值。 图5 资源限制 本地路径 从本地路径输入数据。填入本地路径,如:C:/filename/video。 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图6 计算资源
  • 参数配置 部分技能在运行的时候,需要用户配置相关的参数。比如一般人脸判断的技能都需要用户上传人脸库,运行技能时就需要配置相关的参数。 单击“添加参数”,按表3填写。 表3 参数配置说明 参数 说明 参数名称 参数名。必填参数。技能或容器镜像里可用该参数获取该参数的值。用户在添加技能作业时需要配置参数名称和参数的值。 类型 参数值的类型,表示该参数项的值是什么类型的数据。支持“string”、“int”、“float”、“object”类型。 必填 参数是否必填。 固定值 参数是否为固定值。 默认值 参数的默认值。如果参数为固定值,参数的默认值必填。 最大值 如果参数类型为“int”和“float”,则需要设置参数的最大值。 最小值 如果参数类型为“int”和“float”,则需要设置参数的最小值。 步长 如果参数类型为“int”和“float”,则需要设置参数的步长。 参数说明 填写参数相关说明,比如参数值的范围说明等。
  • 查看作业实例 在部署列表,可查看已有作业的实例详情,可选择启动或停止实例。 在专业版管理控制台左侧菜单栏选择“设备管理”。 进入“设备列表”页面。 单击设备名称,进入设备详情页。 默认进入“部署列表”页签。 选择部署,单击部署名称左侧的。 下方会出现当前部署工程的作业信息。 单击实例数列的“实例详情”下拉框。 弹出“实例详情”对话框,可查看“作业名称”、“作业ID”、“实例详情”。 操作列可根据实际业务选择“启动”或“停止”实例。
  • 输入 技能运行时,数据输入来源,输入当前支持“摄像头”、“URL”、“Edge Restful”、“VCN”和本地路径输入。 摄像头 勾选已添加在专业版管理控制台的摄像头。需要提前在管理控制台手动添加摄像头,详情请见添加摄像头。 设置“资源限制”和“每实例数路数限制”。 “资源限制” 设置视频流计算所需的计算资源,包括“起始资源”和“每增加1路所需资源”。 “起始资源”:指作业中接入第1路摄像头的视频流时,计算所需的基础资源。 “每增加1路所需资源”:指作业中每增加1路摄像头时所需的计算资源。 在设置资源限制项时,申请资源量指预留的最小计算资源,限制资源量指预留的最大计算资源。当接入路数计算所需资源超过所有实例的剩余资源时,该路视频流可能无法计算。 “每实例数路数限制” 每个实例下可接入摄像头总数的最大值。 图1 资源限制 URL 从URL输入数据。请输入长度不超过255,且合法的云侧算法地址,例如“https://test1.test2.test3”。 可单击“添加URL”,添加多个URL。 可单击“删除”,删除URL。 图2 URL 输入 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图3 计算资源 Edge Restful 从Edge Restful输入数据。按表1填写参数信息。 单击“添加配置”,可添加多个Edge Restful。 表1 Edge Restful输入 参数 说明 URL 视频流服务器提供用于获取rtsp地址的rest接口,仅支持http或https协议。 rtsp地址相对位置 在视频流服务器提供的响应体重,rtsp地址的相对位置。例如:"data/url"表示rtsp地址在"{data:{url:'rtsp://url'}}"中的相对位置。 请求头 输入“属性名”和“属性值”。请输入长度为1-63的字符,大小写字母或中划线开头,由数字、大小写字母、点号(.)、中划线(-)下划线(_)组成。 单击“添加消息头”,可添加多个请求头。 单击,可删除请求头。 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图4 计算资源 VCN 从VCN输入数据。填写IP地址、端口号、用户名、密码。 单击“添加”,输入摄像头ID,选择码流类型。 设置“资源限制”和“每实例数路数限制”。 “资源限制” 设置视频流计算所需的计算资源,包括“起始资源”和“每增加1路所需资源”。 “起始资源”:指作业中接入第1路摄像头的视频流时,计算所需的基础资源。 “每增加1路所需资源”:指作业中每增加1路摄像头时所需的计算资源。 在设置资源限制项时,申请资源量指预留的最小计算资源,限制资源量指预留的最大计算资源。当接入路数计算所需资源超过所有实例的剩余资源时,该路视频流可能无法计算。 “每实例数路数限制” 每个实例下可接入摄像头总数的最大值。 图5 资源限制 本地路径 从本地路径输入数据。填入本地路径,如:C:/filename/video。 设置“计算资源”: 分配给每个实例的计算资源,包括“CPU核数”、“内存大小”以及是否打开“开启AI加速卡”开关。 “申请”资源量指预留给每个实例的最小计算资源。“限制”资源量指每个实例可使用的最大计算资源。当技能运行所需资源大于所有实例的限制资源时,技能可能无法运行。 如果打开“开启AI加速卡”开关,选择AI加速器配额。 图6 计算资源
  • 输出 技能运行时,数据输出位置,当前支持“DIS”、“Webhook”、“本地路径”、“本地屏幕”和“RTSP”。 DIS 输出数据到数据接入服务(Data Ingestion Service,简称DIS),需要提前在DIS控制台创建通道,详情请见数据接入服务 DIS 用户指南。 单击“选择DIS通道”,在对话框中选择通道,然后单击“确定”。 Webhook 输出数据到Webhook。按表2填写信息。 表2 Webhook输出 参数 说明 URL 输出数据的URL地址,仅支持http或https协议。 不能为空,请输入长度不超过255个字符,且合法的云侧算法地址。 请求头 输入“属性名”和“属性值”。其中“属性名”输入不能为空,请输入长度为1-63的字符,大小写字母或中划线开头,由数字、大小写字母、点号(.)、中划线(-)下划线(_)组成。 单击“添加消息头”,可添加多个请求头。 单击,可删除请求头。 本地路径 输出数据到本地路径。填入本地路径,如:C:/filename/video。 本地屏幕 显示在本地屏幕上的标题。如果有多个输出同时到同一个本地屏幕,可按标题区分。填入本地屏幕。 RTSP “windows”类型和“RK”类型的设备支持RTSP输出。填入RTSP地址。
  • 注册设备 在专业版管理控制台左侧菜单栏选择“设备管理”。 进入“设备列表”页面。 单击“注册设备”。 进入“注册设备”页面。 填写注册信息,单击右下角的“确认”。 基本信息 图1 基本信息 表1 注册设备基础信息 参数 说明 设备名称 设备注册时使用的名称,批量注册时使用该名称作为前缀。仅允许中文字符、英文字母、数字、下划线、中划线且长度不超过64。 描述 设备描述。不允许输入*~#等特殊字符且长度为0-255。 标签 设备标签。 单击“创建标签”,添加标签,在输入框中依次填写标签键和标签值。 只允许大小写字母、数字、下划线和中划线,不允许为空。标签键不允许重复,最大长度为36个字符,标签值最大长度为43个字符。 最多可添加20组标签。 单击,删除标签。 部署方式 当前仅支持注册“HiLens”类型设备。 设备类型 选择待注册的设备类型,包括“Atlas 500”、“Atlas 800”、“通用ARM设备”、“通用x86设备” 等设备类型。 本样例选择“Windows”。 高级设置 图2 高级设置 参数 说明 开启AI加速卡 AI加速卡开关。 批量注册 批量注册开关。如果开启,选择注册设备的数量。 输入值范围必须在1~100000。 IAM用户名 由帐号在IAM中创建的用户,如果没有IAM账户时,填写华为云帐号名。相关概念请参见IAM基本概念。 工作空间 选择设备注册的工作空间。默认帐号的默认工作空间,可自定义选择。 事件有效时间 如果您在设备离线时进行操作,则操作将保留在待执行的事件列表中,待设备上线后执行。 日志设置 配置日志的“日志存储时间”、“日志等级”,设置“LTS日志上传”开关。 图3 应用日志 表2 注册设备日志设置 参数 说明 日志存储时间 日志存储时长,单位为天。输入值范围必须在1~30。 日志等级 选择日志等级,可选“Error(错误)”、“Warning(警告)”、“Info(信息)”、“Debug(调试)”。 本地日志设置 大小限制 对该注册设备的日志大小限制,默认为50MB,不可自定义。 日志滚动数量 每隔 {0} 天,对本地日志根据数量对日志进行一次日志滚动,删除最旧的日志文件。每个日志文件固定10M。 LTS 云日志 设置 日志上传 日志上传开关。系统日志与应用日志默认在本地存储,如果要上传至云日志服务(LTS),可开启“日志上传”开关。 开关开启后,选择日志等级,仅对应等级的日志上传至LTS。
  • 4. 确认信息进入HiLens Studio 确认信息无误后,单击“确定”,进入启动HiLens Studio的界面。 必要信息填写完成后,您可以在界面右侧查看其配置参数值,如果某个字段填写错误,在右侧会显示一个小红叉。 图3 确认信息 确认信息后请务必进入HiLens Studio界面查看所创建的技能项目,否则会创建空项目,造成后续无法在HiLens Studio界面打开技能项目文件。 如果打不开HiLens Studio界面,请检查浏览器是否设置阻止弹出式窗口。如果浏览器设置了阻止弹出式窗口,请添加HiLens Studio网址为允许浏览器弹窗的白名单地址。
  • 前提条件 保证华为云账号处于不欠费状态。在华为HiLens控制台开发技能时,会占用OBS资源,需要收取一定费用,收费规则请参见 对象存储服务 OBS。 已订购HiLens Studio版本。 新建技能使用的算法模型已开发完成并导入HiLens中。 当前技能市场购买的技能暂不支持在HiLens Studio中打开,您可以选择在HiLens Studio中选择技能模板新建技能项目,详情请见新建技能项目。
  • 3. 运行时配置(可选) 图2 运行时配置-26 部分技能在运行的时候需要用户配置参数,比如人脸判断类的技能需要用户上传人脸库等。运行时配置就像是一个“钩子”,开发者把“钩子”放出去,用户运行技能的时候设置了这些配置项,HiLens就会帮开发者把“钩子”收回来,这时候在代码里面开发者就可以使用这些用户的设置。您可以在界面中单击添加配置标签,参考表2填写您的配置。 您还可以单击“预览JSON格式”查看“钩子”的格式。开发者通过HiLens Framework提供的get_skill_config接口获取技能配置的JSON格式,读取里面字段的值来使用用户的配置。 运行时配置JSON格式如下所示: { //全局配置 "Language": "enum", //视频分路配置 "multi_camera": [ //该字段key值multi_camera固定,值表示摄像头分路配置 { "camera_names": [ //该字段key值camera_names固定,值表示该分组配置里包含了哪些摄像头 "cameraX", "cameraY" ], "FaceLib": { //配置名 "from": "file source", //文件类型值,表示文件来自哪个服务。比如OBS "path": "file path" //文件类型值,表示文件的路径 } } ], } 表2 运行时配置的参数说明 字段名称 说明 配置名 配置的名称,逻辑代码里面可用该字段获取该配置的值。运行时配置指技能在运行的时候,由用户配置的内容。比如人脸判断技能需要用户上传人脸库等。需要说明的是,整个运行时配置是可选的,但如果添加了一条配置,那么“配置名”、“配置说明”是必填项。 值类型 表示该配置项的值是什么类型的数据。 数值类型(int、float)、枚举类型、字符串和文件类型。 值约束 表示该配置可以设置的范围。跟值类型有关。 数值类型:用开闭区间的表示方法。如[1,100)表示大于等于1小于100。 字符串和文件:该项无需输入。 枚举:集合的表示方式,如{a,b}。 配置说明 说明该配置的作用,以及配置方法。该字段非常重要,用户会根据该字段的说明来配置,所以如果有运行时配置,开发者一定要在这里解释清楚。 配置对象 HiLens Kit可以连接多个(个数不大于设备上所安装技能的支持通道数之和)摄像头,所以可以开发支持多路视频的技能。 选择“视频”,则表示该配置是可以针对设备上每个摄像头视频进行配置的,比如摄像头1和摄像头2采用不同的人脸库。 选择“全局”,则表示设备上所有摄像头都用同一个配置值。
  • 检测算法中的难例图片判断 对检测结果进行判断。 接口调用 hard_sample_detection_filter(inputs) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 inputs 是 list 检测框,例如[bbox1, bbox2, bbox3,....],,其中bbox = [xmin, ymin, xmax, ymax, score, label],,其中xmin,、ymin、xmax、 ymax、 score为float类型,score取值范围为[0,1],label为int类型。 返回值 返回Bool值,True或False,True表示是难例,False表示不是难例。 父主题: 难例上传模块
  • 获取难例配置 读取难例配置文件,难例配置文件路径为相应技能“data”目录,如“/home/hilens/skills/***skill_path/data/hardsample_config.json”。 接口调用 hilens.get_hard_sample_config() 返回值 json格式的难例配置。样例如下。 { "hard_sample_setting" : [ { "camera_names" :["123"], "data_count" : 100, "datacur_count" : 100, "dataset_name" : "dataset-a3ae", "dataset_path" : "https://a.b.csss.obs.cn-north-7.ulanqab.huawei.com/nali/", "model_algorithm" : "image_classification", "model_id" : "073c4c8674164307ae300b713a4a050c", "model_name" : "model-framework5", "setting_config" : { "thr" : 0.5 } } ] } 表1 参数说明 参数名 描述 camera_names 摄像头名称。可在上传的时候区分不同摄像头的数据。 data_count 总上传图片数。 datacur_count 已经上传的图片数。 dataset_name 要上传到的数据集名称。 dataset_path 要上传的路径,对应的是数据集的url。 model_algorithm 模型的算法类别,一般为分类或检测。 model_id 模型ID。 model_name 模型名称。可在上传的时候区分不同模型的数据。 setting_config 其他设置。可以自定义一些配置,比如下面的阈值。 thr 阈值,可以通过难例上传配置页面下发阈值实现不同场景使用不同的阈值。 父主题: 难例上传模块
  • HiLens Framework_Python简介 HiLens Framework通过封装底层接口、实现常用的管理功能,让开发者可以在华为HiLens管理控制台上方便地开发技能,培育AI生态。 HiLens Framework的分层结构如图1所示,HiLens Framework封装了底层的多 媒体处理 库(摄像头/麦克风驱动模块Media_mini),以及D芯片相关的图像处理库(DVPP)和模型管理库(ModelManager),另外开发者也可以使用熟悉的视觉处理库OpenCV。在此之上,HiLens Framework提供了以下6个模块供开发者使用,方便开发诸如人形检测、疲劳驾驶检测等技能,模块说明如表1所示。用户可以开发Python版本的技能并在HiLens Kit上运行。 图1 HiLens Framework框架 表1 模块说明 序号 模块 功能 1 Input Manager 输入模块:负责视频、音频等输入数据的接入管理。 2 Media Processor 预处理模块:负责视频、音频等媒体数据的处理。 3 Model Manager 模型管理模块:负责模型的初始化与推断任务。 4 Output Manager 输出模块:负责流、文件、 消息通知 等输出任务的管理。 5 Resource Manager 资源管理模块:负责文件、图片、模型等资源的路径管理。 6 Logging System 日志模块:负责日志系统管理。
  • 初始化HiLens Framework 该接口用于初始化HiLens Framework。在调用HiLens Framework的其他接口之前,需要先做全局初始化。 接口调用 hilens.init(verify) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 verify 是 字符串 长度0到128的字符串。 应与华为HiLens管理控制台上新建技能时,所填写的“基本信息”中的“检验值”一致。如果不一致,HiLens Framework会强制技能停止。 图1 新建技能 返回值 0为HiLens Framework初始化成功,其他为失败。 该方法还可以用来验证技能是否损坏或被篡改。如果想要使用该功能,参数verify应该是开发者编写的一个函数的返回值,该返回值是实时计算要验证的文件的hash值。开发者在完成技能的开发后,用同样的hash方法计算出hash值,填入控制台新建技能的校验值。如下所示: #! /usr/bin/python3.7 import hilens def verify(): # 开发者需要实现一个方法,来验证程序身份(以防被损坏、篡改) # 例如可以计算技能包中重要文件的Hash值,verify应当返回一个字符串(1~128字节)。 # 在HiLens平台,技能开发中填入此Hash值。调用init方法后,技能会自动将此Hash值发送到平台上进行比对,并验证技能的使用许可。 # 调试期间,开发者可以考虑使用一个固定的字符串来进行校验,以便于修改代码。 # 因为Python脚本源码下发到设备上较容易篡改,对于商用技能,建议开发者使用C++进行开发。 # 注意:正式发布的技能不应使用硬编码的字符串来校验! return "hello" def main(): # 初始化HiLens rc = hilens.init(verify()) # 如果在技能开发调试阶段不想用此功能,那么直接填写一个静态字符串即可 # 如: hilens.init("hello") if rc != 0: hilens.error("Failed to initialize HiLens") return # 业务代码 pass # 完成后,清理资源 hilens.terminate() if __name__ == '__main__': main() 父主题: 初始化
  • 示例-EIServices模块 EIServices模块输出示例代码如下: import hilens import cv2 import numpy as np import base64 import json def run(): # 使用图片作为输入 f=open('/tmp/dengchao.jpg','rb') base_f=base64.b64encode(f.read()) f_string=base_f.decode('utf-8') # 使用Mat格式或者直接从摄像头输入 #img = cv2.imread("/tmp/dengchao.jpg") cap = hilens.VideoCapture() frame = cap.read() img = cv2.cvtColor(frame, cv2.COLOR_YUV2BGR_NV21) img_str = cv2.imencode('.jpg', img)[1].tostring() # 将图片编码成流数据,放到内存缓存中,然后转化成string格式 b64_code = base64.b64encode(img_str) # 编码成base64 f_string1=b64_code.decode('utf-8') headers = hilens.EIHeaders() body = {"image_base64": f_string} json_str = json.dumps(body) response5 = hilens.EIServices.Request(hilens.POST, "hilens-api.cn-north-4.myhuaweicloud.com", "/v1/human-detect", "", json_str, headers) print(response5.requestState) print(response5.responseBody) body1 = {"face_set_name": "ei_test"} json_str1 = json.dumps(body1) response6 = hilens.EIServices.Request(hilens.POST, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets", "", json_str1, headers) print(response6.requestState) print(response6.responseBody) response7 = hilens.EIServices.AddFace("ei_test", f_string, "") print(response7.requestState) print(response7.responseBody) response8 = hilens.EIServices.SearchFace("ei_test", f_string, 1, 0.93, "") print(response8.requestState) print(response8.responseBody) response9 = hilens.EIServices.Request(hilens.POST, "face.cn-north-4.myhuaweicloud","/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test/search", "", json_str, headers) print(response9.requestState) print(response9.responseBody) response10 = hilens.EIServices.Request(hilens.DELETE, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test", "", "", headers) print(response10.requestState) print(response10.responseBody) response11 = hilens.EIServices.Request(hilens.GET, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test", "", "", headers) print(response11.requestState) print(response11.responseBody) if __name__ == '__main__': hilens.init("hello") run() hilens.terminate() 父主题: EIServices模块
  • 音频采集器 该接口用于构造一个音频采集器,从本地麦克风获取音频或者本地音频文件获取音频数据。 接口调用 1.0.8及以上固件版本 hilens.AudioCapture(file_path) 1.1.2及以上固件版本 hilens.AudioCapture(sample_rate, bit_width, nSamples, sound_mode) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 file_path 否 字符串 音频文件路径,从该文件获取音频数据,构造一个音频文件数据的采集器。 sample_rate 否 整型 采样率,本地麦克风录音参数。默认值为“AUDIO_SAMPLE_RATE_44100”,可取值: AUDIO_SAMPLE_RATE_8000 AUDIO_SAMPLE_RATE_12000 AUDIO_SAMPLE_RATE_11025 AUDIO_SAMPLE_RATE_16000 AUDIO_SAMPLE_RATE_22050 AUDIO_SAMPLE_RATE_24000 AUDIO_SAMPLE_RATE_32000 AUDIO_SAMPLE_RATE_44100 AUDIO_SAMPLE_RATE_48000 AUDIO_SAMPLE_RATE_64000 AUDIO_SAMPLE_RATE_96000 bit_width 否 整型 位宽,本地麦克风录音参数。默认值为“AUDIO_BIT_W IDT H_16”。 nSamples 否 整型 每帧音频采样点数,本地麦克风录音参数。默认值为1024,取值范围[80,2048]。 sound_mode 否 整型 声道模式,本地麦克风录音参数。默认值为“AUDIO_SOUND_MODE_MONO”,可取值: AUDIO_SOUND_MODE_MONO AUDIO_SOUND_MODE_STEREO 本地麦克风只有一个,不支持多个进程设置不同的录音参数,先设置的生效。 麦克风录音接口和播放音频文件的接口不能同时使用。 返回值 音频数据采集器。 如果创建失败则抛出一个CreateError。开发者可以在查看技能日志输出。 父主题: 音频输入模块
  • 分类算法中的难例图片判断 对分类结果进行判断。 接口调用 hard_sample_classification_filter(inputs,input_size) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 inputs 是 list 类别得分,例如[class1-score, class2-score, class2-score,....],class-score取值范围为[0,1]。 input_size 是 int 类别数。 返回值 返回Bool值,True或False,True表示是难例,False表示不是难例。 父主题: 难例上传模块
共100000条