【发布时间】:2020-07-10 09:22:36
【问题描述】:
我有一个 python 脚本,它将打开我的网络摄像头并使用 yolov3 检测对象。
但是当这个人靠近一个特定的物体(例如一个架子)时,我需要识别这个人并计算这个人在那个地方呆了多长时间。
我应该怎么做才能让它发挥作用?
【问题讨论】:
-
你能发布一些你的代码吗?没有看到你正在使用的方法,很难推荐一些东西。
我有一个 python 脚本,它将打开我的网络摄像头并使用 yolov3 检测对象。
但是当这个人靠近一个特定的物体(例如一个架子)时,我需要识别这个人并计算这个人在那个地方呆了多长时间。
我应该怎么做才能让它发挥作用?
【问题讨论】:
使用yolov3有点难,所以我建议你使用一个更简单干净的模块,opencv模块。使用哪个模块不是强制性的,但为了获得更好的体验,请使用 OpenCV。
首先安装它:
pip install opencv-python
OpenCV 已经包含许多针对面部、眼睛、微笑等的预训练分类器。我将使用分类器。您也可以尝试使用其他分类器。 您需要下载经过训练的分类器 XML 文件 (haarcascade_frontalface_default.xml),该文件可在 OpenCv 的 GitHub 存储库中找到。将其保存到您的工作位置。 在下面的代码中,我将彩色图像转换为黑白图像。
代码:
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('img', img)
cv2.waitKey()
我们也可以对视频这样做,因为视频实际上每秒有很多帧,所以我们可以把它当作图像,所以对于视频你可以使用以下CODE:
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# To capture video from webcam.
cap = cv2.VideoCapture(0)
# now we will use an infinitive loop to read for each frames per second
while True:
_, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('img', img)
# Stop if escape key is pressed
k = cv2.waitKey(30) & 0xff
if k==27:
break
# Release the VideoCapture object
cap.release()
但是如果你仍然想使用 yolov3,那么请阅读文档,但同样,你可能缺乏一些技能,所以使用 OpenCV 来获得经验。 祝你好运!!
【讨论】: