2017-09-05 13 views
-1

次のコードを使用して、各人にIDを生成します。部分的には機能しますが、より多くの人が入ってくると、それぞれが同じIDを取得しているという問題があります。完全に3人がいるなら、それは誰にもid 3を割り当てていると言います。私はそれを段階的な順序でユニークにしたい。どうすればこれを整理できますか?密接にあなたのコードで一意の顔IDをリアルタイムに割り当てる

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 

答えて

2

ルック:

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は、それが描画される矩形の各上user_idを書いています。

forループの範囲内では、user_idパラメータを更新していないため、forループはすべての矩形に同じ定数値を書き込みます。

このforループ内に、の矩形に表示する値を増やす必要があります。例えば

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) 

user_idとは異なり、値iforループの反復毎にインクリメントされ、それゆえcv2.putTextはあなたの条件を十分べき、反復ごとにインクリメントされた値を出力します

+0

お寄せください。 –

+0

が答えを更新しました。してください見てください –

+0

しかし、これまで朝から人を数えません –

関連する問題