We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
node_contact_detection.py 122-
if self.is_debug_mode: height, width = color_img.shape[:2] if not hasattr(self, 'action_list'): self.action_list = [] black_img = np.zeros_like(color_img) for i in range(4): self.action_list.append(cv2.resize(black_img.copy(), (width // 2, height // 2))) # すべての人物領域を書く for person in people.pose_key_points_list: bounding_box = person.bounding_box left = np.clip(int(bounding_box.x), 0, width - 1) top = np.clip(int(bounding_box.y), 0, height - 1) right = np.clip(int(bounding_box.x + bounding_box.width), 0, width - 1) bottom = np.clip(int(bounding_box.y + bounding_box.height), 0, height - 1) # 対象の手首の位置 pixel_point = person.point_data[self.LEFT_HAND_INDEX].pixel_point x = np.clip(int(pixel_point.x), 0, width - 1) y = np.clip(int(pixel_point.y), 0, height - 1) cv2.circle(color_img, (x, y), 5, (255, 0, 0), thickness=-1) pixel_point = person.point_data[self.RIGHT_HAND_INDEX].pixel_point x = np.clip(int(pixel_point.x), 0, width - 1) y = np.clip(int(pixel_point.y), 0, height - 1) cv2.circle(color_img, (x, y), 5, (255, 0, 0), thickness=-1) cv2.rectangle(color_img, (left, top), (right, bottom), (255, 0, 0), thickness=3) text_w, text_h = cv2.getTextSize(f'ID : {re.sub(".*_", "", person.people_id)}', cv2.FONT_HERSHEY_PLAIN, 1.5, 2)[0] cv2.rectangle(color_img, (left, top), (left + text_w, top - text_h), (255, 0, 0), -1) cv2.putText(color_img, f'ID : {re.sub(".*_", "", person.people_id)}', (left, top), cv2.FONT_HERSHEY_PLAIN, 1.5, (255, 255, 255), thickness=2) # すべての物体領域を書く for tracked_object in object_list.tracked_object_list: bounding_box = tracked_object.bounding_box left = np.clip(int(bounding_box.x), 0, width - 1) top = np.clip(int(bounding_box.y), 0, height - 1) right = np.clip(int(bounding_box.x + bounding_box.width), 0, width - 1) bottom = np.clip(int(bounding_box.y + bounding_box.height), 0, height - 1) cv2.rectangle(color_img, (left, top), (right, bottom), (0, 128, 255), thickness=3) cv2.putText(color_img, f'ID : {re.sub(".*_", "", tracked_object.object_id)}', (left, top), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 128, 255), thickness=2) for hand, object_item in result_list: person, _, index = hand tracked_object, _ = object_item action = ContactActionEnum.from_tracked_object_action_enum( TrackedObjectActionEnum.value_of(tracked_object.action) ) is_not_touch = action != ContactActionEnum.TOUCH color = self.get_color_from_action(action) # 対象の手首の位置 pixel_point = person.point_data[index].pixel_point x = np.clip(int(pixel_point.x), 0, width - 1) y = np.clip(int(pixel_point.y), 0, height - 1) cv2.putText(color_img, f'Action : {action.value}', (x - 40, y - 10), cv2.FONT_HERSHEY_PLAIN, 1.5, color, thickness=2) if len(result_list) > 0: cv2.putText(color_img, 'Detected', (0, 10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255)) color_img = self.print_fps(color_img) # cv2.imshow('color', color_img) if is_not_touch: # cv2.imshow(f'{people.header.stamp.sec}.{people.header.stamp.nanosec}', color_img) self.action_list[self.action_index] = cv2.resize(color_img.copy(), (width // 2, height // 2)) self.action_index = (self.action_index + 1) % 4 tile_img = cv2.hconcat([color_img, cv2.vconcat([cv2.hconcat([self.action_list[0], self.action_list[1]]), cv2.hconcat([self.action_list[2], self.action_list[3]])])]) cv2.namedWindow('contact_detection', cv2.WINDOW_NORMAL) cv2.imshow('contact_detection', tile_img) cv2.waitKey(1) else: print(f'[{datetime.datetime.now()}] fps : {self.fps}', end='\r')
左側ウインドウ : 単一フレームごとの検知結果をcolor_imgに重ねて表示(動画)
人物(people_trackingノードに基づく) :
物体(object_trackingノードに基づく) :
イベント :
共通 :
右側ウインドウ : 検知結果の静止画(左ウインドウでイベントが発生した際のコピー, 最大4枚まで表示)
物体に関してobject_trackingノードから受け取った情報をすべて表示していることから, contact_detectionノードにおいてbring_in, take_outが出力されない場合がある #48 → 原因1によって本ノードにてbring-in, take-outを検出していないにも関わらず, bounding boxは表示されるため紛らわしい(object_trackingで保存されるBounding Box情報は単一フレームだけではなく, 取りこぼしがないため?)
右側ウインドウでは, 左側ウインドウでBounding Boxやテキスト表示をしたものをそのままコピーしているため, その時に持ち込まれた物体が既にある物体と同じような表示になってしまい, あまり目立たない
右側ウインドウについて, どの画像が最新の情報かわかりにくい
誤検知に際しての意図しない表示 4-1. 間違ったbring-inが発生し, 物体が表示しない位置にBounding Boxが表示される, また滞在し続ける 4-2. ある物体と別の物体のBounding Boxが近い場合(カメラ視点で物体Aの奥に物体Bが存在する等), 持ち去った物体では無い方の物体のBounding Boxが消えてしまう
4に関しては, 検知処理ロジックを修正すべき
また, 1に関して左側ウインドウは*_trackingノードからの情報を用いることで, 継続して人物や特に問題となる物体のBounding Boxを提示することができているが, 本ノードでは物体の滞在情報を有していないため, 新たに物体情報を保持する部分を作らない限り, 同等の機能を実現できない。現状できるのは以下のとおり。 → (従来手法) 物体・人物のBounding Boxを囲い続けることができるが, 特に物体に関して本ノードでBring-Inは検知していないがBounding Boxが出現する。 → (変更可能) contact_detectionで作成した部分のみを用いることで, 検出結果を描画できるもののこれは瞬間的なものであり, 平常時はpeople_tracking同様に人物を囲うBounding Boxしか表示できない。
今回は, 従来手法に乗っ取り, 右側ウインドウの静止画部分で本ノードにてBring-In, Take-outを検知できたものを提示するようにする。
2, 3に関しては対応可能
以下対応内容のリスト
The text was updated successfully, but these errors were encountered:
表示変更前
表示変更後
Sorry, something went wrong.
追加課題の変更後
koukemo
Successfully merging a pull request may close this issue.
contact_detectionノードのdebug windowについて
コードの該当箇所
node_contact_detection.py 122-
ソースコード
現在の表示内容
左側ウインドウ : 単一フレームごとの検知結果をcolor_imgに重ねて表示(動画)
人物(people_trackingノードに基づく) :
物体(object_trackingノードに基づく) :
イベント :
共通 :
右側ウインドウ : 検知結果の静止画(左ウインドウでイベントが発生した際のコピー, 最大4枚まで表示)
考えうる課題
物体に関してobject_trackingノードから受け取った情報をすべて表示していることから, contact_detectionノードにおいてbring_in, take_outが出力されない場合がある #48 → 原因1によって本ノードにてbring-in, take-outを検出していないにも関わらず, bounding boxは表示されるため紛らわしい(object_trackingで保存されるBounding Box情報は単一フレームだけではなく, 取りこぼしがないため?)
右側ウインドウでは, 左側ウインドウでBounding Boxやテキスト表示をしたものをそのままコピーしているため, その時に持ち込まれた物体が既にある物体と同じような表示になってしまい, あまり目立たない
右側ウインドウについて, どの画像が最新の情報かわかりにくい
誤検知に際しての意図しない表示
4-1. 間違ったbring-inが発生し, 物体が表示しない位置にBounding Boxが表示される, また滞在し続ける
4-2. ある物体と別の物体のBounding Boxが近い場合(カメラ視点で物体Aの奥に物体Bが存在する等), 持ち去った物体では無い方の物体のBounding Boxが消えてしまう
解決案
4に関しては, 検知処理ロジックを修正すべき
また, 1に関して左側ウインドウは*_trackingノードからの情報を用いることで,
継続して人物や特に問題となる物体のBounding Boxを提示することができているが,
本ノードでは物体の滞在情報を有していないため, 新たに物体情報を保持する部分を作らない限り, 同等の機能を実現できない。現状できるのは以下のとおり。
→ (従来手法) 物体・人物のBounding Boxを囲い続けることができるが, 特に物体に関して本ノードでBring-Inは検知していないがBounding Boxが出現する。
→ (変更可能) contact_detectionで作成した部分のみを用いることで, 検出結果を描画できるもののこれは瞬間的なものであり, 平常時はpeople_tracking同様に人物を囲うBounding Boxしか表示できない。
今回は, 従来手法に乗っ取り, 右側ウインドウの静止画部分で本ノードにてBring-In, Take-outを検知できたものを提示するようにする。
2, 3に関しては対応可能
以下対応内容のリスト
The text was updated successfully, but these errors were encountered: