基于AI視覺的網課監督設備_第1頁
基于AI視覺的網課監督設備_第2頁
基于AI視覺的網課監督設備_第3頁
基于AI視覺的網課監督設備_第4頁
基于AI視覺的網課監督設備_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

參考文獻董君.基于人工智能技術的新工科人才培養模式改革探索[J].科技與創新,2022(22):33-35.Anderson

Izefia.

Hospital

financial

remote

reimbursement

information

management

system

based

on

blockchain

technology[J].

Computer

Informatization

and

Mechanical

System,2022,5(4).姜淑慧,江世銀,張杰.教育人工智能賦能教育發展與重塑技術應用研究[J].黑龍江高教研究,2022,40(11):18-24.王勇.5G+電視現場直播系統的優化[J].電視技術,2022,46(10).王俊莉.山西媒體智慧云平臺融合直播系統的設計與應用[J].廣播電視網絡,2022,29(9):94-96.肖艷,李英,徐媛媛.網絡直播教學環境下的大學英語教學探究[J].科技視界,2022(22):95-97.黃春機.基于AI視覺技術構建柔性生產數字化車間[J].智能制造,2022(3):30-33.TrueCircle

launches

new

AI

vision

system

to

improve

yield

and

quality

for

PET

&

HDPE

recyclers[J].

M2

Presswire,2022.張倩,董珍珍,段星汝,韓天紅.高校師生對網絡直播平臺“教”與“學”效果現狀及滿意度調查分析[J].中阿科技論壇(中英文),2022(6):167-172.王凱文,覃文忠,李睿.高校學生網絡直播交往異化與消解路徑研究[J].新聞愛好者,2022(5):110-112.龍飛.AI視覺平臺賦能智慧園區建設[J].中國安防,2022(4):49-52.唐淮,張晶,李為穎,馮冬梅,吳科進.基于AI視覺的工業機器人抓取系統設計[J].內燃機與配件,2022(6):185-187.STRATIO

PARTNERS

WITH

NIPA

ON

AI

VISION

SYSTEM[J].

Worldwide

Databases,2022,34(2).Li-Hui

Nian,

Jing

Wei,

Can-Bin

Yin.

The

promotion

role

of

mobile

online

education

platform

in

students'

self-learning[J].

Int.

J.

of

Continuing

Engineering

Education

and

Life-Long

Learning,2019,29(1/2).Canbin

Yin,Lihui

Nian,Jing

Wei.

The

promotion

role

of

mobile

online

education

platform

in

students'

self-learning[J].

International

Journal

of

Continuing

Engineering

Education

and

Life-Long

Learning,2019,29(1/2).郭鵬宇.

基于分割的空間目標視覺跟蹤方法[P].

北京市:CN111539993A,2020-08-14.彭慧伶,孫長庫,王鵬.

一種視覺跟蹤組件安裝參數標定裝置和方法[P].

天津市:CN111489399A,2020-08-04.陳曉蓉,吳承貴,呂余華,程江江,林曉軒,李樂,白麗園,孔令偉,胡杰,謝小云,古陽.

一種便捷的埋弧焊小車視覺跟蹤裝置[P].

江蘇省:CN214350184U,2021-10-08.Guo

Guizhong.

Electromechanical

Feed

Control

System

in

Chemical

Dangerous

Goods

Production.

[M].2020Deep

Neural

Networks

You

Mingyu;Luo

Chaoxian;Zhou

Hongjun.

Visual

Landmark

Learning

Via

Attention-Based

Deep

Neural

Networks.2021

Zheng

Hexin.False

Vision

Graphics

in

Logo

Design

Based

on

Artificial

Intelligence

in

the

Visual

Paradox

Environment

[P].

M2

Presswire.2022Altaf

Alam;Zainul

Abdin

Jaffery.

A

Vision

based

Indian

Traffic

Sign

Classification.

2020.附錄電路圖源代碼importsensorimportimageimportlcdimportKPUaskpuimporttimefromMaiximportFPIOA,GPIOimportgcfromfpioa_managerimportfmfromboardimportboard_infoimportutimefromboardimportboard_infofrommachineimportTimer,UART,PWM#語音importRELAY_DriveimportSYN6288_With_Busy_Drive#蜂鳴器importBEEP_3V3_Drive再次運行刪除模型try:deltask_fddeltask_lddeltask_feexceptException:passtry:delaexceptException:passgc.collect()模型加載#內存中模型加載#task_fd=kpu.load(0x300000)#task_ld=kpu.load(0x400000)#task_fe=kpu.load(0x500000)#SD中模型加載task_fd=kpu.load("/sd/FaceDetection.smodel")#加載:人臉檢測模型找到人臉task_ld=kpu.load("/sd/FaceLandmarkDetection.smodel")#加載:關鍵點檢測模型從前面找到的人臉中找到人臉的眼睛鼻子和嘴巴的位置task_fe=kpu.load("/sd/FeatureExtraction.smodel")#加載:人臉特征提取模型--從一張人臉圖片中得出一個特征值My-config#系統狀態SYS_Status='END'#系統狀態:狀態可設置Class_State=0#上課狀態:0--下課,1--上課#時間相關Sys_Time={'H':0,'M':0,'S':0}#系統時間可設置C_S_Time={'H':0,'M':0,'S':0}#課堂開始時間可設置C_C_Time={'H':0,'M':3,'S':0}#課堂持續時間可設置B_C_Time={'H':0,'M':0,'S':5}#鈴聲持續時間可設置'''默認下課默認不響鈴開始時間-鈴聲時長鈴聲響開始時間上課開始時間+持續時間鈴聲響開始時間+持續時間+鈴聲時長重置:參考時間點--(開始時間-鈴聲時長)#人臉相關Operational_Order=['0','0']#操作指令#Operational_Order[0]#操作-1位:"0"-無操作;"1"-自動追加;"2"-指定追加;"3"-指定刪除;"4"-自動刪除#Operational_Order[1]#操作-2位:"0"-"9"指定追加編號;/指定刪除編號Face_Index=""Face_Check_Monitor={'Index':'','State':0,'Thr_Freq':50,'Minu':0,'Real_Count':0,'Freq_Min':0}#Face_Check_Monitor['Index']--監測的人臉:編號--可設置#Face_Check_Monitor['State']--監測的人臉:狀態--(Operation函數處理)(切換時,需清空)#Face_Check_Monitor['Thr_Freq']--監測的人臉:專注閾值--可設置#Face_Check_Monitor['Minu']--監測的人臉:已監測的分鐘--timer操作(切換時,需清空,以及清空Tim1_Count)#Face_Check_Monitor['Real_Count']--監測的人臉:實時計數--timer操作(切換時,需清空,以及清空Tim1_Count)#Face_Check_Monitor['Freq_Min']--監測的人臉:頻率(1分鐘)--timer操作(切換時,需清空,以及清空Tim1_Count)#引用#Face_Check_Monitor['Index']=''#Face_Check_Monitor['State']=0#Face_Check_Monitor['Thr_Freq']=50#Face_Check_Monitor['Minu']=0#Face_Check_Monitor['Real_Count']=0#Face_Check_Monitor['Freq_Min']=0Last_Monitor_State=0configanchor=(1.889,2.5245,2.9465,3.94056,3.99987,5.3658,5.155437,6.92275,6.718375,9.01025)#anchorforfacedetectdst_point=[(44,59),(84,59),(64,82),(47,105),(81,105)]#standardfacekeypointpositionrecord_ftr=[]#人臉特征#record_ftrs=[]#建立字典--記錄:人臉特征#names=['Mr.1','Mr.2','Mr.3','Mr.4','Mr.5','Mr.6','Mr.7','Mr.8','Mr.9','Mr.10']dic_record_ftrs={}#建立字典--記錄:人臉特征ACCURACY=85#精度文字顯示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)returnimgFace_Detect#最多錄10張人臉單張人臉返回值Face_Num=10#人臉總Face_Exist=[0,0,0,0,0,0,0,0,0,0]#人臉存在數組,通信傳輸,供上位機查看,0-不存在,1-存在defFace_Detect(img):globaltask_fd,task_ld,task_fe#模型:人臉檢測模型、關鍵點檢測模型、人臉特征提取模型globala#一些函數的公用返回值globaldst_pointglobalACCURACY#精度globalimg_faceglobalrecord_ftr,dic_record_ftrs#人臉特征、人臉特征記錄字典globalFace_Num#人臉總數globalFace_Exist#人臉存在數組,通信傳輸,供上位機查看globalOperational_Order#操作指令globalTim1_Count,Face_Check_MonitorglobalLast_Monitor_StateIndex=""#即將獲得的人臉索引,也即名稱:""未識別到,"X"未錄入,"0"-"9"已錄入的人臉編號record_ftr=[]#人臉特征curr_index_list=list(dic_record_ftrs.keys())#獲取當前已錄入人臉索引(名稱)列表#更新人臉存在數組,用于通信iflen(curr_index_list)>0:forexist_countinrange(0,Face_Num):#0-9,不包含10,人臉總數:10ifstr(exist_count)incurr_index_list:Face_Exist[exist_count]=1else:Face_Exist[exist_count]=0else:forexist_countinrange(0,Face_Num):#0-9,不包含10,人臉總數:10Face_Exist[exist_count]=0code=kpu.run_yolo2(task_fd,img)#人臉檢測模型找到人臉ifcode:#如果:找到人臉foriincode:#遍歷人臉#Cutfaceandresizeto128x128a=img.draw_rectangle(i.rect())#畫框face_cut=img.cut(i.x(),i.y(),i.w(),i.h())#人臉-裁剪face_cut_128=face_cut.resize(128,128)#人臉-裁剪-128*128a=face_cut_128.pix_to_ai()#同步`RGB888`內存塊#a=img.draw_image(face_cut_128,(0,0))#Landmarkforface5pointsfmap=kpu.forward(task_ld,face_cut_128)#關鍵點檢測模型從前面找到的人臉中找到人臉的眼睛鼻子和嘴巴的位置plist=fmap[:]#把運行的結果轉換成了一個list對象le=(i.x()+int(plist[0]*i.w()-10),i.y()+int(plist[1]*i.h()))#左眼睛坐標re=(i.x()+int(plist[2]*i.w()),i.y()+int(plist[3]*i.h()))#右眼睛坐標nose=(i.x()+int(plist[4]*i.w()),i.y()+int(plist[5]*i.h()))#鼻子坐標lm=(i.x()+int(plist[6]*i.w()),i.y()+int(plist[7]*i.h()))#左嘴角坐標rm=(i.x()+int(plist[8]*i.w()),i.y()+int(plist[9]*i.h()))#右嘴角坐標a=img.draw_circle(le[0],le[1],4)#左眼睛--畫圓a=img.draw_circle(re[0],re[1],4)#右眼睛--畫圓a=img.draw_circle(nose[0],nose[1],4)#鼻子--畫圓a=img.draw_circle(lm[0],lm[1],4)#左嘴角--畫圓a=img.draw_circle(rm[0],rm[1],4)#右嘴角--畫圓#alignfacetostandardpositionsrc_point=[le,re,nose,lm,rm]T=image.get_affine_transform(src_point,dst_point)a=image.warp_affine_ai(img,img_face,T)a=img_face.ai_to_pix()#同步`RGB888`內存塊#a=img.draw_image(img_face,(128,0))del(face_cut_128)#刪除人臉-裁剪-128*128#calculatefacefeaturevectorfmap=kpu.forward(task_fe,img_face)#人臉特征提取模型--從一張人臉圖片中得出一個特征值feature=kpu.face_encode(fmap[:])#得到特征值reg_flag=False#識別Flag識別完畢(未使用)Max_Score=0.0#當前最大相似度scores=[]#當前所有相似度index_tmp=""#即將獲得的人臉索引,也即名稱:""未識別到,"X"未錄入,"0"-"9"已錄入的人臉編號forf_index_tmp_01incurr_index_list:#遍歷已錄入人臉索引列表score=kpu.face_compare(dic_record_ftrs[f_index_tmp_01],feature)#獲取每個存儲人臉的特征值ifMax_Score<score:Max_Score=scoreindex_tmp=f_index_tmp_01ifMax_Score>ACCURACY:#最大特征值大于精度檢測到已錄入的人臉Index=index_tmp#獲取檢測到的人臉索引,也即名稱:獲取索引a=img.draw_string(i.x(),i.y(),("%s:%2.1f"%(#識別到已錄入的人臉,顯示:人臉索引,相似度Index,Max_Score)),color=(0,255,0),scale=2)else:#最大特征值小于精度檢測到未錄入的人臉Index="X"#獲取檢測到的人臉索引,也即名稱:未錄入a=img.draw_string(i.x(),i.y(),("%s:%2.1f"%(#識別到未錄入的人臉,顯示:XX,相似度Index,Max_Score)),color=(255,0,0),scale=2)record_ftr=feature#保存人臉特征break#錄入/刪除等指令操作ifOperational_Order[0]=="0":#指令:無操作passelifOperational_Order[0]=="1":#指令:自動追加ifIndex=="X":#識別到未錄入人臉if0<len(curr_index_list)<Face_Num:#未達到人臉總數curr_index_list_to_int=[int(x)forxincurr_index_list]#獲取當前已錄入人臉索引(名稱)int列表ifmax(curr_index_list_to_int)<(Face_Num-1):#編號小于人臉總數-1dic_record_ftrs.setdefault(str(max(curr_index_list_to_int)+1),record_ftr)#插入新值eliflen(curr_index_list)==0:dic_record_ftrs.setdefault('0',record_ftr)#插入新值else:passelifOperational_Order[0]=="2":#指令:指定追加if'0'<=Operational_Order[1]<=str(Face_Num-1):ifIndex=="X":#識別到未錄入人臉if0<len(curr_index_list)<Face_Num:#未達到人臉總數ifnotOperational_Order[1]incurr_index_list:dic_record_ftrs.setdefault(Operational_Order[1],record_ftr)#插入新值eliflen(curr_index_list)==0:dic_record_ftrs.setdefault(Operational_Order[1],record_ftr)#插入新值else:passelse:#非法指令passifOperational_Order[0]=="3":#指令:指定刪除if'0'<=Operational_Order[1]<=str(Face_Num-1):iflen(curr_index_list)>0:ifOperational_Order[1]incurr_index_list:deldic_record_ftrs[Operational_Order[1]]elifOperational_Order[0]=="4":#指令:自動刪除iflen(curr_index_list)>0:curr_index_list_to_int=[int(x)forxincurr_index_list]#獲取當前已錄入人臉索引(名稱)int列表deldic_record_ftrs[str(max(curr_index_list_to_int))elifOperational_Order[0]=="5":#指令:指定監察(只有RUN才會傳盡量值)if'0'<=Operational_Order[1]<=str(Face_Num-1)or(Operational_Order[1]==''):iflen(curr_index_list)>0:if(Operational_Order[1]incurr_index_list)or(Operational_Order[1]==''):#監察:存在或空ifFace_Check_Monitor['Index']!=Operational_Order[1]:#兩次設置監察不同#設置監察編號Face_Check_Monitor['Index']=Operational_Order[1]#清空參數Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0else:passelse:passelse:#非法指令passOperational_Order[0]="0"#清空指令(最后統一清空指令)Operational_Order[1]="0"#清空編號(最后統一清空指令)returnIndexINITlcd.init()#初始化LCDsensor.reset()#復位攝像頭sensor.set_pixformat(sensor.RGB565)#設置攝像頭輸出格式:屏幕使用的是RGB565sensor.set_framesize(sensor.QVGA)#設置攝像頭輸出幀大小:QVGA--320*240sensor.set_hmirror(1)#水平鏡像sensor.set_vflip(1)#垂直鏡像sensor.run(1)#圖像捕捉功能控制:1--開始抓取圖像0--停止抓取圖像a=kpu.init_yolo2(task_fd,0.5,0.3,5,anchor)#因為使用了YOLO2模型,該模型有專門的初始化函數,調用初始化函數初始化模型img_lcd=image.Image()img_face=image.Image(size=(128,128))a=img_face.pix_to_ai()S-RELAY(語音控制#控制語音模塊--常開接線(繼電器不工作狀態是開路)fm.register(board_info.PIN_S_Relay_01,fm.fpioa.GPIO0)#注冊IOCtr_S_RELAYCtr_S_RELAY=GPIO(GPIO.GPIO0,GPIO.OUT)S_Relay=RELAY_Drive.RELAY(Ctr_S_RELAY,1)#構建對象:S_RelayS_Relay.Init()#初始化:Relay_01#S_Relay.ON()#繼電器打開#S_Relay.OFF()#繼電器打開SYN6288(withbusy)fm.register(board_info.PIN_S_BUSY,fm.fpioa.GPIO1)#映射IO-S_BUSY#PIN_S_BUSYS_BUSY=GPIO(GPIO.GPIO1,GPIO.PULL_UP)#注冊IO-S_BUSYfm.register(board_info.PIN_SRXD_MCU_TX,fm.fpioa.UART1_TX,force=True)#映射串口引腳MCU-TXfm.register(board_info.PIN_STXD_MCU_RX,fm.fpioa.UART1_RX,force=True)#映射串口引腳MCU-RXuart_1=UART(UART.UART1,9600,read_buf_len=10240)VOICE=SYN6288_With_Busy_Drive.SYN6288(uart_1,S_BUSY)#構建對象,默認忙時為高電平VOICE.Init()time.sleep(1)S_Relay.ON()#開語音#播放語音#S_Relay.ON()#VOICE.Send_Data_Handle('warning')#指令:'warning'--請保持專注#讀忙#VOICE.Read_Busy()#合成/語音--返回"IS_BUSY"否則"NO_BUSY"BEEPfm.register(board_info.PIN_Ctr_BEEP,fm.fpioa.GPIO2)#注冊IO-Ctr_BEEPCtr_BEEP=GPIO(GPIO.GPIO2,GPIO.OUT)BEEP=BEEP_3V3_Drive.BEEP_3V3(Ctr_BEEP,0)#構建對象:BEEP,低電平響BEEP.Init()#初始化:BEEP#time.sleep_ms(1000)#BEEP.OFF()#蜂鳴器關閉#BEEP.ON()#蜂鳴器開啟KEY#KEY_BOOT--未使用#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_StatusglobalTim1_Count,Face_Check_Monitor#切換END時,清空監察相關參數globalLast_Monitor_Statetime.sleep_ms(10)#消除抖動ifKEY_SYS.value()==0:#確認按鍵被按下ifSYS_Status=='END':SYS_Status='RUN'else:SYS_Status='END'#設置監察編號Face_Check_Monitor['Index']=''#清空參數Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0KEY_SYS.irq(exit_KEY_SYS_fun,GPIO.IRQ_FALLING,priority=2)#開啟中斷,下降沿觸發#KEY1--未使用#KEY2--未使用#KEY3--未使用周期監測人臉頻率Tim-1Tim1_Cout_ON_Or_OFF=1#測量開關:周期測量0--關,1開Tim1_Count=0#定時器計數變量TIM_1_THRESHOLD_MS=100#定時器周期變量(ms)#定時器回調函數周期TIM_1_THRESHOLD_MSmsdeffun_tim1(tim1):globalTim1_Cout_ON_Or_OFF#周期監測開關globalTim1_Count#計數變量globalFace_IndexglobalFace_Check_MonitorglobalLast_Monitor_StateifTim1_Cout_ON_Or_OFF==1:Tim1_Count=Tim1_Count+1ifFace_Check_Monitor['Index']!='':#存在監測ifFace_Check_Monitor['Index']==Face_Index:#監測到監測的人臉Face_Check_Monitor['Real_Count']=Face_Check_Monitor['Real_Count']+1#計數+1#到達1分鐘ifTim1_Count>=60000//TIM_1_THRESHOLD_MS:#1分鐘計時(時間到)Tim1_Count=0Face_Check_Monitor['Freq_Min']=Face_Check_Monitor['Real_Count']Face_Check_Monitor['Real_Count']=0Face_Check_Monitor['Minu']=Face_Check_Monitor['Minu']+1ifFace_Check_Monitor['Minu']>1000:Face_Check_Monitor['Minu']=1000#最大限制:連續監測1000minelse:#不存在監測Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0else:Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0#定時器1初始化,周期10mstim1=Timer(Timer.TIMER1,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_1_THRESHOLD_MS,callback=fun_tim1,priority=3)異常/正常#Operation(SYS_Status,Sys_Time,C_S_Time,C_C_Time,B_C_Time)defOperation(sys_status,sys_time,c_s_time,c_c_time,b_c_time):globalBEEP,S_Relay,VOICEglobalClass_StateglobalTim1_Cout_ON_Or_OFFglobalFace_Check_Monitor,Tim1_CountglobalLast_Monitor_State#課堂狀態Class_State=0#默認值:下課beep_flag=0#默認值:蜂鳴器關#監察Face_Check_Monitor['State']=0#默認值:無監察結果ifsys_status=='RUN':#RUN#上課下課邏輯#if(not(-1insys_time))and(not(-1inc_s_time))and(not(-1inc_c_time))and(not(-1inb_c_time)):#時間合法#時間非法if(c_s_time['H']==0andc_s_time['M']==0andc_s_time['S']==0)or(c_c_time['H']==0andc_c_time['M']==0andc_c_time['S']==0):Tim1_Cout_ON_Or_OFF=0#停止監察人臉else:sys_time_s=sys_time['H']*60*60+sys_time['M']*60+sys_time['S']#系統時間轉化秒c_s_time_s=c_s_time['H']*60*60+c_s_time['M']*60+c_s_time['S']#開始時間轉化秒c_c_time_s=c_c_time['H']*60*60+c_c_time['M']*60+c_c_time['S']#持續時間轉化秒b_c_time_s=b_c_time['H']*60*60+b_c_time['M']*60+b_c_time['S']#持續時間轉化秒rec_start_s=c_s_time_s-b_c_time_s#初始時間節點(s):記成--開始時間-鈴聲時長ifrec_start_s<=sys_time_s<rec_start_s+b_c_time_s:#開始時間節點<-->開始時間節點+鬧鈴時長beep_flag=1#響鈴Tim1_Cout_ON_Or_OFF=0#停止監察人臉elifrec_start_s+b_c_time_s<=sys_time_s<rec_start_s+b_c_time_s+c_c_time_s:#開始時間節點+鬧鈴時長<-->開始時間節點+鬧鈴時長+上課時長Class_State=1#上課Tim1_Cout_ON_Or_OFF=1#開始監察人臉elifrec_start_s+b_c_time_s+c_c_time_s<=sys_time_s<rec_start_s+b_c_time_s+c_c_time_s+b_c_time_s:#開始時間節點+鬧鈴時長+上課時長<-->開始時間節點+鬧鈴時長+上課時長+鬧鈴時長beep_flag=1#響鈴Tim1_Cout_ON_Or_OFF=0#停止監察人臉else:Tim1_Cout_ON_Or_OFF=0#停止監察人臉#監察(上課監察)ifFace_Check_Monitor['Index']!='':#監察非空ifFace_Check_Monitor['Minu']>=1:#已經監察了1分鐘ifFace_Check_Monitor['Freq_Min']==0:#頻率為0(缺勤)Face_Check_Monitor['State']=1#缺勤elif0<Face_Check_Monitor['Freq_Min']<Face_Check_Monitor['Thr_Freq']:#小于設定頻率(不專注)Face_Check_Monitor['State']=2#不專注else:#大于設定頻率(專注)Face_Check_Monitor['State']=3#不專注else:#監測不到1分鐘,此時沒有頻率pass#此時使用默認結果--0else:#監察為空#此時使用默認結果--0#清空參數Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0else:#END#此時使用默認結果--0Tim1_Cout_ON_Or_OFF=0#停止監察人臉#監測清空#設置監察編號Face_Check_Monitor['Index']=''#清空參數Tim1_Count=0Face_Check_Monitor['State']=0#清空:狀態Face_Check_Monitor['Real_Count']=0#清空:實時計數Face_Check_Monitor['Freq_Min']=0#清空:頻率Face_Check_Monitor['Minu']=0#清空:累計監測Last_Monitor_State=0#語音voice_flag=0#默認值:不播報if(Last_Monitor_State!=Face_Check_Monitor['State'])and(Face_Check_Monitor['State']==2):voice_flag=1else:voice_flag=0#執行ifbeep_flag==1:BEEP.ON()#蜂鳴器開啟else:BEEP.OFF()#蜂鳴器關閉Last_Monitor_State=Face_Check_Monitor['State']ifvoice_flag==1:ifVOICE.Read_Busy()=='IS_BUSY':S_Relay.OFF()#關閉語音模塊time.sleep_ms(15)#延時S_Relay.ON()#開啟語音模塊time.sleep_ms(15)#延時VOICE.Send_Data_Handle('warning')#指令:'warning'--請保持專注Tim-2Tim2_Count=0TIM_2_THRESHOLD_MS=1000#定時器回調函數周期1000msdeffun_tim2(tim2):globalTim2_CountglobalSys_Time#Tim2_Count=Tim2_Count+1if((Sys_Time['H']!=-1)or(Sys_Time['M']!=-1)or(Sys_Time['S']!=-1)):Sys_Time['S']=Sys_Time['S']+1ifSys_Time['S']>=60:Sys_Time['S']=0Sys_Time['M']=Sys_Time['M']+1ifSys_Time['M']>=60:Sys_Time['M']=0Sys_Time['H']=Sys_Time['H']+1ifSys_Time['H']>=24:Sys_Time['H']=0#定時器1初始化,周期10mstim2=Timer(Timer.TIMER2,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_2_THRESHOLD_MS,callback=fun_tim2,priority=3)HC-05fm.register(board_info.PIN_HRXD_MCU_TX,fm.fpioa.UART2_TX,force=True)#注冊到內部IOfm.register(board_info.PIN_HTXD_MCU_RX,fm.fpioa.UART2_RX,force=True)#注冊到內部IOHC_05=UART(UART.UART2,9600,8,1,0,timeout=1000,read_buf_len=4096)#inituartSend_Data='-'Rece_Data='-'Send_Data_HandledefSend_Data_Handle():#發送globalSYS_Status#(SS)系統狀態globalFace_Exist#(FD)人臉存在globalFace_Check_Monitor#(FM)(FS)(FT)globalFace_Index#(FR)globalClass_State#(C)globalC_S_Time#(CS)globalC_C_Time#(CC)globalB_C_Time#(BC)Send_Data='+SS%sFD%1d%1d%1d%1d%1d%1d%1d%1d%1d%1dFM%sFR%sFS%1dFT%03dC%1dCS%02d%02d%02dCC%02d%02d%02dBC%02d%02d%02d-'%(SYS_Status,Face_Exist[0],Face_Exist[1],Face_Exist[2],Face_Exist[3],Face_Exist[4],Face_Exist[5],Face_Exist[6],Face_Exist[7],Face_Exist[8],Face_Exist[9],Face_Check_Monitor['Index'],Face_Index,Face_Check_Monitor['State'],Face_Check_Monitor['Thr_Freq'],Class_State,C_S_Time['H'],C_S_Time['M'],C_S_Time['S'],C_C_Time['H'],C_C_Time['M'],C_C_Time['S'],B_C_Time['H'],B_C_Time['M'],B_C_Time['S'])HC_05.write(Send_Data)Tim-0TIM_0_THRESHOLD_MS=1000#定時器回調函數周期1000msdeffun_tim0(tim0):Send_Data_Handle()#定時器1初始化,周期10mstim0=Timer(Timer.TIMER0,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=TIM_0_THRESHOLD_MS,callback=fun_tim0,priority=1)Rece_Data_HandledefRece_Data_Handle():globalRece_DataglobalSYS_StatusglobalSys_TimeglobalC_S_TimeglobalC_C_TimeglobalB_C_TimeglobalFace_Check_Monitor,Tim1_Count#設置人臉專注頻率閾值,以及切換END時,清空字典globalLast_Monitor_StateglobalOperational_Order#Operational_Order[0]#操作-1位:"0"-無操作;"1"-自動追加;"2"-指定追加;"3"-指定刪除;"4"-自動刪除#Operational_Order[1]#操作-2位:"0"-"9"指定追加編號;/指定刪除編號tmp=HC_05.read()ifnottmpisNone:print(tmp)Rece_Data=tmp.decode()print(Rece_Data)ifRece_Data[0]=='+'andRece_Data[-1]=='-':print("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論