最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+opencv3.4.0 實(shí)現(xiàn)HOG+SVM行人檢測的示例代碼

 更新時間:2021年01月28日 10:11:37   作者:bigsuperZX  
這篇文章主要介紹了python+opencv3.4.0 實(shí)現(xiàn)HOG+SVM行人檢測的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

參照opencv官網(wǎng)例程寫了一個基于python的行人檢測程序,實(shí)現(xiàn)了和自帶檢測器基本一致的檢測效果。

網(wǎng)址 :https://docs.opencv.org/3.4.0/d5/d77/train_HOG_8cpp-example.html

opencv版本:3.4.0

訓(xùn)練集和opencv官方用了同一個,可以從http://pascal.inrialpes.fr/data/human/下載,在網(wǎng)頁的最下方“here(970MB處)”,用迅雷下載比較快(500kB/s)。訓(xùn)練集文件比較亂,需要仔細(xì)閱讀下載首頁的文字介紹。注意pos文件夾下的png圖片屬性,它們用opencv無法直接打開,linux系統(tǒng)下也無法顯示,需要用matlab讀取圖片->保存才行,很奇怪的操作。

代碼如下,盡可能與opencv官方例程保持一致,但省略了很多不是很關(guān)鍵的東西。訓(xùn)練一次大概需要十幾分鐘

import cv2
import numpy as np
import random
 
 
def load_images(dirname, amout = 9999):
 img_list = []
 file = open(dirname)
 img_name = file.readline()
 while img_name != '': # 文件尾
  img_name = dirname.rsplit(r'/', 1)[0] + r'/' + img_name.split('/', 1)[1].strip('\n')
  img_list.append(cv2.imread(img_name))
  img_name = file.readline()
  amout -= 1
  if amout <= 0: # 控制讀取圖片的數(shù)量
   break
 return img_list
 
 
# 從每一張沒有人的原始圖片中隨機(jī)裁出10張64*128的圖片作為負(fù)樣本
def sample_neg(full_neg_lst, neg_list, size):
 random.seed(1)
 width, height = size[1], size[0]
 for i in range(len(full_neg_lst)):
  for j in range(10):
   y = int(random.random() * (len(full_neg_lst[i]) - height))
   x = int(random.random() * (len(full_neg_lst[i][0]) - width))
   neg_list.append(full_neg_lst[i][y:y + height, x:x + width])
 return neg_list
 
 
# wsize: 處理圖片大小,通常64*128; 輸入圖片尺寸>= wsize
def computeHOGs(img_lst, gradient_lst, wsize=(128, 64)):
 hog = cv2.HOGDescriptor()
 # hog.winSize = wsize
 for i in range(len(img_lst)):
  if img_lst[i].shape[1] >= wsize[1] and img_lst[i].shape[0] >= wsize[0]:
   roi = img_lst[i][(img_lst[i].shape[0] - wsize[0]) // 2: (img_lst[i].shape[0] - wsize[0]) // 2 + wsize[0], \
     (img_lst[i].shape[1] - wsize[1]) // 2: (img_lst[i].shape[1] - wsize[1]) // 2 + wsize[1]]
   gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
   gradient_lst.append(hog.compute(gray))
 # return gradient_lst
 
 
def get_svm_detector(svm):
 sv = svm.getSupportVectors()
 rho, _, _ = svm.getDecisionFunction(0)
 sv = np.transpose(sv)
 return np.append(sv, [[-rho]], 0)
 
 
# 主程序
# 第一步:計算HOG特征
neg_list = []
pos_list = []
gradient_lst = []
labels = []
hard_neg_list = []
svm = cv2.ml.SVM_create()
pos_list = load_images(r'G:/python_project/INRIAPerson/96X160H96/Train/pos.lst')
full_neg_lst = load_images(r'G:/python_project/INRIAPerson/train_64x128_H96/neg.lst')
sample_neg(full_neg_lst, neg_list, [128, 64])
print(len(neg_list))
computeHOGs(pos_list, gradient_lst)
[labels.append(+1) for _ in range(len(pos_list))]
computeHOGs(neg_list, gradient_lst)
[labels.append(-1) for _ in range(len(neg_list))]
 
# 第二步:訓(xùn)練SVM
svm.setCoef0(0)
svm.setCoef0(0.0)
svm.setDegree(3)
criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 1e-3)
svm.setTermCriteria(criteria)
svm.setGamma(0)
svm.setKernel(cv2.ml.SVM_LINEAR)
svm.setNu(0.5)
svm.setP(0.1) # for EPSILON_SVR, epsilon in loss function?
svm.setC(0.01) # From paper, soft classifier
svm.setType(cv2.ml.SVM_EPS_SVR) # C_SVC # EPSILON_SVR # may be also NU_SVR # do regression task
svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))
 
# 第三步:加入識別錯誤的樣本,進(jìn)行第二輪訓(xùn)練
# 參考 http://masikkk.com/article/SVM-HOG-HardExample/
hog = cv2.HOGDescriptor()
hard_neg_list.clear()
hog.setSVMDetector(get_svm_detector(svm))
for i in range(len(full_neg_lst)):
 rects, wei = hog.detectMultiScale(full_neg_lst[i], winStride=(4, 4),padding=(8, 8), scale=1.05)
 for (x,y,w,h) in rects:
  hardExample = full_neg_lst[i][y:y+h, x:x+w]
  hard_neg_list.append(cv2.resize(hardExample,(64,128)))
computeHOGs(hard_neg_list, gradient_lst)
[labels.append(-1) for _ in range(len(hard_neg_list))]
svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))
 
 
# 第四步:保存訓(xùn)練結(jié)果
hog.setSVMDetector(get_svm_detector(svm))
hog.save('myHogDector.bin')

以下是測試代碼:

import cv2
import numpy as np
 
hog = cv2.HOGDescriptor()
hog.load('myHogDector.bin')
cap = cv2.VideoCapture(0)
while True:
 ok, img = cap.read()
 rects, wei = hog.detectMultiScale(img, winStride=(4, 4),padding=(8, 8), scale=1.05)
 for (x, y, w, h) in rects:
  cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
 cv2.imshow('a', img)
 if cv2.waitKey(1)&0xff == 27: # esc鍵
  break
cv2.destroyAllWindows()

到此這篇關(guān)于python+opencv3.4.0 實(shí)現(xiàn)HOG+SVM行人檢測的示例代碼的文章就介紹到這了,更多相關(guān)opencv HOG+SVM行人檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python動態(tài)演示旋轉(zhuǎn)矩陣的作用詳解

    Python動態(tài)演示旋轉(zhuǎn)矩陣的作用詳解

    一個矩陣我們想讓它通過編程,實(shí)現(xiàn)各種花樣的變化怎么辦呢?下面這篇文章主要給大家介紹了關(guān)于Python動態(tài)演示旋轉(zhuǎn)矩陣的作用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 一篇文章搞懂Python反斜杠的相關(guān)問題

    一篇文章搞懂Python反斜杠的相關(guān)問題

    這篇文章主要給大家介紹了如何通過一篇文章搞懂Python反斜杠的相關(guān)問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python函數(shù)enumerate,operator和Counter使用技巧實(shí)例小結(jié)

    python函數(shù)enumerate,operator和Counter使用技巧實(shí)例小結(jié)

    這篇文章主要介紹了python函數(shù)enumerate,operator和Counter使用技巧,結(jié)合實(shí)例形式總結(jié)分析了python內(nèi)置函數(shù)enumerate,operator和Counter基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • python使用PIL模塊獲取圖片像素點(diǎn)的方法

    python使用PIL模塊獲取圖片像素點(diǎn)的方法

    今天小編就為大家分享一篇python使用PIL模塊獲取圖片像素點(diǎn)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python實(shí)現(xiàn)自動化域名批量解析分享

    Python實(shí)現(xiàn)自動化域名批量解析分享

    這篇文章主要介紹了Python實(shí)現(xiàn)自動化域名批量解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • python利用跳板機(jī)ssh遠(yuǎn)程連接redis的方法

    python利用跳板機(jī)ssh遠(yuǎn)程連接redis的方法

    今天小編就為大家分享一篇python利用跳板機(jī)ssh遠(yuǎn)程連接redis的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 詳解Numpy數(shù)組轉(zhuǎn)置的三種方法T、transpose、swapaxes

    詳解Numpy數(shù)組轉(zhuǎn)置的三種方法T、transpose、swapaxes

    這篇文章主要介紹了詳解Numpy數(shù)組轉(zhuǎn)置的三種方法T、transpose、swapaxes,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • python創(chuàng)建生成器以及訪問的方法詳解

    python創(chuàng)建生成器以及訪問的方法詳解

    這篇文章主要介紹了python創(chuàng)建生成器以及訪問的方法詳解,與列表一次性地將數(shù)據(jù)全都加載到內(nèi)存不同的是,生成器使用推斷加載數(shù)據(jù),每次只推斷出一個對象,在數(shù)據(jù)量比較大時,可以節(jié)省內(nèi)存,需要的朋友可以參考下
    2023-11-11
  • python 判斷文件或文件夾是否存在

    python 判斷文件或文件夾是否存在

    這篇文章主要介紹了python 判斷文件或文件夾是否存在,Python 操作文件時,我們一般要先判斷指定的文件或目錄是否存在,不然容易產(chǎn)生異常,下面我們就來學(xué)習(xí)如何利用python檢查文件是否存在吧
    2022-03-03
  • Python字符串處理之count()方法的使用

    Python字符串處理之count()方法的使用

    這篇文章主要介紹了Python字符串處理之count()方法的使用,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論

肇源县| 双牌县| 静安区| 甘孜| 全南县| 黄山市| 阿勒泰市| 固安县| 罗平县| 盱眙县| 云龙县| 温州市| 兴业县| 密云县| 虞城县| 中宁县| 防城港市| 绥滨县| 大足县| 门头沟区| 尤溪县| 临桂县| 呼图壁县| 丽江市| 昭苏县| 长治市| 马鞍山市| 陆河县| 临汾市| 卢湾区| 铜山县| 仪征市| 安溪县| 龙江县| 旌德县| 天台县| 会同县| 缙云县| 巴林左旗| 大同县| 吉隆县|