我在 openCV-Python 上創建了一個 PPE 檢測器,我想根據這個人是否穿著 PPE 的情況顯示影像。下面的代碼打開相機并檢查此人是否佩戴 PPE?
def generate_frames():
while True:
## read the camera frame
success, frame = camera.read()
if not success:
break
else:
image_np, boxes = get_detection(frame)
if boxes[:, -1].tolist().count(0.) > 0: # not wearing PPE
filename = r'\images\cross.png'
else: # wearing PPE
filename = r'\images\thumbs_up.gif'
return filename
以下是索引和影像代碼。
@app.route('/')
def index():
return render_template('index.html')
@app.route('/image')
def image():
return send_file(generate_frames(), mimetype='image/gif')
下面index.html是
<!DOCTYPE html>
<html>
<body>
<h1>Live streaming</h1>
<div>
<img src="{{ url_for('image') }}" width="50%"/>
</div>
</body>
</html>
問題
我無法確定為什么影像顯示不改變?
因此,例如,如果在第一幀中人穿著 PPE,即使在下一幀中人沒有佩戴 PPE,檔案名也不會切換,同樣影像也不會改變。檔案名根據第一幀滿足的條件保持不變。
我嘗試使用yield而不是,return但出現錯誤
AttributeError: 'generator' object has no attribute 'read'
編輯 重繪 影像后確實會更改,但我希望它動態更改。
uj5u.com熱心網友回復:
我不清楚您要做什么,但我相信整個邏輯都被打破了。
看起來您想generate_frames在回圈時生成影像,并且這些影像會在瀏覽器中自動重繪 。這不是事情的運作方式。
您需要找到另一種重繪 機制。可能是使用 JS 對生成影像的路由進行異步呼叫,或者某些頁面自動重繪 機制。
另外,在 中generate_frames,我認為您需要替換break為continue(并且該else陳述句無用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488151.html
