yolov8deepsort单目标检测
时间: 2025-03-27 20:25:49 浏览: 33
### 结合YOLOv8与DeepSORT进行单目标检测
#### 加载必要的库和初始化模型
为了实现YOLOv8与DeepSORT相结合的目标检测,首先需要安装并导入所需的Python包。这包括`ultralytics`用于加载YOLOv8模型以及`deep_sort_realtime`作为DeepSORT的实现。
```python
from ultralytics import YOLO
import cv2
import numpy as np
from deep_sort_realtime.deepsort_tracker import DeepSort
```
#### 初始化YOLOv8模型
使用预训练好的YOLOv8权重文件来创建一个实例化的YOLOv8模型对象。这里假设已经下载了一个适用于特定应用场景(比如车辆或行人)的最佳权重文件。
```python
model = YOLO('path_to_yolov8_best_weights.pt') # 替换为实际路径
tracker = DeepSort(max_age=30, n_init=2)
```
#### 处理每一帧图像
对于来自视频流中的每一张图片,先调用YOLOv8获取所有可能的对象边界框及其置信度得分;接着过滤掉那些不符合设定阈值的结果;最后把这些高质量候选区域送入到DeepSORT中做进一步处理——即关联历史轨迹形成连续跟踪序列。
```python
def process_frame(frame):
results = model.predict([frame], conf_threshold=0.5)[0].boxes.data.cpu().numpy()
detections = []
for result in results:
bbox = result[:4]
confidence = result[4]
class_id = int(result[-1])
if confidence >= 0.5 and class_id == target_class_index: # 假设只关注某一类别的目标
detection = {
'bbox': tuple(bbox),
'confidence': float(confidence),
'class': str(class_id)
}
detections.append(detection)
tracks = tracker.update_tracks(detections, frame=frame)
return tracks
```
#### 显示带有标签的输出画面
遍历由`process_frame()`返回的所有trackings,在原始画面上绘制矩形边框标记出被锁定住的那个唯一主体,并附加ID编号以便区分不同个体之间的差异性。
```python
for track in tracks:
if not track.is_confirmed():
continue
tracked_bbox = list(map(int, track.to_tlbr()))
id_text = f'ID-{int(track.track_id)}'
color = (0, 255, 0) # Green color for bounding box
thickness = 2
cv2.rectangle(frame, (tracked_bbox[0], tracked_bbox[1]), (tracked_bbox[2], tracked_bbox[3]), color=color, thickness=thickness)
cv2.putText(frame, id_text, org=(tracked_bbox[0]+10, tracked_bbox[1]-10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.5, color=color, thickness=thickness)
```
以上代码片段展示了如何利用YOLOv8完成初步筛选工作之后再交给DeepSORT负责长期稳定地跟随单一感兴趣实体的过程[^1]。值得注意的是,虽然这段程序主要针对静态照片设计,但对于实时摄像机馈送同样适用,只需稍作调整即可适应动态环境下的应用需求[^2]。
阅读全文
相关推荐


















