Python和OpenCV庫實現(xiàn)識別人物出現(xiàn)并鎖定
1. 安裝必要的庫
首先,確保您已安裝以下庫:
- OpenCV: 用于圖像處理和計算機視覺任務
- imutils: 提供一些實用函數(shù),如圖像旋轉、裁剪等
安裝方法如下:
pip install opencv-python pip install imutils
2. 加載和顯示視頻
首先,我們需要導入所需的庫,并加載一個視頻文件。我們將使用OpenCV的VideoCapture
類來加載視頻。
import cv2 import imutils video_path = "path/to/your/video.mp4" # 打開視頻 cap = cv2.VideoCapture(video_path) while True: ret, frame = cap.read() if not ret: break # 縮放以提高處理速度 frame = imutils.resize(frame, width=600) cv2.imshow("Input Video", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()
3. 應用預訓練的人物檢測模型
接下來,我們將使用OpenCV中提供的預訓練模型。這里我們使用MobileNet-SSD模型,因為它在速度和準確性之間達到了很好的平衡。
prototxt_path = "path/to/your/MobileNetSSD_deploy.prototxt" model_path = "path/to/your/MobileNetSSD_deploy.caffemodel" # 加載預訓練模型 net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
4. 在檢測到的人物周圍繪制邊界框
現(xiàn)在,我們將使用預訓練的模型來檢測視頻中的人物,并在檢測到的人物周圍繪制邊界框。
# 設置置信度閾值 confidence_threshold = 0.5 while True: ret, frame = cap.read() if not ret: break frame = imutils.resize(frame, width=600) (h, w) = frame.shape[:2] # 將圖像轉換為blob blob = cv2.dnn.blobFromImage(frame, 0.007843, (w, h), 127.5) net.setInput(blob) detections = net.forward() for i in range(detections.shape[2]): confidence = detections[0, 0, i, 2] if confidence > confidence_threshold: idx = int(detections[0, 0, i, 1]) if idx == 15: # 15 代表人類 box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") # 在檢測到的人物周圍繪制邊界框 cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2) cv2.imshow("Input Video", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break
5. 保存和顯示結果
最后,我們將處理后的視頻保存到磁盤,并在程序完成后關閉所有窗口。
# 創(chuàng)建 VideoWriter 對象以保存處理后的視頻 fourcc = cv2.VideoWriter_fourcc(*"mp4v") out = cv2.VideoWriter("output.mp4", fourcc, 30, (w, h)) while True: ret, frame = cap.read() if not ret: break frame = imutils.resize(frame, width=600) (h, w) = frame.shape[:2] blob = cv2.dnn.blobFromImage(frame, 0.007843, (w, h), 127.5) net.setInput(blob) detections = net.forward() for i in range(detections.shape[2]): confidence = detections[0, 0, i, 2] if confidence > confidence_threshold: idx = int(detections[0, 0, i, 1]) if idx == 15: box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2) # 將幀寫入輸出視頻 out.write(frame) cv2.imshow("Input Video", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() out.release() cv2.destroyAllWindows()
總結:
現(xiàn)在,您應該已經成功地創(chuàng)建了一個可以識別人物出現(xiàn)并將其鎖定的項目。通過運行此代碼,您將能夠在給定的視頻中檢測到人物,并在檢測到的人物周圍繪制邊界框。此外,該程序將處理后的視頻保存到磁盤,以便您以后查看。
本教程展示了如何使用Python和OpenCV庫構建一個簡單的人物識別和鎖定項目。您可以在此基礎上進行擴展,以滿足您的特定需求。例如,您可以嘗試:
- 使用其他預訓練模型,以提高識別準確性或降低計算復雜性。
- 為檢測到的人物添加標簽,例如顯示置信度分數(shù)或人物ID。
- 跟蹤檢測到的人物在視頻中的移動軌跡。
- 將此項目擴展為實時人物識別系統(tǒng),通過攝像頭實時監(jiān)控人物出現(xiàn)。
到此這篇關于Python和OpenCV庫實現(xiàn)識別人物出現(xiàn)并鎖定的文章就介紹到這了,更多相關Python OpenCV識別人物并鎖定內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python PyQt5 Pycharm 環(huán)境搭建及配置詳解(圖文教程)
這篇文章主要介紹了Python PyQt5 Pycharm 環(huán)境搭建及配置詳解,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07python光學仿真學習wxpython創(chuàng)建手速測試程序
這篇文章主要介紹了python光學仿真學習使用wxpython創(chuàng)建一個手速測試程序示例的實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10python報錯: ''list'' object has no attribute ''shape''的解決
這篇文章主要介紹了python報錯: 'list' object has no attribute 'shape'的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07