Skip to content

VisionEye 使用 Ultralytics YOLO11 进行对象映射 🚀

什么是 VisionEye 对象映射?

Ultralytics YOLO11 VisionEye 使计算机能够识别和定位对象,模拟人眼的观察精度。此功能使计算机能够像人眼从特定视角观察细节一样,识别并聚焦于特定对象。

示例

VisionEye 视图 VisionEye 视图与对象跟踪 VisionEye 视图与距离计算
VisionEye 视图使用 Ultralytics YOLO11 进行对象映射 VisionEye 视图使用 Ultralytics YOLO11 进行对象映射与跟踪 VisionEye 视图使用 Ultralytics YOLO11 进行距离计算
VisionEye 视图使用 Ultralytics YOLO11 进行对象映射 VisionEye 视图使用 Ultralytics YOLO11 进行对象映射与跟踪 VisionEye 视图使用 Ultralytics YOLO11 进行距离计算

使用 YOLO11 进行 VisionEye 对象映射

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n.pt")
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("visioneye-pinpoint.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

center_point = (-10, h)

while True:
    ret, im0 = cap.read()
    if not ret:
        print("视频帧为空或视频处理已成功完成。")
        break

    results = model.predict(im0)
    boxes = results[0].boxes.xyxy.cpu()
    clss = results[0].boxes.cls.cpu().tolist()

    annotator = Annotator(im0, line_width=2)

    for box, cls in zip(boxes, clss):
        annotator.box_label(box, label=names[int(cls)], color=colors(int(cls)))
        annotator.visioneye(box, center_point)

    out.write(im0)
    cv2.imshow("visioneye-pinpoint", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

```python import cv2

from ultralytics import YOLO from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n.pt") cap = cv2.VideoCapture("path/to/video/file.mp4") w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("visioneye-pinpoint.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

center_point = (-10, h)

while True: ret, im0 = cap.read() if not ret:

``` print("视频帧为空或视频处理已成功完成。") break

annotator = Annotator(im0, line_width=2)

results = model.track(im0, persist=True) boxes = results[0].boxes.xyxy.cpu()

if results[0].boxes.id is not None: track_ids = results[0].boxes.id.int().cpu().tolist()

for box, track_id in zip(boxes, track_ids):
    annotator.box_label(box, label=str(track_id), color=colors(int(track_id)))
    annotator.visioneye(box, center_point)

out.write(im0) cv2.imshow("visioneye-pinpoint", im0)

if cv2.waitKey(1) & 0xFF == ord("q"): break

out.release() cap.release() cv2.destroyAllWindows()

=== "VisionEye 带距离计算"

    ```python
    import math

    import cv2

    from ultralytics import YOLO
    from ultralytics.utils.plotting import Annotator

    model = YOLO("yolo11n.pt")
    cap = cv2.VideoCapture("Path/to/video/file.mp4")

    w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

    out = cv2.VideoWriter("visioneye-distance-calculation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

    center_point = (0, h)
    pixel_per_meter = 10

    txt_color, txt_background, bbox_clr = ((0, 0, 0), (255, 255, 255), (255, 0, 255))

    while True:
        ret, im0 = cap.read()
        if not ret:
            print("视频帧为空或视频处理已成功完成。")
            break

        annotator = Annotator(im0, line_width=2)

        results = model.track(im0, persist=True)
        boxes = results[0].boxes.xyxy.cpu()

        if results[0].boxes.id is not None:
            track_ids = results[0].boxes.id.int().cpu().tolist()

            for box, track_id in zip(boxes, track_ids):
                annotator.box_label(box, label=str(track_id), color=bbox_clr)
                annotator.visioneye(box, center_point)

                x1, y1 = int((box[0] + box[2]) // 2), int((box[1] + box[3]) // 2)  # 边界框中心点

                distance = (math.sqrt((x1 - center_point[0]) ** 2 + (y1 - center_point[1]) ** 2)) / pixel_per_meter

                text_size, _ = cv2.getTextSize(f"距离: {distance:.2f} m", cv2.FONT_HERSHEY_SIMPLEX, 1.2, 3)
                cv2.rectangle(im0, (x1, y1 - text_size[1] - 10), (x1 + text_size[0] + 10, y1), txt_background, -1)
                cv2.putText(im0, f"距离: {distance:.2f} m", (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 1.2, txt_color, 3)

        out.write(im0)
        cv2.imshow("visioneye-distance-calculation", im0)

        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

    out.release()
    cap.release()
    cv2.destroyAllWindows()
    ```

### `visioneye` 参数

| 名称        | 类型    | 默认值           | 描述                       |
| ----------- | ------- | ---------------- | -------------------------- |
| `color`     | `tuple` | `(235, 219, 11)` | 线条和物体中心点颜色       |
| `pin_color` | `tuple` | `(255, 0, 255)`  | VisionEye 定位点颜色       |

## 注意

如有任何疑问,请随时在 [Ultralytics Issue 部分](https://github.com/ultralytics/ultralytics/issues/new/choose) 或下方讨论部分发布您的问题。

## 常见问题

### 如何开始使用 VisionEye 对象映射与 Ultralytics YOLO11?

要开始使用 VisionEye 对象映射与 Ultralytics YOLO11,首先需要通过 pip 安装 Ultralytics YOLO 包。然后,您可以使用文档中提供的示例代码来设置 [对象检测](https://www.ultralytics.com/glossary/object-detection) 与 VisionEye。以下是一个简单的示例,帮助您入门:

```python
import cv2

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.predict(frame)
    for result in results:
        # 使用结果执行自定义逻辑
        pass

    cv2.imshow("visioneye", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

VisionEye 使用 Ultralytics YOLO11 进行对象跟踪的关键功能是什么?

VisionEye 使用 Ultralytics YOLO11 进行对象跟踪,允许用户跟踪视频帧内对象的移动。关键功能包括:

  1. 实时对象跟踪:随着对象的移动保持跟踪。
  2. 对象识别:利用 YOLO11 强大的检测算法。
  3. 距离计算:计算对象与指定点之间的距离。
  4. 注释与可视化:为跟踪的对象提供视觉标记。

以下是一个简短的代码片段,演示了使用 VisionEye 进行跟踪:

import cv2

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.track(frame, persist=True)
    for result in results:
        # 注释和可视化跟踪
        pass

    cv2.imshow("visioneye-tracking", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

如需全面指南,请访问 VisionEye 对象映射与对象跟踪

如何使用 VisionEye 的 YOLO11 模型计算距离?

使用 VisionEye 和 Ultralytics YOLO11 进行距离计算涉及确定检测到的对象与帧中指定点的距离。这增强了空间分析能力,适用于自动驾驶和监控等应用。

以下是一个简化的示例:

import math

import cv2

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
center_point = (0, 480)  # 示例中心点
pixel_per_meter = 10

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model.track(frame, persist=True)
    for result in results:
        # 计算距离逻辑
        distances = [
            (math.sqrt((box[0] - center_point[0]) ** 2 + (box[1] - center_point[1]) ** 2)) / pixel_per_meter
            for box in results
        ]

    cv2.imshow("visioneye-distance", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

如需详细说明,请参阅 VisionEye 距离计算

为什么我应该使用 Ultralytics YOLO11 进行对象映射和跟踪?

Ultralytics YOLO11 以其速度、准确性 和易于集成而闻名,是对象映射和跟踪的首选。主要优势包括:

  1. 最先进的性能:在实时对象检测中提供高精度。
  2. 灵活性:支持检测、跟踪和距离计算等多种任务。
  3. 社区和支持:广泛的文档和活跃的 GitHub 社区,用于故障排除和增强。
  4. 易于使用:直观的 API 简化了复杂任务,允许快速部署和迭代。

如需了解更多应用和优势,请查看 Ultralytics YOLO11 文档

如何将 VisionEye 与其他 机器学习 工具(如 Comet 或 ClearML)集成?

Ultralytics YOLO11 可以无缝集成各种机器学习工具,如 Comet 和 ClearML,增强实验跟踪、协作和可重复性。请按照 如何使用 YOLOv5 与 Comet将 YOLO11 与 ClearML 集成 的详细指南开始。

如需进一步探索和集成示例,请查看我们的 Ultralytics 集成指南


📅 Created 10 months ago ✏️ Updated 13 days ago

Comments