各位前輩好, 小弟最近在研究人臉辨識的專案
最近寫了一個UI介面有個邏輯問題卡關
部分的代碼如下
if recording:
ret, frame = cap.read()
frame,name = frf.recognize(frame, face_detector, face_encoder, encoding_dict)
imgbytes = cv2.imencode('.png', frame)[1].tobytes() # ditto
window['image'].update(data=imgbytes)
# 顯示 PASS 或 NG, 送訊號開鎖或off
if name == 'unknown':
# 紅燈
window['NG'].update(visible=True)
window['PASS'].update(visible=False)
else:
# 綠燈
window['PASS'].update(visible=True)
window['NG'].update(visible=False)
# 燈號亮後 10 秒熄滅
# if window['PASS'].visible==True or window['NG'].visible==True:
# time.sleep(10)
# window['PASS'].update(visible=False)
# window['NG'].update(visible=False)
想要的結果是:當辨識失敗, 設定的 NG 燈號會亮起, 反之成功則 PASS 燈號亮起
後面註解的是我想要在亮起後的 10 秒沒有其他動作的話就使兩個燈號 False,
但是條件設定成某個燈號亮起就倒數 10 秒的話會讓整個程式卡住, 因為直接進入這個 if 了, 請教各位前輩有沒有其他適合的條件, 或是相關的建議呢? 非常感謝!
主程式會連續執行 20 秒
開始執行後5秒會將狀態改為 Off
簡單寫個範例如下
你可以改成你要的版本
然後就會發現有其他複雜的地方要處理
import threading
import time
name = 'unknown'
light = 'Off'
def job():
global light
for i in range(5):
print("Count thread:", i)
time.sleep(1)
light = 'Off'
if name == 'unknown':
light = 'NG'
t = threading.Thread(target = job)
t.start()
else:
light = 'PASS'
t = threading.Thread(target = job)
t.start()
for i in range(20):
print("Main thread:", i, "Status:", light)
time.sleep(1)
t.join()
print("Done.")
您想說的是,當燈亮起後,一定會進入倒數10秒這個程序裡,導致程式暫停10秒不能做更新對吧?
有一個辦法,就是多執行緒,你可以操作看看。