def extract_and_process_tracks(self, tracks):
boxes = tracks[0].boxes.xyxy.cpu()
clss = tracks[0].boxes.cls.cpu().tolist()
track_ids = tracks[0].boxes.id.int().cpu().tolist()
self.annotator = Annotator(self.im0, self.tf, self.names)
self.annotator.draw_region(reg_pts=self.reg_pts, color=(0, 255, 0))
for box, track_id, cls in zip(boxes, track_ids, clss):
self.annotator.box_label(box, label=self.names[cls], color=colors(int(cls), True))
# Draw Tracks
track_line = self.track_history[track_id]
track_line.append((float((box[0] + box[2]) / 2), float((box[0] + box[2]) / 2))
track_line.pop(0) if len(track_line) > 30 else None
if self.draw_tracks:
self.annotator.draw_centroid_and_tracks(track_line,
color=(0, 255, 0),
track_thickness=self.track_thickness)
object_counter.py
提供的ultralytics
可以实现计数工作,track_line.append存储的中心
box(float((box[0] + box[2]) / 2), float((box[0] + box[2]) / 2)
,
但是如何将中心更改为
keypoints
坐标,例如我想数出穿过指定线的动物的头keypoints
。
如何获取
keypoints
中的yolo_pose
坐标?
使用
yolov8*-pose.pt
模型进行对象跟踪任务,我们可以像这样获取关键点坐标:
results = model.track(frame)
keypoints_in_pixel = results[0].keypoints.xy
keypoints_normalized = results[0].keypoints.xyn
在
extract_and_process_tracks()
方法中,它看起来是一样的:
def extract_and_process_tracks(self, tracks):
boxes = tracks[0].boxes.xyxy.cpu()
clss = tracks[0].boxes.cls.cpu().tolist()
track_ids = tracks[0].boxes.id.int().cpu().tolist()
keypoints_in_pixel = results[0].keypoints.xy.cpu()
# the rest of method logic