-
【大赛背景】代码上太空大赛聚焦在云原生、AI、边缘计算、卫星系统联合的全场景创新,面向广大开发者征集能适用于卫星的创新应用,入选作品将通过华为云和北京邮电大学联合设计完成的“云原生卫星计算平台” 部署到多颗卫星中,实现“星海畅游”。活动旨在促进广大开发者充分运用华为云云原生、AI等工具和能力,创造性开发,加速卫星计算智能化进程。产学研携手共同构筑智能化的云原生卫星应用解决方案,帮助卫星更好地服务于应急通讯、生态监测、防灾减灾、城市建设。【参赛对象】具备应用软件开发能力的组织、企业或个人、学生等;*企业用户需完成企业认证,点击此处完成认证。【报名须知】1. 报名方式:登录大赛官网,点击页面上方“立即报名”按钮进行报名。2. 参赛组队:大赛以单人或2-5人组队参赛,且每位参赛者只能加入一支队伍。参赛选手在报名成功之后在“我的团队”中选择创建团队或加入已有团队,创建团队的人即为队长,队长拥有添加团队成员、审批队员加入等权限。3. 同一作品不可在多赛道获奖,但同一队伍的不同作品可参与多个赛道。6月15日大赛报名通道正式开启你准备好了吗?点击此链接立即报名哦~
-
2022年(第二届)信息技术服务业应用技能大赛决赛提交作品模板
-
2022最受关注的技术热词,你都知道吗?前沿的科学技术,为我们创造了无数浪漫。站在智能世界的入口让我们一起来关注一下近年来火爆的技术热点动动你们的鼠标,赶快参与投票,用你们的专业选出你最喜爱的技术热词吧点击链接 前往投票TOP6技术热词——业务能力积木在近期Gartner发布的——企业机构在2022年需要探索的重要战略技术趋势中,“Composable Applications组装式应用”占得一席。何以如此?这背后,业界对可组合性的追求不容忽视。什么是组装式应用?“组装式应用由以业务为中心的模块化组件构成,具备更易使用和可重复使用的代码,可加速新软件解决方案的上市时间,并释放企业价值。”具体如何实现组装式应用呢?Gartner提出了“封装业务能力”(Packaged Business Capability,简称PBC)这个概念作为组装式应用的核心。与微服务架构不同的是,前者交付的依然是封装应用,而基于PBC的组装式应用交付的是一个数字化的平台。在这个平台中,PBC更像一个个原子,而组装式应用是把这些原子重新组合起来的一个个分子。理想状况下,业务部门可以从云端或是企业的应用商店里去下载所需要的PBC。PBC可以是一个对象的数字孪生或者是某一个小功能,这个对象或者功能被模块化之后,业务用户就可以根据自己的需要把PBC下载下来,在合适的组合平台上将PBC组装到应用程序中,如用低代码的方式构建出定制化的应用。有利于更安全、更高效和更快的变革在不断变化的业务环境中,业务适应性需求将引导企业转向使用支持快速、安全和高效应用变化的技术架构。组装式应用增强了这种适应性,而采用可组合方法的企业机构在新功能的实现速度上将比竞争对手快80%。在充满不确定性的时代,可组合的业务原则帮助企业机构驾驭对业务韧性和增长至关重要的加速变化。组装式应用引入模块化的理念,使得技术和业务团队可以更敏捷、更有效地重用密码。企业如何去提高商业的韧性和效率,本质是一个如何创新地利用技术来加速数字化的问题。对于组装式应用的重要性,Gartner是这样说的:“没有它的现代企业机构可能会失去在市场中的前进动力和客户忠诚度。”实践出真知,提升敏捷性、减少重复劳动从各个行业来看,组装式应用已被许多组织所应用和推广。例如金融行业,**Ally Bank已经创建了具备可重复功能的PBC,如欺诈警报功能,其融合团队可以在低代码环境中进行组装,节省了超过200,000小时的人工工作。在运动用品制造行业,阿迪达斯使用可组合应用程序,缓解融合团队囿于低价值重复工作的泥淖,从而使解决方案数量增加了近十倍,同时缩短了数周的交付时间。可组合性,已是近些年的关注重点从Gartner发布的《2021年企业低代码平台魔力象限》中已可看出,可组合性已为各行业所认可:采用应用程序组合技术,以加快程序的融合效率。低代码应用平台LCAP是推动应用服务、功能和能力的可组合性关键技术之一。此外,Gartner还在2022年十二大战略趋势的报告中提及,到 2024 年,新 SaaS 和自定义应用程序的设计准则将是“可组合的API优先或仅API”。通过快速、应用程序编程接口 API驱动的集成,为组织提供敏捷性,也使各种应用程序之间能够实现无缝通信。各组织均应重视可组合性与敏捷性的建设具备可组合性的应用程序,将为各个组织的办公模式带来更大创新、提供更多的敏捷和便捷,各部门之间的协作配合也达到更高水平:开发团队可以将精力集中在速度和创新上,而运营团队可以更多地把时间用于进行后端更新、合规性发布和测试。以上均可在不影响前端或后端操作的情况下完成,因此开发、运营、营销、电子商务、数据、财务和其他领域,都可以保持一致并成为一个敏捷平台、协同工作,不再存在孤岛,产品也可以快速有效地推向市场。重视普及组装式应用的同时,商机同在对于做to B 业务的厂商来说,也不妨围绕顺势在云计算时代形成基于API的“被集成能力”。在《**战略》这本书中提到一个非常重要的观点——“API即服务”,在万物皆可云的时代,如果客户愿意将自己的应用构建在SaaS上,只要组织将自己的API集成到第三方伙伴的业务中,最终客户每订阅一份服务,API就有机会获取一份相应的客户收入分成。这也就形成了“订阅”的商业模式。因此,在充分关注和重视组装式应用成为战略趋势、借此达到新功能的实现速度上比竞争对手快80%的同时,各组织还可留意组装式应用的业务潜在商机,为新年业务更添浓墨重彩的一笔。*本文转自百家号-补丁铺子,原文链接:https://baijiahao.baidu.com/s?id=1722987557049446359&wfr=spider&for=pc,如有侵权立即删除。点击链接 前往投票
-
第二届“智联重庆·渝见未来”华为开发者暨智能网联大赛报名表单,可见附件。
-
各位2022华为开发者大赛 · 崇本英才·智汇吴江· 无人车挑战赛选手们: 比赛将于今日(8月5日)18:00 截止报名和提交作品;请排行榜前20的选手于本周日(8月7日)18:00 前把标注的数据+训练代码+方案文档(简单写一下思路)+推理代码+模型等内容,打包成一个zip包,发送至1441405602@qq.com;组委会将在下周一(8月8日)启动代码评审;本次比赛评审结果将在8月15日前在官网公布。 注:如有抄袭等其他**行为,组委会将取消本次比赛成绩及选手参赛资格,比赛名次顺延。 华为开发者大赛组委会2022年8月5日
-
本期小编为各位整理一了一份最新的华为大赛的集合(部分),含有丰厚的奖金报酬哦,希望有实力的小伙伴,努力冲刺下!祝大家都能拿到好名次!1.2022年(第二届)信息技术服务业应用技能大赛参赛对象:竞赛面向全社会开放,各企业、高等院校、科研单位等人员均可报名参赛。 说明:如有任何可能接触到赛题的人员、大赛主办方和技术支持单位(如华为云计算技术有限公司员工)参赛,则自动放弃获奖资格。活动时间 选拔赛报名截止时间:2022/08/05活动地址:https://competition.huaweicloud.com/information/1000041755/introduction 2022华为天线创新杯竞赛参赛对象:全球范围内所有在校本科生、研究生(博士后也可参加)活动时间:初赛截止时间:2022/10/18活动链接:https://competition.huaweicloud.com/information/1000041739/introduction 新一代信息技术应用创新大赛参赛对象:大赛面向全国开放,国内各高等院校、科研院所、企业等的团队及个人开发者,均可报名参赛。说明:如有任何可能接触到赛题的人员、大赛主办方和技术支持单位(如华为云计算技术有限公司员工)参赛,则自动放弃获奖资格。活动时间报名组队截止时间:2022/08/05活动链接:https://competition.huaweicloud.com/information/1000041740/introduction 苏州园区“华为云杯”2022人工智能创新应用大赛(创客)参赛对象:创客赛道:面向全社会开放,个人、高等院校、科研单位、创业团队等人员均可报名参赛。初赛截止时间:初赛截止时间:2022/08/30活动链接:https://competition.huaweicloud.com/information/1000041737/introduction 第二届中国(重庆)国际物联网创新大赛大赛截止时间:初赛截止时间:2022/09/16活动链接:https://competition.huaweicloud.com/information/1000041747/introduction 2022华为大学生无线基站“算法与建模”创新大赛赛事截止时间:2022/08/07活动链接:https://competition.huaweicloud.com/information/1000041742/introduction 2022华为开发者大赛 · 崇本英才·智汇吴江· 无人车挑战赛初赛截止时间:2022/08/05活动链接:https://competition.huaweicloud.com/information/1000041707/introduction 2022华为开发者大赛 · 代码上太空初赛截止时间:2022/09/23活动链接:https://competition.huaweicloud.com/information/1000041709/introduction 更多大赛详情,请点击链接查看:https://competition.huaweicloud.com/competitions
-
正在直播!2022华为开发者大赛·中国区·东部赛区开幕式开始了!如果你是一名心怀梦想、热爱创新敢于复杂难题中坚守真理、真实场景处着手实干、勇于攀登技术高峰的开发者欢迎围观直播!中国区东部赛区等你来挑战!↓↓↓点击观看视频直播
-
正在直播!如果你是一名心怀梦想、热爱创新敢于复杂难题中坚守真理、真实场景处着手实干、勇于攀登技术高峰的开发者欢迎围观直播!中国区东部赛区等你来挑战!↓↓↓点击观看视频直播
-
1.赛题及硬件方案分析: 刚得到消息,我们队被推荐为国奖,国一国二还没定,大概率是国二,因为测评时发挥部分的小车二在转弯时因为电池原因急转弯失败,发挥部分就没有成功验收。刚收到消息就更新了一下,本方案的成本可以说是此赛题方案中成本最低的。 通过题目可以很容易的看出来,这道题有最难的两个点:巡线+数字识别。 此题的巡线又不同于以往电赛题目的黑白巡线,此题是巡红白线。这样就会带来一个问题,以往巡黑白线我们最常用的是红外传感器,但是此题中的红线和白色背景两者间的吸光能力差别很小,一般的红外传感器根本难以分辨,这就需要用到较为不常用的灰度传感器或者是颜色传感器。据我所知,开赛前就已经准备好这两种传感器的小组还是较少的,包括我们组就没有准备,只能用摄像头代替,用对应的算法进行巡线。 数字识别用到的硬件就没什么好说的了,肯定用到摄像头,我们组用的是赛前已经准备好的OpenMV,OpenMV上手还是很快的,但是需要有一定的Python基础 。在比赛过程中也有很多大佬认为OpenMV同时进行巡线和数字识别的话,其帧率会很低,我们组当然也遇到了以上问题,具体的解决方法在后面会讲到。 另外,题目中要求检测到200g药品的装载和卸载,一般的话可以用压力传感器,但为了方便我们直接用的红外对管,以检测障碍物的方式判断药品是否装载。2.用到的主要器件清单: STM32F407ZGT6单片机 OpenMV4智能处理摄像头 舵机转向四驱车 锂电池、5V、12V降压模块 L298N电机驱动模块 红外传感器 蓝牙模块HC-05 LED指示灯 以上器件都是一辆小车用到的,如果要做发挥部分的话就需要两辆车了,不过小车2用到的器件基本不变。我们采取的方案是一辆小车用一个摄像头,我看网上有的大佬一辆小车左右两边各有一个摄像头,这样的话写代码就会较为简便,不过一般的OpenMV价格在300到500之间,除非你的经费充足且赛前已经准备好,否则还是老老实实用一个摄像头肝吧.....就像我们组,当时只有一个OpenMV,第二个还是临时找关系借的。3.各部分思路及代码实现 (1).小车舵机、马达驱动 这一部分的代码就不贴上了,都是基本的PWM输出,可以参照正点原子的相关例程,并且两辆小车的代码都一样,只不过舵机让车轮保持直行时的PWM脉宽不同,到时候自己找到并在代码中改数字即可。 (2).蓝牙通信 蓝牙通信的代码说白了就是串口通信,代码如下: #include "stm32f4xx.h"#include "bluetooth.h"/*蓝牙通信:USART3,所用引脚为PC10,PC11*/void bluetooth_U3_Init(){GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //使能GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //使能USART2时钟//串口1对应引脚复用映射GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3); //GPIOA9复用为USART1GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3); //GPIOA10复用为USART1//USART1端口配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //GPIOA9与GPIOA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //上拉GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化PA9,PA10//USART1 初始化设置USART_InitStructure.USART_BaudRate = 9600;//波特率设置USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式USART_Init(USART3, &USART_InitStructure);//初始化串口1USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //开启相关中断//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //串口1中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、USART_Cmd(USART3, ENABLE); //使能串口1}/* 蓝牙使能引脚:PA9 */void bluetooth_IO_Init(){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //??GPIOA??GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //??50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //??????GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //??GPIO_Init(GPIOC, &GPIO_InitStructure); //???PA9,PA10}注意:以上代码中蓝牙使能引脚PA9可以不进行初始化,这样就会一直使能,如果要进行初始化的话需要设置为开漏输出 。 (3).单片机与OpenMV的串口通信 此代码与蓝牙通信代码一样,都是串口通信,只不过我用的是USART5,所用引脚为PC12,PD2 (4).单片机与OpenMV的通信协议 因为OpenMV只能通过串口传输字符(除非使用OpenMV的数据流打包,但是我们传输的一般一次只有一个字符,所以不用数据流打包),比如,你要把 52 这个数传给单片机,OpenMV会自动把 52 这个数转换为两个字符'5'和‘2’传输,所以我们要在单片机和OpenMV之间定义一个统一的通信协议,代码如下(此代码中OpenMV传输的整数的范围在-99到99之间):/* openmv发送过来的字符串转换为数据:帧头为' ',帧尾为'.',转换后只保留整数,中间用小数点判断,函数返回值为0则数据格式出错*/signed char CharCon(signed char c[],signed char x){int i = 0;int j = 0;while(c[i] != '.') {c[i] = c[i] - '0';i++;}j = i;if(c[0] == ('-'-'0')){i = 4;c[0] = 0;}switch(i){case 1:x = c[i-1];break;case 2:x = c[i-1] + 10*c[i-2];break;case 3:x = -(c[i-1] + 10*c[i-2]);break;case 4:x = -(c[j-1] + 10*c[j-2]);break;default:return 0;break;} return x;} OpenMV发送的数据格式:uart.write(" ")uart.write(str(int(deflection_angle)))uart.write(".") (5).单片机main文件中的函数: main函数中需要用到状态机的编程逻辑,在单片机收到OpenMV发送的数据时需要判断接收到的是数据帧,还是命令,比如收到的是'f',则接收到的是笔直向前的命令。// PB10是红外对管的输入引脚#include "stm32f4xx.h"#include "sys.h"#include "delay.h"#include "duoji.h"#include "dianji.h"#include "bluetooth.h"#include "to_openmv.h"#include "hongwai.h"#include "usart.h"#define Center 88 //小车前轮保持居中不偏时单片机输出的PWN脉宽#define Hongwai_IO PBin(10) //装载完药品,hongwai_IO = 0#define Red PAout(14)#define Green PEout(5)#define White PAout(13)//以下定义的是状态机的各种状态,在最终的代码中有些并没有用到#define Start 0 //初始的等待状态#define Turn_left 1#define Turn_right 2#define Turn_no 3#define Stop 4#define Wait 5#define Slower 6#define Faster 7#define Forward 8#define Backward 9#define Back 10#define Change 11#define Stoping 12#define Changezuo 13#define Changeyou 14#define Fuwei 15#define Finish 16#define Nfuwei 17#define Zanwait 18int t = 0;int speed = 200; //马达速度signed char angle = 0; //巡线时舵机转的角度signed char change_angle = 30; //路口停下来识别数字时微调的角度uint16_t bluetooth = 0; //接收到的蓝牙消息uint16_t temp = 0;char state = 0; //状态机中的当前状态char flag = 0; //是否已经识别到要去的病房号signed char rec_flag = 0; //单片机与OpenMV通信中的命令标志位signed char openmv_rec[4] = {0}; //OpenMV发送的数据signed char i = 0;signed char task = 0; //当前执行的是任务几/* 指示灯引脚初始化 */void LED_Init(){ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitTypeDef GPIO_Instruct; GPIO_Instruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_Instruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_Instruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Instruct.GPIO_OType = GPIO_OType_PP; GPIO_Instruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_Instruct); GPIO_Instruct.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOE, &GPIO_Instruct);}void All_Init(){ LED_Init(); hongwai_IO_Init(); dianji_IO_Init(); dianji_PWM_Init(1000 - 1, 84 - 1); duoji_PWM_Init(2000 - 1, 840 - 1); //0 bluetooth_U3_Init(); //bluetooth_IO_Init(); openmv_U5_Init(); // computer_U1_Init(); uart_init(9600); delay_init(168);}void turn_r(int t){ TIM_SetCompare1(TIM3, 88); PFout(5) = 0; PFout(7) = 1; PCout(4) = 1; PCout(5) = 0; TIM_SetCompare1(TIM5, t); TIM_SetCompare1(TIM13, t); delay_ms(3000);}int main(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); All_Init(); while (1) { switch (state) { case Start: turn(0); while (flag == 0); //已经识别到病房号 Green = 0; White = 1; delay_ms(1000); White = 0; while (flag == 1) { if (Hongwai_IO == 0) { delay_ms(1000); if (Hongwai_IO == 0) { state = Forward; break; } } } break; case Forward: turn(angle); zhengzhuan(speed); break; case Turn_right: zhengzhuan(speed); turn_right(); delay_ms(400); break; //假设急转弯1.5S已经转过去,具体参数需要调试 case Turn_left: turn_left(); zhengzhuan(200); delay_ms(400); break; //假设急转弯1.5S已经转过去,具体参数需要调试 case Stop: stop(); delay_ms(20); fanzhuan(speed); delay_ms(300); stop(); turn(0); state = Stoping; break; case Wait: stop(); turn(0); Red = 1; if (Hongwai_IO == 1) { delay_ms(500); if (Hongwai_IO == 1) { USART_SendData(UART5, 's'); Red = 0; state = Back; flag = 0; } } break; case Zanwait: stop(); turn(0); Red = 1; if (Hongwai_IO == 1) { delay_ms(500); if (Hongwai_IO == 1) { USART_SendData(USART3, 'o'); delay_ms(10); USART_SendData(UART5, 's'); Red = 0; state = Back; flag = 0; } } break; case Back: fanzhuan(speed - 50); // turn(-angle); delay_ms(400); state = Backward; USART_SendData(UART5, 's'); break; case Backward: turn(3 - angle); fanzhuan(speed - 50); break; case Change: turn(angle); zhengzhuan(speed); state = Stop; delay_ms(500); break; case Changezuo: fanzhuan(speed); delay_ms(400); stop(); turn(30); zhengzhuan(speed); change_angle = 30; delay_ms(500); state = Stoping; USART_SendData(UART5, 's'); break; case Changeyou: fanzhuan(speed); delay_ms(400); stop(); turn(-30); zhengzhuan(speed); change_angle = -30; delay_ms(500); state = Stoping; USART_SendData(UART5, 's'); break; case Fuwei: turn(change_angle); fanzhuan(speed); delay_ms(500); stop(); turn(0); zhengzhuan(speed); delay_ms(400); stop(); break; case Nfuwei: turn(change_angle); fanzhuan(speed); delay_ms(500); stop(); turn(0); break; case Stoping: stop(); turn(0); break; case Finish: stop(); turn(0); Green = 1; flag = 0; state = Start; break; default: break; } }}/* 蓝牙接收 */void USART3_IRQHandler(){ if (USART_GetITStatus(USART3, USART_IT_RXNE)) { bluetooth = USART_ReceiveData(USART3); } USART_ClearITPendingBit(USART3, USART_IT_RXNE);}/* openmv接收 */void UART5_IRQHandler(){ if (USART_GetITStatus(UART5, USART_IT_RXNE)) { char j = 0; signed char temp = USART_ReceiveData(UART5); if (temp == ' ') { rec_flag = 1; i = 0; } else if (rec_flag == 1) { if (temp == '.') { openmv_rec[i] = '.'; angle = CharCon(openmv_rec, angle); rec_flag = 0; for (j = 0; j < 4; j++) openmv_rec[j] = 0; } else { openmv_rec[i] = temp; i++; } } else //rec_flag == 0,接收的为指令 { switch (temp) { case 's': state = Stop; break; case 'l': state = Turn_left; break; case 'r': state = Turn_right; break; case 'f': state = Forward; break; case 'z': state = Wait; break; case 'b': state = Backward; break; case 'd': state = Finish; break; case 'e': state = Zanwait; break; case 'o': flag = 1; break; case 'c': state = Change; break; case 'x': state = Changezuo; break; case 'y': state = Changeyou; break; case 'w': state = Fuwei; break; case 'n': state = Nfuwei; break; case 't': state = Stoping; break; default: break; } } } USART_ClearITPendingBit(UART5, USART_IT_RXNE);} 一下部分是OpenMV部分的代码,包括巡线和数字识别的算法,以及赛题各任务的判断逻辑 (6).巡线 思路:将摄像头一帧图片的上半部分划分为三个平行的感兴趣区,在三个感兴趣区中分别寻找最大的红色色块,获得三个中心坐标,然后给予其不同的权重后计算平均质心坐标,用此质心坐标计算得到巡线时的偏转角度。 为什么只将一帧图片的上半部分?因为下半部分容易受到小车的阻挡或者阴影干扰 RED_THRESHOLD = [(200,10,10),(255,50,50)]#色块阈值BLACK_THRESHOLD = [(0, 48, -58, 49, -36, -1)]ROIS = [(0, 15, 160, 25, 0.9), (0, 40, 160, 25, 0.6), (0, 65, 160, 30, 0.6)]#--------------------------------------- 判断直线角度 ------------------------------------------------ centroid_sum = 0 dx = 0 for r in ROIS: blobs = img.find_blobs(RED_THRESHOLD, roi=r[0:4], merge=True) # r[0:4] is roi tuple. if blobs: # Find the blob with the most pixels. largest_blob = max(blobs, key=lambda b: b.pixels()) # 返回最大值像素点 #img.draw_rectangle(largest_blob.rect()) # 将此区域的像素数最大的颜色块画矩形和十字形标记出来 #img.draw_cross(largest_blob.cx(),largest_blob.cy()) #print(largest_blob.cx()) centroid_sum += (80-largest_blob.cx())*r[4] # r[4] is the roi weight. weight_sum = weight_sum + r[4] #计算centroid_sum,centroid_sum等于每个区域的最大颜色块的中心点的x坐标值乘本区域的权值 if weight_sum: center_pos = (centroid_sum / weight_sum) weight_sum = 0#--------------------------------------- 什么也识别不到则认为是到达了虚线 --------------------------------#----------------------------------------- 求解直线角度----------------------------------------------- deflection_angle = 0 ns = center_pos/60 # QQVGA 160x120. deflection_angle = -math.atan(ns) deflection_angle = math.degrees(deflection_angle) deflection_angle = 0 - int(deflection_angle) #print(str(deflection_angle))#------------------------------------------ 直行 ---------------------------------------------------- uart.write(" ") uart.write(str(int(deflection_angle))) uart.write(".") (7).识别十字路口 我们需要识别十字路口,然后停车进行数字识别或者进行其他操作。思路:感兴趣区域取左上角和右上角,当两个区域同时检测到红色色块时,就表示识别到了十字路口。ROI = [(10,0,40,50),(110,0,50,50)] blobs1 = img.find_blobs(RED_THRESHOLD, roi=ROI[0],area_threshold=150, merge=True) if blobs1: #img.draw_rectangle(blobs1.arect()) blobs2 = img.find_blobs(RED_THRESHOLD, roi=ROI[1], area_threshold=150,merge=True) if blobs2:#表示已经识别到十字路口 #img.draw_rectangle(blobs2.rect()) print("+") (8).数字识别 一开始我们组用的是特征点检测的方法,写好代码以后发现效果并不好,不仅速度慢而且识别准确率很低,后来就改成了模板匹配的方法,这种方法唯一的缺点就是要想识别准确率高就需要截取较多的模板,不仅有多种大小,还要有多种角度,我们小组最终截取了将近200张模板,如果逐一进行匹配的话速度会非常的慢,但是根据任务要求我们可以灵活匹配,比如基础任务一我们只需要匹配数字一和二的模板,其他任务只有在一开始识别病房号时需要从3到8逐一匹配,但识别到病房号以后,在路口进行数字识别时只需要对病房号的模板进行匹配并判断其在小车的左侧还是右侧,以此来判断应该做转还是右转。核心代码如下:#------------------------------------ 初始时刻识别病房号 ---------------------------------------------- while(wait == 0): if(task == 0): img = sensor.snapshot().lens_corr(strength = 1.6, zoom = 1.0) img=img.to_grayscale() #histogram = img.get_histogram() #Thresholds = histogram.get_threshold() #v = Thresholds.value() img.binary([(0,v)]) for t in templates12: template = image.Image(t) #对每个模板遍历进行模板匹配 r = img.find_template(template, 0.65,step=4, search=SEARCH_EX) if r: #img.draw_rectangle(r, color=255) print(t[10]) #打印模板名字 number=int(t[10]) uart.write("o") wait = 1 break else:#初始时刻任务二三识别病房号 img = sensor.snapshot().lens_corr(strength = 1.6, zoom = 1.0) img=img.to_grayscale() img.binary([(0,v)]) for t in templates3: template = image.Image(t) r = img.find_template(template, 0.65,step=4, search=SEARCH_EX) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 for t in templates4: template = image.Image(t) r = img.find_template(template, 0.55,step=4, search=SEARCH_EX) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 for t in templates5: template = image.Image(t) r = img.find_template(template, 0.60,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 for t in templates6: template = image.Image(t) r = img.find_template(template, 0.61,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 for t in templates7: template = image.Image(t) r = img.find_template(template, 0.65,step=4, search=SEARCH_EX) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 for t in templates8: template = image.Image(t) r = img.find_template(template, 0.65,step=4, search=SEARCH_EX) if r: shuzi=int(t[10]) array1[shuzi-1] =array1[shuzi-1]+1 if (max(array1) > 1): m = array1[0] for index in range(0,8): if array1[index] > m: m = array1[index] number = index + 1 print(str(number)) uart.write("o") wait = 1 num = task if(num >2): num = num - 2 continue else:#没识别出来则重新循环 print("no") continue#--------------------------------------- 十字路口前识别数字-------------------------------------------- while(wait == 2): if((task == 2)and(last != 3)): if(n1<2): for loop in range(0,3): img = sensor.snapshot() img.lens_corr(1.6) img=img.to_grayscale() img.binary([(0,v)]) if number==3: for t in template3: template = image.Image(t) r = img.find_template(template, 0.60,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: #img.draw_rectangle(r,color = 255) print(str(number)) n1=n1+1 if r[0]<60: zuo=zuo+1 else: you=you+1 if number==5: for t in template5: template = image.Image(t) r = img.find_template(template, 0.60,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r: #img.draw_rectangle(r,color = 255) print(str(number)) n1=n1+1 if r[0]<60: zuo=zuo+1 else: you=you+1 原文链接:https://blog.csdn.net/qq_45204725/article/details/121375031
-
2022华为开发者大赛·中国区·东部赛区开幕式即将举行开幕式直播链接:https://bbs.huaweicloud.com/live/HDZ_live/202207251500.html赛事报名链接:https://competition.huaweicloud.com/information/1000041726/introduction
-
2022华为开发者大赛·中国区·东部赛区开幕式即将举行开幕式直播链接:https://bbs.huaweicloud.com/live/HDZ_live/202207251500.html赛事报名链接:https://competition.huaweicloud.com/information/1000041726/introduction
-
自2020年以来,鲲鹏应用创新大赛至今已经连续举办两年,是面向全球开发者的顶级赛事。本次大赛由24个鲲鹏生态创新中心与华为,联合中国软件行业协会、绿色计算产业联盟、中国计算机行业协会、中国计算机学会高专委共同举办,旨在激发行业应用创新、加速产业融合、促进人才培养,吸引全产业开发者共同打造鲲鹏全栈解决方案。鲲鹏应用创新大赛.openGauss赛道是openGauss社区与各区域鲲鹏生态创新中心一起为开发者准备的大赛。大赛包括区域赛和决赛两大阶段。开发者可自行组队参赛,完成赛道任务参与评选,共同角逐区域赛与决赛的前三等奖。
-
正在直播!2022华为开发者大赛·中国区·北部赛区开幕式开始了!众大咖齐聚齐鲁大地,顶级赛事蓄势待发!↓↓↓点击观看视频直播
-
创想无限,2022华为开发者大赛邀你来挑战!作为华为ICT领域的顶级赛事,本次大赛分为云底座和产业两大赛道,包含云应用创新、代码上太空、世界难题、无人车等7大赛事,总奖金额高达500万。从7月开始,华为云将围绕AI、IoT、PaaS、数据库、媒体、容器、数通等领域,陆续举办赛题解读系列直播活动,分享技术干货和实战经验,为参赛团队和选手提供专业技术指导。7月20日,华为开发者大赛——乾坤云服务赛事解读直播重磅来袭。本场直播中,华为云乾坤云领域的两位技术专家将解读赛题相关的关键技术要点,并现场答疑,指导参赛选手快速上手华为开放技术能力。直播主题华为开发者大赛——乾坤云服务赛事解读直播时间2022年7月20日19:00-20:00直播亮点华为乾坤赛道说明赛题说明-安全云服务+云管理网络线上专家答疑互动扫描二维码 立即预约报名
-
以“创想无限”为主题的2022华为开发者大赛已正式启动,作为华为ICT领域的顶级赛事,本次大赛分为云底座和产业两大赛道,包含云应用创新、代码上太空、世界难题、无人车等7大赛事,总奖金额高达500万。从7月开始,华为云将围绕AI、IoT、PaaS、数据库、媒体、容器、数通等领域,陆续举办赛题解读系列直播活动,分享技术干货和实战经验,为参赛团队和选手提供专业技术指导。7月19日,华为开发者大赛云应用创新赛道-数据库赛道赛题解读直播重磅来袭。本场直播中,华为云数据库领域的两位技术专家将解读赛题相关的关键技术要点,并现场答疑,指导参赛选手快速上手华为开放技术能力。届时,直播将从三个方面进行解读:直播主题:华为开发者大赛 赛题解读系列直播--基于GaussDB(for openGauss)、迁移、智能管理构建应用解决方案直播内容:1、大赛攻略之:GaussDB(openGauss)产品特性与开放能力2、大赛攻略之:数据库迁移工具UGO、DRS,智能管理工具的特性与开放能力3、成功案例构建分享、与专家线上趣聊GaussDB解决方案构建之道直播时间:2022年7月19日19:00-21:00报名方式:扫描二维码 立即预约报名
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签