Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實戰(zhàn)案例 之四 簡單行人人體檢測效果
目錄
Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實戰(zhàn)案例 之四 簡單行人人體檢測效果
一、簡單介紹
二、簡單行人人體檢測效果實現(xiàn)原理
三、簡單行人人體檢測效果案例實現(xiàn)簡單步驟
四、注意事項
一、簡單介紹
Python是一種跨平臺的計算機程序設計語言。是一種面向?qū)ο蟮膭討B(tài)類型語言,最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用于獨立的、大型項目的開發(fā)。Python是一種解釋型腳本語言,可以應用于以下領域: Web 和 Internet開發(fā)、科學計算和統(tǒng)計、人工智能、教育、桌面界面開發(fā)、軟件開發(fā)、后端開發(fā)、網(wǎng)絡爬蟲。
這里使用 Python? 基于 OpenCV 進行視覺圖像處理,......
OpenCV 提供了一些已經(jīng)訓練好的級聯(lián)分類器,這些級聯(lián)分類器以XML文件的方式保存在以下路徑中:
...\Python\Lib\site-packages\cv2\data\
OpenCV提供了一些經(jīng)過預訓練的人臉檢測器模型文件,這些文件通常包含在OpenCV的安裝包中。你也可以在OpenCV的官方GitHub頁面或者OpenCV官方網(wǎng)站的下載頁面找到這些模型文件的下載鏈接。
一般來說,你可以從以下位置獲取OpenCV的預訓練模型文件:
??????? OpenCV GitHub Release 頁面:在 Releases · opencv/opencv · GitHub 找到你需要的版本,然后在下載的壓縮包中找到位于 opencv\data 目錄下的人臉檢測器模型文件。
??????? OpenCV 官方網(wǎng)站下載頁面:訪問 OpenCV 官方網(wǎng)站 Releases - OpenCV ,下載你需要的版本,并在相應的壓縮包中查找人臉檢測器模型文件。請確保下載與你使用的OpenCV版本兼容的模型文件。
二、簡單行人人體檢測效果實現(xiàn)原理
行人檢測是計算機視覺中的一個重要任務,旨在從圖像或視頻中檢測和定位人類行人的位置。這項任務通常涉及以下步驟:
-
特征提取:通常使用特征提取算法,如 Haar 特征、HOG(方向梯度直方圖)特征或深度學習模型,從圖像中提取用于識別行人的特征。
-
分類器訓練:使用機器學習技術(shù)(如支持向量機、隨機森林等)或深度學習模型,對提取的特征進行訓練,以區(qū)分行人和非行人的圖像。
-
行人檢測:將訓練好的分類器應用于輸入圖像或視頻流,以識別其中的行人。在此階段,通常會使用滑動窗口技術(shù)在圖像中不同的位置和尺度上進行檢測。
-
定位和標注:一旦檢測到行人,通常會在圖像上繪制矩形框或邊界框來標記他們的位置。
-
性能評估:對行人檢測算法進行評估和性能分析,以確定其在不同數(shù)據(jù)集上的準確性和魯棒性。
行人檢測在許多領域都有重要應用,包括智能監(jiān)控系統(tǒng)、自動駕駛汽車、人機交互、無人機和機器人導航等。
實現(xiàn)原理:
- 使用 OpenCV 加載行人檢測器,這里使用的是 Haar 級聯(lián)分類器。
- 讀取視頻文件的每一幀,并將每一幀轉(zhuǎn)換為灰度圖像。
- 在灰度圖像中使用行人檢測器檢測行人的位置。
- 對于檢測到的每個行人,繪制一個矩形框來標記其位置。
- 將帶有矩形框的圖像顯示出來,直到按下 'q' 鍵退出。
實現(xiàn)方法:
- 加載 Haar 級聯(lián)分類器用于行人檢測。
- 使用
VideoCapture
對象從給定的視頻文件中讀取幀。- 將每一幀轉(zhuǎn)換為灰度圖像,并使用
detectMultiScale
函數(shù)檢測行人。- 對于每個檢測到的行人,使用
rectangle
函數(shù)繪制一個矩形框。- 循環(huán)遍歷直到視頻結(jié)束或者按下 'q' 鍵退出,然后釋放資源。
涉及的一些函數(shù)說明,如下
cv2.CascadeClassifier
:
- 作用:加載 Haar 級聯(lián)分類器,用于行人檢測。
- 參數(shù):
filename
(str):級聯(lián)分類器的文件路徑。- 返回值:
cv2.CascadeClassifier
對象。
cv2.VideoCapture
:
- 作用:創(chuàng)建一個視頻捕獲對象,用于從給定的視頻文件中讀取幀。
- 參數(shù):
filename
(str):要讀取的視頻文件的路徑。- 返回值:
cv2.VideoCapture
對象。
cv2.cvtColor
:
- 作用:將圖像從一種顏色空間轉(zhuǎn)換為另一種顏色空間。
- 參數(shù):
src
(numpy.ndarray):輸入圖像。code
(int):顏色空間轉(zhuǎn)換代碼,如cv2.COLOR_BGR2GRAY
表示從 BGR(彩色)到灰度的轉(zhuǎn)換。- 返回值:轉(zhuǎn)換后的圖像。
detectMultiScale
:
- 作用:在圖像中檢測對象的多個實例,例如人臉或行人。
- 參數(shù):
image
(numpy.ndarray):輸入圖像,灰度圖像通常用于人臉或行人檢測。scaleFactor
(float):每個圖像縮小的比例尺寸。minNeighbors
(int):每個候選矩形應該保留多少個鄰居。minSize
(tuple):對象的最小尺寸。- 返回值:檢測到的對象的矩形列表。
cv2.rectangle
:
- 作用:在圖像上繪制矩形。
- 參數(shù):
img
(numpy.ndarray):輸入圖像。pt1
(tuple):矩形的一個頂點。pt2
(tuple):矩形對角線上的另一個頂點。color
(tuple 或 int):矩形的顏色,可以是 RGB 顏色元組或灰度值。thickness
(int):矩形邊框的厚度。- 返回值:修改后的圖像。
cv2.imshow
:
- 作用:在窗口中顯示圖像。
- 參數(shù):
winname
(str):窗口名稱。mat
(numpy.ndarray):要顯示的圖像。- 返回值:無。
cv2.waitKey
:
- 作用:等待鍵盤輸入。
- 參數(shù):
delay
(int):等待時間,單位為毫秒。- 返回值:按下的鍵的 ASCII 碼。
cv2.destroyAllWindows
:
- 作用:關閉所有 OpenCV 窗口。
- 參數(shù):無。
- 返回值:無。
VideoCapture.release
:
- 作用:釋放視頻捕獲對象的資源。
- 參數(shù):無。
- 返回值:無。
三、簡單行人人體檢測效果案例實現(xiàn)簡單步驟
1、編寫代碼
2、運行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-859077.html
3、具體代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-859077.html
"""
簡單行人人體檢測效果
1、加載 Haar 級聯(lián)分類器用于行人檢測。
2、使用 VideoCapture 對象從給定的視頻文件中讀取幀。
3、將每一幀轉(zhuǎn)換為灰度圖像,并使用 detectMultiScale 函數(shù)檢測行人。
4、對于每個檢測到的行人,使用 rectangle 函數(shù)繪制一個矩形框。
5、循環(huán)遍歷直到視頻結(jié)束或者按下 'q' 鍵退出,然后釋放資源。
"""
import cv2
def detect_and_draw_pedestrians(video_path, scale_factor=1.1, min_neighbors=5, min_size=(30, 30)):
"""
檢測視頻中的行人并繪制矩形框
:param video_path: (str) 輸入視頻文件的路徑
:param scale_factor: (float) 檢測窗口的縮放比例,默認為1.1
:param min_neighbors: (int) 每個候選矩形應該保留的鄰近矩形的數(shù)量閾值,默認為5
:param min_size: (tuple) 行人矩形的最小尺寸,格式為(w, h),默認為(30, 30)
:return:
"""
# 參數(shù)安全校驗
if not isinstance(video_path, str) or not video_path.strip():
raise ValueError("Invalid video path.")
if not isinstance(scale_factor, (int, float)) or scale_factor <= 1.0:
raise ValueError("Scale factor must be a positive float greater than 1.0.")
if not isinstance(min_neighbors, int) or min_neighbors < 0:
raise ValueError("Min neighbors must be a non-negative integer.")
if not isinstance(min_size, tuple) or len(min_size) != 2 or not all(isinstance(val, int) for val in min_size) or \
min_size[0] <= 0 or min_size[1] <= 0:
raise ValueError("Min size must be a tuple of two positive integers.")
# 加載行人檢測器
pedestrian_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')
# 讀取視頻文件
video_capture = cv2.VideoCapture(video_path)
while True:
# 讀取一幀視頻
ret, frame = video_capture.read()
if not ret:
break
# 將圖像轉(zhuǎn)換為灰度圖像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 檢測行人
pedestrians = pedestrian_cascade.detectMultiScale(gray, scaleFactor=scale_factor, minNeighbors=min_neighbors,
minSize=min_size)
# 繪制矩形框
for (x, y, w, h) in pedestrians:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 顯示結(jié)果
cv2.imshow('Pedestrian Detection', frame)
# 按 'q' 鍵退出循環(huán)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 釋放視頻捕獲對象
video_capture.release()
cv2.destroyAllWindows()
# 測試接口函數(shù)
if __name__ == "__main__":
video_path = 'Videos/TwoPeopleRunning.mp4'
detect_and_draw_pedestrians(video_path, scale_factor=1.2, min_neighbors=3, min_size=(50, 50))
四、注意事項
- 確保提供的視頻文件路徑是正確的,視頻文件存在并且格式正確。
- 適當調(diào)整
detectMultiScale
函數(shù)的參數(shù)以達到最佳的行人檢測效果。 - 處理視頻時可能會遇到視頻幀的分辨率、幀率等問題,需要考慮處理效率。
- 為了提高檢測效率,可以在視頻的每幾幀上進行行人檢測,而不是每一幀都進行檢測。
- 釋放視頻捕獲對象和關閉窗口的代碼應該在所有幀都處理完畢后執(zhí)行,以避免資源泄露。
到了這里,關于Python 基于 OpenCV 視覺圖像處理實戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實戰(zhàn)案例 之四 簡單行人人體檢測效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!