基于AI视觉的汽车驾驶员安全驾驶监测反馈系统设计_第1页
基于AI视觉的汽车驾驶员安全驾驶监测反馈系统设计_第2页
基于AI视觉的汽车驾驶员安全驾驶监测反馈系统设计_第3页
基于AI视觉的汽车驾驶员安全驾驶监测反馈系统设计_第4页
基于AI视觉的汽车驾驶员安全驾驶监测反馈系统设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

.5传感器软件设计首先开始时进行系统初始化,初始化完成后,系统进行设定好的程序运行,传感器和摄像头,开始进行数据的采集,采集的数据传输到我们的单片机中,进行数据的处理,当采集的数据与我们设定好的程序数据出现不同时,蜂鸣器会进行报警提示,显示屏也会实时的进行显示,也会给继电器电平指令,使按摩功能开始。图4-5传感器模块软第5章系统测试5.1系统实物图该系统可以实时监测驾驶员的状态,包括疲劳驾驶状态和酒驾状态,并通过多种方式发出警告和提示,帮助驾驶员保持良好的驾驶状态,确保行车安全。图5-1系统完整实物图5.2系统测试图首先,该系统可以实时显示监测到的画面,这意味着驾驶员可以通过屏幕清晰地看到自己的状态,包括疲劳状态和酒驾状态。此外,系统还具备学习驾驶员疲劳驾驶状态的功能,通过检测驾驶员的打哈欠、眨眼频率和点头状态等指标,判断驾驶员是否处于疲劳状态,从而提醒驾驶员及时休息。其次,该系统还可以通过驾驶座上放置的压力传感器检测驾驶员的连续驾驶时长,并显示。这项功能可以帮助驾驶员合理安排驾驶时间,避免过度疲劳导致事故发生。为了更好地保证驾驶员的安全,该系统还可以设置连续驾驶时间阈值。当驾驶员连续驾驶时间超出设定的阈值时,系统将发出蜂鸣器示警,并开启按摩气泵设备,从而提醒驾驶员及时休息。此外,该系统还可以检测车内酒精浓度,并设置酒精浓度阈值。当系统检测到酒精浓度异常时,将禁止点火,从而有效避免醉酒驾车的情况发生。最后,该系统还可以监测到驾驶员出现疲劳和酒驾现象,并通过蜂鸣器示警和开启按摩气泵设备来提醒驾驶员及时休息或者停车休息,从而避免因疲劳和酒驾导致的交通事故。图5-2测试显示图

结论这是一款集成了多项智能功能的驾驶员辅助系统,旨在提升驾驶过程中的安全性。该系统能够实时监测驾驶员的状态,包括疲劳驾驶和酒驾状态,并通过多种方式进行警告和提示,帮助驾驶员保持良好的驾驶状态,确保行车安全。系统通过实时显示监测到的画面,驾驶员可以清晰地看到自己的状态,包括疲劳和酒驾状态。此外,系统还具备学习驾驶员疲劳驾驶状态的功能,通过检测驾驶员的打哈欠、眨眼频率和点头状态等指标,判断驾驶员是否处于疲劳状态,并及时提醒驾驶员休息。另外,系统还通过驾驶座上的压力传感器检测驾驶员的连续驾驶时长,并进行显示,以帮助驾驶员合理安排驾驶时间,避免过度疲劳导致事故发生。为了进一步保证驾驶员的安全,系统还可以设置连续驾驶时间的阈值。一旦驾驶员的连续驾驶时间超过设定的阈值,系统将发出蜂鸣器警报,并开启按摩气泵设备,以提醒驾驶员及时休息。此外,该系统还可以检测车内酒精浓度,并设置酒精浓度的阈值。一旦系统检测到酒精浓度异常,将禁止点火,从而有效避免醉酒驾驶的情况发生。系统还能够监测到驾驶员出现疲劳和酒驾现象,并通过蜂鸣器警报和开启按摩气泵设备来提醒驾驶员及时休息或停车休息,从而避免因疲劳和酒驾导致的交通事故发生。该驾驶员辅助系统通过集成多种功能,为驾驶员提供了全面的安全保障,促使驾驶员保持良好的驾驶状态,提高行车安全性。驾驶疲劳和注意力分散是造成重大交通事故的重要原因之一,因此对驾驶人的疲劳状态进行监测和预警,对减少事故的发生,具有十分重要的意义,相信的未来所必备的发展前景也必定十分广阔。

参考文献[1]王国华.道路交通事故的防范[J].城市与减灾,2022(1):43-45.[2]李宏汀,刘彦宇,李文书.驾驶中使用手机对驾驶员行为安全绩效影响综述[J].中国安全科学学报,2021,23(1):16-21.[3]石莹,刚宪约.基于有限元的汽车轻量化车身防追尾碰撞仿真[J].计算机仿真,2019,36(11):4.[4]鲍伟亮,张晓壮,吴轲,等.车辆防追尾预警刹车系统的设计探讨[J].农机使用与维修,2019.[5]周君,胡然,包旭,等.一种基于视频技术的公路隧道防追尾预警方法[P].2020.[6]孟庆雪.基于前方车辆状态的防追尾系统及方法:,CN110979277A[P].2020.[7]韩晓实.低氧中强度运动改善肥胖人群的运动能力和抗疲劳指标[J].基因组学与应用生物学,2020,39(8):427-433.[8]孙秀洁.汽车上的安全部件(二)安全气囊[J],世界汽车,2020.[9]王志刚,现代电子线路[M],北京:清华大学出版社,2020,258—261[10]余宏,刘琰,李波.高强度循环训练超重人群身体成分、心肺功能及代谢指标的变化[J].中国组织工程研究,2019,23(11):1738-1742.[11]王子豪.无人驾驶汽车视觉导航方法的研究[D].大连海洋大学,2022.[12]张杨.基于机器视觉的汽车疲劳驾驶状态辨识[D].青岛科技大学,2022.[13]陆卫忠,黄宏梅,杨茹,曹燕.基于深度学习的智能花卉养护系统设计[J].计算机应用与软件,2021,38(08):72-77.[14]尚宸光.L3级自动驾驶汽车的AR-HUD视觉交互设计研究[D].西南交通大学,2021.[15]

科学家研发仿人眼传感器可提升自动驾驶汽车的视觉性能[J].军民两用技术与产品,2020,(12):62.[16]罗国荣,戚金凤.基于计算机视觉的自动驾驶汽车车道检测[J].北京工业职业技术学院学报,2020,19(04):34-37.[17]孙建强.安全视觉下的汽车驾驶技术探究[J].时代汽车,2019,(01):43-44.[18]管欣,洪峰,贾鑫,田磊,段春光.汽车驾驶模拟器视觉系统传输延迟补偿[J].吉林大学学报(工学版),2017,47(01):28-34.[19]N.NursultanovW.J.B.HeffernanM.J.WM.RvanHerel,J.J.Nijdam.ComputationalcalculationoftemperatureandelectricalresistancetocontrolJouleheatingofgreenPinusradiatalogsJAppliedThermalEngineering,2019159.[20]MinCheng,JunhuiZhang,BingXuRuqiDing,GengYang.Anti-windupschemeoftheelectronicloADsensingpumpviaswitchedflow/powercontrol[].Mechatronics,2019.[21]MilesL.MorganDanJ.Curtis,DavideDeganello.ControlofmorphologicalandelectricalpropertiesofflexographicprintedelectronicthroughtAIloredinkrheology[1].OrganicElectronics,2019.[22]A.G.MADureira,J.A.PeçasLopes.AncillaryservicesmarketframeworkforVoltagecontrolindistributionnetworkswithmicrogrids[J].ElectricPowerSystemsResearch,2012,86,2021,42(08):153-155.[23]CaoWang,QiqiMei,LinglingZeng.TheWarehouseTemperatureandHumidityMeasurementandControlSystemBasedonSCMJ.JournalofResearchinScienceAndEngineering,2020,2(6).andEngineering,2020,2(6).

附录电路图源代码importKPUaskpuimportsensorimportlcdfromMaiximportGPIOfromfpioa_managerimportfmimporttimeimportgcfrommicropythonimportconst#导入constfromboardimportboard_infofrommachineimportTimerimportADS1115_16bits_Purple_Drive#ADS1115importRELAY_Drive#继电器按摩气泵importBEEP_3V3_Drive#蜂鸣器########################################My-config###############################################SYS_Status='END'#系统状态:状态#设置Set_Chose=0#设置选择1--酒精浓度、2驾驶时长#点火Ignition_State=0#点火状态#疲劳驾驶Tired_Recog=0#疲劳--当前识别:0-无,1-哈欠,2-闭眼,3-点头THR_Check_Freq_min=50#频率阈值Check_Yawn={'real_count_100ms':0,'freq_min':0,'state':0}#周期监测--哈欠:实时计数、频率、状态Check_Close_Eyes={'real_count_100ms':0,'freq_min':0,'state':0}#周期监测--眨眼:实时计数、频率、状态Check_Nod={'real_count_100ms':0,'freq_min':0,'state':0}#周期监测--点头:实时计数、频率、状态#酒驾Alcohol_Level=0#酒精等级THR_Alcohol=40#酒精阈值Drunk_Driving_State=0#酒驾状态:0-无,1-酒驾#长时间驾驶Presure_Level=0#压力等级THR_Presure=4#压力阈值Driving_Time={'H':0,'M':0,'S':0}#连续驾驶时长THR_Set_Min=1THR_Driving_Time={'H':0,'M':1,'S':0}#连续驾驶时长阈值Driving_State=0#驾驶状态:0-无,1-正在驾驶,2-疲劳驾驶###############################################################################################################################################config#################################################class_num=4#类数量sample_num=20#样本数量THRESHOLD=6#阈值class_names=['Surroundings','Yawn','Close_Eyes','Nod']#类名称:环境、哈欠、闭眼、点头board_cube=0Identify_Results={'Identify_Situation':"",'Identify_Index':''}#识别结果cap_num=0#抓取训练数量train_status=0#训练状态last_cap_time=0#上次训练抓取时间last_btn_status=1#上次按键状态#####################################################################################################周期监测疲惫状态##########################################Tim-0################################################Tim0_Cout_ON_Or_OFF=0#测量开关:周期测量0--关,1开Tim0_Count=-1#定时器计数变量TIM_0_THRESHOLD_MS=100#定时器周期变量(ms)#定时器回调函数周期TIM_0_THRESHOLD_MSmsdeffun_tim0(tim0):globalTim0_Cout_ON_Or_OFFglobalTim0_CountglobalTired_Recog#实时监测globalTHR_Check_Freq_min#频率阈值globalCheck_Yawn,Check_Close_Eyes,Check_Nod#周期监测--哈欠、眨眼、点头ifTim0_Cout_ON_Or_OFF==1:Tim0_Count=Tim0_Count+1ifTired_Recog==1:#哈欠Check_Yawn['real_count_100ms']=Check_Yawn['real_count_100ms']+1elifTired_Recog==2:#眨眼Check_Close_Eyes['real_count_100ms']=Check_Close_Eyes['real_count_100ms']+1elifTired_Recog==3:#点头Check_Nod['real_count_100ms']=Check_Nod['real_count_100ms']+1else:passifTim0_Count>=600:#清零:计数Tim0_Count=0#频率Check_Yawn['freq_min']=Check_Yawn['real_count_100ms']Check_Close_Eyes['freq_min']=Check_Close_Eyes['real_count_100ms']Check_Nod['freq_min']=Check_Nod['real_count_100ms']#状态ifCheck_Yawn['freq_min']>THR_Check_Freq_min:#状态:哈欠Check_Yawn['state']=1else:Check_Yawn['state']=0ifCheck_Close_Eyes['freq_min']>THR_Check_Freq_min:#状态:眨眼Check_Close_Eyes['state']=1else:Check_Close_Eyes['state']=0ifCheck_Nod['freq_min']>THR_Check_Freq_min:#状态:点头Check_Nod['state']=1else:Check_Nod['state']=0#清零:实时计数Check_Yawn['real_count_100ms']=0Check_Close_Eyes['real_count_100ms']=0Check_Nod['real_count_100ms']=0else:#清零:计数Tim0_Count=0#清零:实时计数Check_Yawn['real_count_100ms']=0Check_Close_Eyes['real_count_100ms']=0Check_Nod['real_count_100ms']=0#清零:频率Check_Yawn['freq_min']=0Check_Close_Eyes['freq_min']=0Check_Nod['freq_min']=0#清零:状态Check_Yawn['state']=0Check_Close_Eyes['state']=0Check_Nod['state']=0#定时器0初始化,周期TIM_0_THRESHOLD_MSmstim0=Timer(Timer.TIMER0,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_0_THRESHOLD_MS,callback=fun_tim0,priority=4)####################################################################################################################################ADS-1115-16bits-purple############################################fm.register(board_info.PIN_ADS_SCL,fm.fpioa.GPIO0)#SCLSCL_1=GPIO(GPIO.GPIO0,GPIO.OUT)#输出模式fm.register(board_info.PIN_ADS_SDA,fm.fpioa.GPIO1)#SDASDA_1=GPIO(GPIO.GPIO1,GPIO.OUT)#输出模式ADS_1115_01=ADS1115_16bits_Purple_Drive.ADS_1115_16bits_purple(SCL_1,SDA_1)#构建ADS对象Channel_00=0#通道0返回数据0-100Channel_01=0#通道1返回数据0-100#使用方法:注,为防止干扰,设置模式后50ms读取不会出错#ADS_1115_01.ADS_1115_Config_Channel(0)#通道0通道0-3#time.sleep_ms(50)#channel_00=ADS_1115_01.ADS_1115_Read_Data(0)#输出0-100#ADS_1115_01.ADS_1115_Config_Channel(1)#通道1通道0-3#time.sleep_ms(50)#channel_01=ADS_1115_01.ADS_1115_Read_Data(1)#输出0-100#channel_01_V=ADS_1115_01.ADS_1115_Read_V(1)#电压##############################################################################################################################################Tim-1################################################Tim1_Cout_ON_Or_OFF=0#测量开关:周期测量0--关,1开Tim1_Count=0#定时器计数变量TIM_1_THRESHOLD_MS=200#定时器周期变量(ms)#定时器回调函数周期TIM_1_THRESHOLD_MSmsdeffun_tim1(tim1):globalTim1_Cout_ON_Or_OFFglobalTim1_Count#globalChannel_00,Channel_01#通道0是酒精、通道1是压力globalAlcohol_Level#获取:酒精等级--Channel_00globalTHR_Alcohol#酒精阈值globalDrunk_Driving_State#酒驾状态globalPresure_Level#获取:压力等级--Channel_01globalTHR_Presure#压力阈值globalDriving_State#驾驶状态globalADS_1115_01ifTim1_Cout_ON_Or_OFF==1:Tim1_Count=Tim1_Count+1ifTim1_Count==100:Tim1_Count=0ifTim1_Count%4==0:ADS_1115_01.ADS_1115_Config_Channel(0)#通道0通道0-3elifTim1_Count%4==1:Alcohol_Level=ADS_1115_01.ADS_1115_Read_Data()#输出0-100#Channel_00=ADS_1115_01.ADS_1115_Read_Data()#输出0-100elifTim1_Count%4==2:ADS_1115_01.ADS_1115_Config_Channel(1)#通道1通道0-3elifTim1_Count%4==3:Presure_Level=ADS_1115_01.ADS_1115_Read_Data()#输出0-100#Channel_01=ADS_1115_01.ADS_1115_Read_Data()#输出0-100else:pass#酒驾ifAlcohol_Level>THR_Alcohol:Drunk_Driving_State=1else:Drunk_Driving_State=0#驾驶状态ifPresure_Level>THR_Presure:ifDriving_State!=2:Driving_State=1#正在驾驶else:passelse:Driving_State=0#无人驾驶else:Tim1_Count=0#清除:计数Alcohol_Level=0#清除:酒精Presure_Level=0#清除:压力Drunk_Driving_State=0#清除:酒驾状态Driving_State=0#清除:驾驶状态#定时器1初始化,周期TIM_1_THRESHOLD_MSmstim1=Timer(Timer.TIMER1,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_1_THRESHOLD_MS,callback=fun_tim1,priority=4)#####################################################################################################连续驾驶##########################################Tim-2################################################Tim2_Cout_ON_Or_OFF=0#测量开关:连续驾驶0--关,1开Tim2_Count=0#定时器计数变量TIM_2_THRESHOLD_MS=1000#定时器周期变量(ms)#定时器回调函数周期TIM_2_THRESHOLD_MSmsdeffun_tim2(tim2):globalTim2_Cout_ON_Or_OFFglobalDriving_Time#连续驾驶时长globalTHR_Driving_Time#连续驾驶时长阈值globalDriving_State#驾驶状态ifTim2_Cout_ON_Or_OFF==1:ifDriving_State>0:#若:正在驾驶/疲劳驾驶Driving_Time['S']=Driving_Time['S']+1#秒ifDriving_Time['S']>=60:Driving_Time['S']=0Driving_Time['M']=Driving_Time['M']+1#分ifDriving_Time['M']>=60:Driving_Time['M']=0Driving_Time['H']=Driving_Time['H']+1#时ifDriving_Time['H']>=99:#时Driving_Time['H']=99else:#清除:连续驾驶时长Driving_Time['S']=0Driving_Time['M']=0Driving_Time['H']=0if((Driving_Time['H']*60*60)+(Driving_Time['M']*60)+Driving_Time['S'])>((THR_Driving_Time['H']*60*60)+(THR_Driving_Time['M']*60)+THR_Driving_Time['S']):Driving_State=2#过长时间疲劳驾驶else:passelse:#清除:连续驾驶时长Driving_Time['S']=0Driving_Time['M']=0Driving_Time['H']=0#定时器2初始化,周期TIM_2_THRESHOLD_MSmstim2=Timer(Timer.TIMER2,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_2_THRESHOLD_MS,callback=fun_tim2,priority=4)#############################################################################################################################################Relay_01##################################################控制按摩气泵--常开接线(继电器不工作状态是开路)fm.register(board_info.PIN_Relay_01,fm.fpioa.GPIO2)#注册IO-Ctr_RELAY_01Ctr_RELAY_01=GPIO(GPIO.GPIO2,GPIO.OUT)Relay_01=RELAY_Drive.RELAY(Ctr_RELAY_01,1)#构建对象:Relay_01Relay_01.Init()#初始化:Relay_01#Relay_01.ON()#继电器打开#Relay_01.OFF()#继电器打开##############################################################################################################################################BEEP###################################################fm.register(board_info.PIN_Ctr_BEEP,fm.fpioa.GPIO3)#注册IO-Ctr_BEEPCtr_BEEP=GPIO(GPIO.GPIO3,GPIO.OUT)BEEP=BEEP_3V3_Drive.BEEP_3V3(Ctr_BEEP,0)#构建对象:BEEPBEEP.Init()#初始化:BEEP#time.sleep_ms(1000)#BEEP.OFF()#蜂鸣器关闭#BEEP.ON()#蜂鸣器开启##############################################################################################################################################KEY######################################################KEY_BOOTfm.register(board_info.PIN_KEY_BOOT,fm.fpioa.GPIOHS0)KEY_BOOT=GPIO(GPIO.GPIOHS0,GPIO.PULL_UP)#KEY_SYSfm.register(board_info.PIN_KEY_SYS,fm.fpioa.GPIOHS1)#注册IO-KEY_SYSKEY_SYS=GPIO(GPIO.GPIOHS1,GPIO.IN,GPIO.PULL_UP)#构建KEY_SYS对象defexit_KEY_SYS_fun(KEY_SYS):#KEY_SYS中断回调函数globalSYS_Status,train_statusglobalSet_ChoseglobalIgnition_Stateiftrain_status!=0:#若:训练完成time.sleep_ms(10)#消除抖动ifKEY_SYS.value()==0:#确认按键被按下ifSYS_Status=='END':SYS_Status='RUN'Set_Chose=0else:SYS_Status='END'Set_Chose=0Ignition_State=0KEY_SYS.irq(exit_KEY_SYS_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#KEY1fm.register(board_info.PIN_KEY1_IN,fm.fpioa.GPIOHS2)#注册IO-KEY1KEY1=GPIO(GPIO.GPIOHS2,GPIO.IN,GPIO.PULL_UP)#构建KEY1对象defexit_KEY1_fun(KEY1):#KEY1中断回调函数globalSYS_Status,train_statusglobalSet_Choseiftrain_status!=0:#若:训练完成time.sleep_ms(10)#消除抖动ifKEY1.value()==0:#确认按键被按下ifSYS_Status=='END':Set_Chose=Set_Chose+1ifSet_Chose>2:Set_Chose=1else:Set_Chose=0KEY1.irq(exit_KEY1_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#KEY2fm.register(board_info.PIN_KEY2_IN,fm.fpioa.GPIOHS3)#注册IO-KEY2KEY2=GPIO(GPIO.GPIOHS3,GPIO.IN,GPIO.PULL_UP)#构建KEY2对象defexit_KEY2_fun(KEY2):#KEY2中断回调函数globalSYS_Status,train_statusglobalSet_ChoseglobalTHR_AlcoholglobalTHR_Set_MinglobalTHR_Driving_TimeglobalIgnition_StateglobalDrunk_Driving_Stateiftrain_status!=0:#若:训练完成time.sleep_ms(10)#消除抖动ifKEY2.value()==0:#确认按键被按下ifSYS_Status=='END':ifSet_Chose==1:THR_Alcohol=THR_Alcohol+1ifTHR_Alcohol>60:THR_Alcohol=20elifSet_Chose==2:THR_Set_Min=THR_Set_Min+1ifTHR_Set_Min>360:THR_Set_Min=1THR_Driving_Time['H']=THR_Set_Min//60THR_Driving_Time['M']=THR_Set_Min%60else:passelse:Ignition_State=1-Ignition_Stateif(Drunk_Driving_State==1):#酒驾Ignition_State=0KEY2.irq(exit_KEY2_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#KEY3fm.register(board_info.PIN_KEY3_IN,fm.fpioa.GPIOHS6)#注册IO-KEY3KEY3=GPIO(GPIO.GPIOHS6,GPIO.IN,GPIO.PULL_UP)#构建KEY3对象defexit_KEY3_fun(KEY3):#KEY3中断回调函数globalSYS_Status,train_statusglobalSet_ChoseglobalTHR_AlcoholglobalTHR_Set_MinglobalTHR_Driving_Timeiftrain_status!=0:#若:训练完成time.sleep_ms(10)#消除抖动ifKEY3.value()==0:#确认按键被按下ifSYS_Status=='END':ifSet_Chose==1:THR_Alcohol=THR_Alcohol-1ifTHR_Alcohol<20:THR_Alcohol=60elifSet_Chose==2:THR_Set_Min=THR_Set_Min-1ifTHR_Set_Min<1:THR_Set_Min=360THR_Driving_Time['H']=THR_Set_Min//60THR_Driving_Time['M']=THR_Set_Min%60else:passelse:passKEY3.irq(exit_KEY3_fun,GPIO.IRQ_FALLING)#开启中断,下降沿触发#########################################################################################################################################文字显示######################################################defdraw_string(img,x,y,text,color,scale,bg=None):ifbg:img.draw_rectangle(x-2,y-2,len(text)*8*scale+4,16*scale,fill=True,color=bg)img=img.draw_string(x,y,text,color=color,scale=scale)returnimg#########################################################################################################################################异常/正常#######################################################传入:系统状态、点火状态、哈欠状态、闭眼状态、点头状态、酒驾状态、驾驶状态#Operation(SYS_Status,Ignition_State,Check_Yawn['state'],Check_Close_Eyes['state'],Check_Nod['state'],Drunk_Driving_State,Driving_State)defOperation(sys_status,ignition_state,check_yawn_state,check_close_eyes_state,check_nod_state,drunk_driving_state,driving_state):globalRelay_01#继电器:按摩气泵globalBEEP#蜂鸣器globalTim0_Cout_ON_Or_OFF#开关:定时器0globalTim1_Cout_ON_Or_OFF#开关:定时器1globalTim2_Cout_ON_Or_OFF#开关:定时器2relay_flag=0#falg-继电器(按摩气泵):默认为0beep_flag=0#falg-蜂鸣器:默认为0ifsys_status=='RUN':#周期监测开关Tim1_Cout_ON_Or_OFF=1#定时器1:开周期监测:酒精浓度、有无人座if(ignition_state==1):#点火了Tim0_Cout_ON_Or_OFF=1#定时器0:开周期监测:疲劳状态Tim2_Cout_ON_Or_OFF=1#定时器2:开周期监测:驾驶时长else:Tim0_Cout_ON_Or_OFF=0#定时器0:关周期监测:疲劳状态Tim2_Cout_ON_Or_OFF=0#定时器2:关周期监测:驾驶时长#疲劳状态/驾驶时长超限if((check_yawn_state==1)or(check_close_eyes_state==1)or(check_nod_state==1)or(driving_state==2)):#出现疲劳驾驶/驾驶时长超限relay_flag=1#按摩气泵beep_flag=1#开蜂鸣器else:pass#疲劳状态/驾驶时长超限if(drunk_driving_state==1):#酒驾beep_flag=1#开蜂鸣器else:#周期监测开关:关Tim0_Cout_ON_Or_OFF=0Tim1_Cout_ON_Or_OFF=0Tim2_Cout_ON_Or_OFF=0#执行#继电器:按摩气泵ifrelay_flag==1:Relay_01.ON()#开启继电器:按摩气泵else:Relay_01.OFF()#关启继电器:按摩气泵#蜂鸣器ifbeep_flag==1:BEEP.ON()#开蜂鸣器else:BEEP.OFF()#关蜂鸣器#####################################################################################################设置摄像头sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)#sensor.set_windowing((224,224))#ifboard_cube==1:#sensor.set_vflip(True)#sensor.set_hmirror(True)#lcd.init(type=2)#lcd.rotation(2)#else:#lcd.init()#初始化LCDlcd.init()#设置摄像头水平与垂直镜像sensor.set_vflip(True)sensor.set_hmirror(True)#再次运行删除模型try:delmodelexceptException:passtry:delclassifierexceptException:passgc.collect()model=kpu.load("/sd/sipeed_learn_model.smodel")#加载模型#model=kpu.load(0x300000)classifier=kpu.classifier(model,class_num,sample_num)#模型初始化while1:Identify_Results['Identify_Situation']=''Identify_Results['Identify_Index']=''img=sensor.snapshot()#采集图片ifboard_cube:img=img.rotation_corr(z_rotation=90)img.pix_to_ai()#captureimgiftrain_status==0:#如果训练状态:0(未训练)ifKEY_BOOT.value()==0:#如果按键值为:0(按下)time.sleep_ms(30)#延时30msifKEY_BOOT.value()==0and(last_btn_status==1)and(time.ticks_ms()-last_cap_time>500):#如果按键按下&&上次按键状态==1&&时差大于500last_btn_status=0#上次按键状态=1last_cap_time=time.ticks_ms()#更新上次抓取时间ifcap_num<class_num:#如果抓取数量<类数量index=classifier.add_class_img(img)#添加类图片,并获取当前添加图片的indexcap_num+=1#cap_num自增1print("addclassimg:",index)#打印当前添加的类elifcap_num<class_num+sample_num:#如果:类数量<抓取数量<类数量+样例数量index=classifier.add_sample_img(img)#添加样例并获取当前添加样例的indexcap_num+=1#cap_num自增1print("addsampleimg:",index)#打印当前添加的样例else:#如果:按键弹起img=draw_string(img,2,200,"releasebootkeyplease",color=lcd.WHITE,scale=1,bg=lcd.RED)#请松开按键else:#如果未按下按键time.sleep_ms(30)#延时30msifKEY_BOOT.value()==1and(last_btn_status==0):#如果按键按下&&上次按键状态==0last_btn_status=1#上次按键状态=1ifcap_num<class_num:#如果抓取数量<类数量img=draw_string(img,0,200,"pressbootkeytocap:"+class_names[cap_num],color=lcd.WHITE,scale=1,bg=lcd.RED)#显示请按键抓取类xelifcap_num<class_num+sample_num:#如果类数量<抓取数量<类数量+样例数量img=draw_string(img,0,200,"bootkeytocapsample:{}".format(cap_num-class_num),color=lcd.WHITE,scale=1,bg=lcd.RED)#显示请按键抓取样例x#trainandpredictiftrain_status==0:#如果训练状态:0(未训练)ifcap_num>=class_num+sample_num:#如果类数量+样例数量<抓取数量print("starttrain")#print开始训练img=draw_string(img,30,100,"training...",color=lcd.WHITE,scale=2,bg=lcd.RED)#显示training...lcd.display(img)#显示classifier.train()#训练print("trainend")train_status=1#训练状态=1else:

温馨提示

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

评论

0/150

提交评论