以下为代码森林的小哥哥编写的深度学习动体识别项目,非常适合毕业生实战练手!累计编程经验。

代码森林提供Python2—3编程环境,基于Docker容器技术、Kubernetes技术,瞬间创建分配编程实验环境。

  • 无需配置繁琐的编程环境
  • 登录网站立刻开启学习之旅
  • 几秒即可启动云端编程环境
  • 随心实践喜欢的教材、课程
  • 云端储存——实时保存代码到云端
  • 版本管理——实训每步都有迹可循

PC端使用浏览器打开http://www.codeforest.cn/,完成注册登录,选择以下课程——购买课程即可开启学习。

需安装依赖模块如下:

pip install imutils

pip install numpy

pip install argparse

pip install opencv-python

备注:需要在Python3的环境下运行哦,复制上面安装命令命令到命令行安装,或使用pycharm安装。

安装模块完成以后复制代码到pycharmIDE即可运行,代码如下

 # import the necessary packages
from __future__ import print_function  # 确保代码同时在Python2.7和Python3上兼容
from imutils.object_detection import non_max_suppression
from imutils import paths
import numpy as np
import argparse
import imutils   # 安装库pip install imutils ;pip install --upgrade imutils更新版本大于v0.3.1
import cv2

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True, help="path to images directory")
# args = vars(ap.parse_args())

# 初始化我们的行人检测器
hog = cv2.HOGDescriptor()   # 初始化方向梯度直方图描述子
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())  # 设置支持向量机(Support Vector Machine)使得它成为一个预先训练好了的行人检测器
# hog.load('myHogDector3.bin')
# 到这里,我们的OpenCV行人检测器已经完全载入了,我们只需要把它应用到一些图像上
# ---------------------------------------------------------------------------------------------------------
srcTest = '003.mp4'
# srcTest = 'G:/PycharmProjects/PedestrianDetection/videos/001.mp4'
cap = cv2.VideoCapture(srcTest)  # Open video file
# loop over the image paths
while(cap.isOpened()):    # args["images"]
    # load the image and resize it to (1) reduce detection time
    # and (2) improve detection accuracy
    ret, image = cap.read()
    image = imutils.resize(image, width=min(800, image.shape[1]))
    frameForView = image.copy()
    '''
    构造了一个尺度scale=1.05的图像金字塔,以及一个分别在x方向和y方向步长为(4,4)像素大小的滑窗
    scale的尺度设置得越大,在图像金字塔中层的数目就越少,相应的检测速度就越快,但是尺度太大会导致行人出现漏检;
    同样的,如果scale设置得太小,将会急剧的增加图像金字塔的层数,这样不仅耗费计算资源,而且还会急剧地增加检测过程
    中出现的假阳数目(也就是不是行人的被检测成行人)。这表明,scale是在行人检测过程中它是一个重要的参数,。
    '''
# detect people in the image:
    (rects, weights) = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=200.05)
    # 应用非极大抑制方法,通过设置一个阈值来抑制那些重叠的边框
    rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
    pick = non_max_suppression(rects, probs=None, overlapThresh=0.65)

    # draw the final bounding boxes
    for (xA, yA, xB, yB) in pick:
        cv2.rectangle(image, (xA, yA), (xB, yB), (0, 255, 0), 2)

#  捕获异常
    try:
        cv2.imshow('FrameForView', image)
        # cv2.imshow('Frame', frame)

    except Exception as e:
        print(e)
        break

    # Abort and exit with 'Q' or ESC
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()