VisionEye 使用 Ultralytics YOLO11 进行对象映射 🚀
什么是 VisionEye 对象映射?
Ultralytics YOLO11 VisionEye 使计算机能够识别和定位对象,模拟人眼的观察精度。此功能使计算机能够像人眼从特定视角观察细节一样,识别并聚焦于特定对象。
示例
VisionEye 视图 | VisionEye 视图与对象跟踪 | VisionEye 视图与距离计算 |
---|---|---|
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 进行对象跟踪,允许用户跟踪视频帧内对象的移动。关键功能包括:
- 实时对象跟踪:随着对象的移动保持跟踪。
- 对象识别:利用 YOLO11 强大的检测算法。
- 距离计算:计算对象与指定点之间的距离。
- 注释与可视化:为跟踪的对象提供视觉标记。
以下是一个简短的代码片段,演示了使用 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 以其速度、准确性 和易于集成而闻名,是对象映射和跟踪的首选。主要优势包括:
- 最先进的性能:在实时对象检测中提供高精度。
- 灵活性:支持检测、跟踪和距离计算等多种任务。
- 社区和支持:广泛的文档和活跃的 GitHub 社区,用于故障排除和增强。
- 易于使用:直观的 API 简化了复杂任务,允许快速部署和迭代。
如需了解更多应用和优势,请查看 Ultralytics YOLO11 文档。
如何将 VisionEye 与其他 机器学习 工具(如 Comet 或 ClearML)集成?
Ultralytics YOLO11 可以无缝集成各种机器学习工具,如 Comet 和 ClearML,增强实验跟踪、协作和可重复性。请按照 如何使用 YOLOv5 与 Comet 和 将 YOLO11 与 ClearML 集成 的详细指南开始。
如需进一步探索和集成示例,请查看我们的 Ultralytics 集成指南。