Python和OpenCV庫實(shí)現(xiàn)識(shí)別人物出現(xiàn)并鎖定
1. 安裝必要的庫
首先,確保您已安裝以下庫:
- OpenCV: 用于圖像處理和計(jì)算機(jī)視覺任務(wù)
- imutils: 提供一些實(shí)用函數(shù),如圖像旋轉(zhuǎn)、裁剪等
安裝方法如下:
pip install opencv-python pip install imutils
2. 加載和顯示視頻
首先,我們需要導(dǎo)入所需的庫,并加載一個(gè)視頻文件。我們將使用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. 應(yīng)用預(yù)訓(xùn)練的人物檢測模型
接下來,我們將使用OpenCV中提供的預(yù)訓(xùn)練模型。這里我們使用MobileNet-SSD模型,因?yàn)樗谒俣群蜏?zhǔn)確性之間達(dá)到了很好的平衡。
prototxt_path = "path/to/your/MobileNetSSD_deploy.prototxt" model_path = "path/to/your/MobileNetSSD_deploy.caffemodel" # 加載預(yù)訓(xùn)練模型 net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
4. 在檢測到的人物周圍繪制邊界框
現(xiàn)在,我們將使用預(yù)訓(xùn)練的模型來檢測視頻中的人物,并在檢測到的人物周圍繪制邊界框。
# 設(shè)置置信度閾值
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]
# 將圖像轉(zhuǎn)換為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. 保存和顯示結(jié)果
最后,我們將處理后的視頻保存到磁盤,并在程序完成后關(guān)閉所有窗口。
# 創(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()
總結(jié):
現(xiàn)在,您應(yīng)該已經(jīng)成功地創(chuàng)建了一個(gè)可以識(shí)別人物出現(xiàn)并將其鎖定的項(xiàng)目。通過運(yùn)行此代碼,您將能夠在給定的視頻中檢測到人物,并在檢測到的人物周圍繪制邊界框。此外,該程序?qū)⑻幚砗蟮囊曨l保存到磁盤,以便您以后查看。
本教程展示了如何使用Python和OpenCV庫構(gòu)建一個(gè)簡單的人物識(shí)別和鎖定項(xiàng)目。您可以在此基礎(chǔ)上進(jìn)行擴(kuò)展,以滿足您的特定需求。例如,您可以嘗試:
- 使用其他預(yù)訓(xùn)練模型,以提高識(shí)別準(zhǔn)確性或降低計(jì)算復(fù)雜性。
- 為檢測到的人物添加標(biāo)簽,例如顯示置信度分?jǐn)?shù)或人物ID。
- 跟蹤檢測到的人物在視頻中的移動(dòng)軌跡。
- 將此項(xiàng)目擴(kuò)展為實(shí)時(shí)人物識(shí)別系統(tǒng),通過攝像頭實(shí)時(shí)監(jiān)控人物出現(xiàn)。
到此這篇關(guān)于Python和OpenCV庫實(shí)現(xiàn)識(shí)別人物出現(xiàn)并鎖定的文章就介紹到這了,更多相關(guān)Python OpenCV識(shí)別人物并鎖定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本
微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時(shí)間的增長,我們的微信好友列表可能會(huì)變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動(dòng)化腳本,希望對大家有所幫助2024-12-12
Python Pygame實(shí)現(xiàn)落球游戲詳解
本文主要介紹了利用Pygame實(shí)現(xiàn)落球小游戲,即屏幕上落下一個(gè)球,通過鼠標(biāo)移動(dòng),地下的木塊如果接上則加分,否則就減去一命,三條命用完則游戲結(jié)束。感興趣的可以學(xué)習(xí)2022-01-01
python實(shí)現(xiàn)求解列表中元素的排列和組合問題
本篇文章給大家分享使用python的內(nèi)置模塊實(shí)現(xiàn)求解列表中元素的排列和組合問題,具體實(shí)現(xiàn)代碼大家參考下本文2018-03-03
用Python編寫生成樹狀結(jié)構(gòu)的文件目錄的腳本的教程
這篇文章主要介紹了用Python編寫生成樹狀結(jié)構(gòu)的文件目錄的腳本的教程,是一個(gè)利用os模塊下各函數(shù)的簡單實(shí)現(xiàn),需要的朋友可以參考下2015-05-05
Python原始字符串與Unicode字符串操作符用法實(shí)例分析
這篇文章主要介紹了Python原始字符串與Unicode字符串操作符用法,結(jié)合實(shí)例形式分析了Python針對原始字符與Unicode字符的操作符用法,需要的朋友可以參考下2017-07-07
python?如何實(shí)現(xiàn)跳過異常繼續(xù)執(zhí)行
這篇文章主要介紹了python?如何實(shí)現(xiàn)跳過異常繼續(xù)執(zhí)行,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

