Ich arbeite an einem menschlichen Erkennungsprogramm mit OpenCV mit Python. Ich habe dieses sehr gute Beispiel gesehen und es auf den Proben gelaufen, die es hatte. Es kann Menschen erkennen, unabhängig davon, wo sie ausgesetzt sind, und hat auch eine anständige Überlappungserkennung sowie verschwommene Bewegung. < /p>
Sie können die Fotos von diesem Link abrufen. Dies ist der Code, den ich verwende: < /p>
# import the necessary packages
from __future__ import print_function
from imutils.object_detection import non_max_suppression
from imutils import paths
import numpy as np
import argparse
import imutils
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True, help="path to images directory")
args = vars(ap.parse_args())
# initialize the HOG descriptor/person detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# loop over the image paths
imagePaths = list(paths.list_images(args["images"]))
for imagePath in imagePaths:
# load the image and resize it to (1) reduce detection time
# and (2) improve detection accuracy
image = cv2.imread(imagePath)
image = imutils.resize(image, width=min(400, image.shape[1]))
orig = image.copy()
# detect people in the image
(rects, weights) = hog.detectMultiScale(image, winStride=(4, 4),
padding=(8, 8), scale=1.05)
# draw the original bounding boxes
for (x, y, w, h) in rects:
cv2.rectangle(orig, (x, y), (x + w, y + h), (0, 0, 255), 2)
# apply non-maxima suppression to the bounding boxes using a
# fairly large overlap threshold to try to maintain overlapping
# boxes that are still people
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)
# show some information on the number of bounding boxes
filename = imagePath[imagePath.rfind("/") + 1:]
print("[INFO] {}: {} original boxes, {} after suppression".format(
filename, len(rects), len(pick)))
# show the output images
cv2.imshow("Before NMS", orig)
cv2.imshow("After NMS", image)
cv2.waitKey(0)
< /code>
Es ist ziemlich einfach. Es geht durch die Bilder, findet die Menschen darin und zeichnet dann Rechtecke. Wenn sich Rechtecke überlappen, werden sie miteinander verbunden, um falsch -positives Aspekte zu verhindern und mehr als eine Person in einer einzelnen Person zu erkennen. < /p>
Wie ich oben erwähnt habe, erkennt der Code keine Personen, wenn Teile ihrer Füße nicht vorhanden sind. < /p>
Gibt es eine Möglichkeit, OpenCV zu erkennen, dass Menschen, die möglicherweise nur einen Teil ihres Körpers haben (Knie hoch, Taille hoch, Brust nach oben), in einem Video vorhanden sind? In meinen Anwendungs -Case -Szenarien denke ich nicht, dass es kritisch sein wird, nach Armen und Beinen zu suchen, solange der Oberkörper und der Kopf vorhanden sind, sollte ich es sehen.
Teilweise menschliche Erkennung in OpenCV 3 ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
Mobile version