如何在flask和yolov5開發的html網頁上成功打開攝像頭並顯示檢測框?
在使用flask框架和yolov5開發html網頁時,打開攝像頭並進行實時檢測是常見的需求。然而,有時會遇到無法成功顯示檢測框的問題。下面我們將逐步分析問題並提供解決方案。
首先來看一下前端代碼:
<div class="row" style="padding:3%;"> <div class="col-lg-6"> <h5 id="輸入數據">輸入數據:</h5> <div> <video id="video" autoplay></video> </div> </div> <div class="col-lg-6"> <h5 id="輸出結果">輸出結果:</h5> <div class="class=" custom-file-container__image-preview> <img src="/static/imghwm/default1.png" data-src="#" class="lazy" id="res" alt="如何在Flask和YOLOv5開發的HTML網頁上解決攝像頭無法顯示檢測框的問題?" > </div> </div> </div> <input type="button" onclick="start()" value="開始識別"> <input type="button" onclick="stop()" value="暫停識別"> <script> function start() { navigator.mediadevices.getusermedia({ video: true }) .then(function (stream) { var video = document.queryselector('video'); video.srcobject = stream; var canvas = document.createelement('canvas'); var ctx = canvas.getcontext('2d'); setinterval(function () { var videowidth = video.videowidth; var videoheight = video.videoheight; canvas.width = videowidth; canvas.height = videoheight; ctx.drawimage(video, 0, 0, videowidth, videoheight); var imagedata = canvas.todataurl('image/png',1); // 壓縮圖片// 發送數據到後端$.ajax({ type: 'post', url: '/image_data', data: { id :$("#uid").val(), image_data: imagedata }, success: function (response) { console.log(response); } }); }, 1000 / 30); // 每秒30幀}) $("#res").attr("src", "/img_feed?id=" $("#uid").val()) .catch(function (error) { console.error(error); }); } </script>
接著是後端代碼:
# 視頻推流def gen(path): cap = cv2.VideoCapture(path) while cap.isOpened(): try: # 記錄開始時間start_time = time.time() # 獲取畫面success, frame = cap.read() if success: im, label, c = d.detect(frame) ret, jpeg = cv2.imencode('.png', im) if ret: frame = jpeg.tobytes() # 計算處理時間elapsed_time = time.time() - start_time print(f"Frame processing time: {elapsed_time:.3f} seconds") yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' frame b'\r\n\r\n') else: break else: break except Exception as e: print(e) continue cap.release() cv2.VideoCapture(path) # 視頻流結果@app.route('/video_feed') def video_feed(): f = request.args.get("f") print(f'upload/{f}') return Response(gen(f'upload/{f}'), mimetype='multipart/x-mixed-replace; boundary=frame') # 前台推流@app.route('/image_data', methods=["POST"]) def image_data(): image_data = request.form.get('image_data') id = request.form.get('id') image_data = io.BytesIO(base64.b64decode(image_data.split(',')[1])) img = Image.open(image_data) # 對圖片進行處理,例如壓縮、濾波等output = io.BytesIO() img.save(output, format='PNG', quality=85) output.seek(0) # 將處理後的圖片保存到服務器img.save(f'upload/temp{id}.png') with open(f'upload/temp{id}.png', 'wb') as f: f.write(output.read()) return "ok"
用戶反饋說在打開攝像頭時無法顯示檢測框,並希望能夠正確識別圖像的置信度。
問題的關鍵在於以下幾點:
-
攝像頭路徑問題:
在cv2.videocapture(path) 中,path 參數需要正確設置。可以是以下幾種情況:- 本地筆記本攝像頭:填寫數字0
- ip攝像頭的rtsp地址
- 本地絕對路徑文件(如mp4, jpeg 等)
但是在你的代碼中,gen(f'upload/{f}') 通過接口傳遞的f 是什麼?這需要明確。
-
報錯信息:
沒有提供具體的報錯信息,這使得問題診斷更加困難。如果有報錯信息,建議提供出來,以便進一步分析。 -
接口調用問題:
你提到的/video_feed 接口在前端代碼中並沒有被調用。需要確保前端正確調用這個接口以顯示檢測結果。
為了解決這個問題,我們可以採取以下步驟:
- 檢查攝像頭路徑:確保cv2.videocapture(path) 中的path 參數設置正確。如果是本地攝像頭,嘗試使用0。如果是文件路徑,確保使用絕對路徑或完整路徑。
- 前端調用後端接口:在前端的start() 函數中,應該調用/video_feed 接口來獲取檢測結果並顯示在img 標籤中。例如,可以在setinterval 函數內添加對/video_feed 的調用,並更新img 標籤的src 屬性。
- 查看報錯信息:如果有任何報錯信息,仔細查看並分析錯誤原因,可能是權限問題、路徑錯誤或其他配置問題。
通過上述步驟,應該能夠解決在打開攝像頭時無法顯示檢測框的問題,並正確識別圖像的置信度。
以上是如何在Flask和YOLOv5開發的HTML網頁上解決攝像頭無法顯示檢測框的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境