兩周前收到老師要求參加模式識別比賽,大概內容是檢測視頻中出現的人臉,然后進行數目統計,一開始看到后毫無頭緒的,畢竟這是第一次接觸機器視覺類,完全沒有方向,后來在同學的見一下開始學習OPENCV,也一直幫我除錯程式,在這里也謝謝他了,第一次寫也不知道算不算原創,如果有任何違規的地方請告知我,我會更改和洗掉,謝謝,
開始的學習
大二的時候多少接觸過51,32類的單片機,印象最深的便是基于STM32的OPENMV,可及時呼叫的現成庫和機器視覺的第一次驚艷到了我,就先去網上找了CV的入門視頻,大概明白了編程環境,語言等,雖然同學安利VSCODE,但最后還是用了Pycharm,語言是Python 3.5,當然在這程序中看了不少CSDN上大佬的文章受益匪淺,
功能代碼
借鑒的大佬們的博客:
https://blog.csdn.net/qq_40985985/article/details/108364144
https://blog.csdn.net/sinat_26917383/article/details/70287521
https://blog.csdn.net/haoji007/article/details/106368793/ (原文:https://zhuanlan.zhihu.com/p/80328340)
由于比賽要求特殊(我自己感覺是這樣的),沒有事先給素材進行模型訓練,因此不能跑神經網路等演算法,看了上面大佬們的博客,決定采用OPENCV自帶的級聯器+差值哈希演算法來實作,感謝各位前輩們的付出
import cv2
# 差異值哈希演算法
def dhash(image):
# 將圖片轉化為8*8
image = cv2.resize(image, (9, 8), interpolation=cv2.INTER_CUBIC)
# 將圖片轉化為灰度圖
dhash_str = ''
for i in range(8):
for j in range(8):
if image[i, j] > image[i, j + 1]:
dhash_str = dhash_str + '1'
else:
dhash_str = dhash_str + '0'
result = ''
for i in range(0, 64, 4):
result += ''.join('%x' % int(dhash_str[i: i + 4], 2))
# print("dhash值",result)
return result
if __name__ == '__main__':
faceGascade = cv2.CascadeClassifier("Resources/haarcascade_frontalface_alt2.xml")
# 呼叫級聯器
cap = cv2.VideoCapture("Resources/test1.mp4")
# 捕獲視頻幀
# cap = cv2.imread("Resources/1.png"/>
總結
不斷捕獲人臉的哈希值,然后洗掉重復的并添加新的,通過改變
faces = faceGascade.detectMultiScale(ImgGray2, 1.2, 10)
中1.2和10兩個引數
if m > 6:
j = j+1
還有m,哈希值的重復位數來調整檢測結果,最終達到一個速度和準確度都滿意的值,
由于用于練習的視頻是監控錄像,截圖什么的就不放出了,最后感謝幫我指路和除錯程式的同學,也再次感謝各位前輩,前人種樹后人乘涼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/198155.html
標籤:其他
