2017-09-05 2 views
-1

Ich benutze den folgenden Code, um jeder Person eine ID zu generieren. Es funktioniert teilweise, aber das Problem ist, dass wenn mehr Leute reinkommen, jeder von ihnen die gleiche ID bekommt. Sagen wir, wenn es total 3 Personen gibt, wird die ID 3 jedem zugewiesen. Ich möchte, dass es in einer inkrementellen Reihenfolge einzigartig ist. Wie kann ich das klären?Zuweisen eindeutiger Gesichts-ID Echtzeit

while True: 
    ret, img = cap.read() 

    input_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 

    detected = detector(input_img, 1) 
    current_viewers = len(detected) 
    if current_viewers > last_total_current_viewers: 
     user_id += current_viewers - last_total_current_viewers 
    last_total_current_viewers = current_viewers 

    for i, d in enumerate(detected): 
     x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height() 
     cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2) 
     cv2.putText(img, str(user_id), (x1, y1), font, 0.5, (255, 255, 255), 1, cv2.LINE_AA) 

    cv2.imshow("result", img) 
    key = cv2.waitKey(30) 

    if key == 27: 
     break 

Antwort

2

Blick auf den Code genau:

for i, d in enumerate(detected): 
     x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height() 
     cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2) 
     cv2.putText(img, str(user_id), (x1, y1), font, 0.5, (255, 255, 255), 1, cv2.LINE_AA) 

cv2.putText schreibt user_id auf jedem der Rechtecke, die sie zeichnen wird.

Im Rahmen der Schleife for aktualisieren Sie nicht den user_id Parameter, daher schreibt die for Schleife den gleichen konstanten Wert für alle Rechtecke.

Sie sollten den Wert, den Sie auf dem Rechteck sehen möchten, innerhalb dieser for Schleife selbst erhöhen.

Zum Beispiel:

for i, d in enumerate(detected): 
      x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height() 
      cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2) 
      cv2.putText(img, 'user_'+str(i), (x1, y1), font, 0.5, (255, 255, 255), 1, cv2.LINE_AA) 

nun im Gegensatz zu user_id, i der Wert in jeder Iteration der for Schleife erhöht wird, damit cv2.putText den erhöhten Wert für jede Iteration drucken, die Ihre Anforderung genügen sollte

+0

können Sie bitte elaborate? –

+0

aktualisierte die Antwort. Bitte sehen Sie sich –

+0

an, aber das wird die Person nicht von Morgen bis heute zählen. –