File size: 13,459 Bytes
7370e5c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
---

comments: true
description: Discover VisionEye's object mapping and tracking powered by Ultralytics YOLOv8. Simulate human eye precision, track objects, and calculate distances effortlessly.
keywords: VisionEye, YOLOv8, Ultralytics, object mapping, object tracking, distance calculation, computer vision, AI, machine learning, Python, tutorial
---


# VisionEye View Object Mapping using Ultralytics YOLOv8 🚀

## What is VisionEye Object Mapping?

[Ultralytics YOLOv8](https://github.com/ultralytics/ultralytics/) VisionEye offers the capability for computers to identify and pinpoint objects, simulating the observational precision of the human eye. This functionality enables computers to discern and focus on specific objects, much like the way the human eye observes details from a particular viewpoint.

## Samples

|                                                                        VisionEye View                                                                        |                                                                        VisionEye View With Object Tracking                                                                        |                                                                 VisionEye View With Distance Calculation                                                                  |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| ![VisionEye View Object Mapping using Ultralytics YOLOv8](https://github.com/RizwanMunawar/ultralytics/assets/62513924/7d593acc-2e37-41b0-ad0e-92b4ffae6647) | ![VisionEye View Object Mapping with Object Tracking using Ultralytics YOLOv8](https://github.com/RizwanMunawar/ultralytics/assets/62513924/fcd85952-390f-451e-8fb0-b82e943af89c) | ![VisionEye View with Distance Calculation using Ultralytics YOLOv8](https://github.com/RizwanMunawar/RizwanMunawar/assets/62513924/18c4dafe-a22e-4fa9-a7d4-2bb293562a95) |
|                                                    VisionEye View Object Mapping using Ultralytics YOLOv8                                                    |                                                    VisionEye View Object Mapping with Object Tracking using Ultralytics YOLOv8                                                    |                                                     VisionEye View with Distance Calculation using Ultralytics YOLOv8                                                     |

!!! Example "VisionEye Object Mapping using YOLOv8"

    === "VisionEye Object Mapping"


        ```python

        import cv2


        from ultralytics import YOLO

        from ultralytics.utils.plotting import Annotator, colors


        model = YOLO("yolov8n.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("Video frame is empty or video processing has been successfully completed.")

                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()

        ```


    === "VisionEye Object Mapping with Object Tracking"


        ```python

        import cv2


        from ultralytics import YOLO

        from ultralytics.utils.plotting import Annotator, colors


        model = YOLO("yolov8n.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("Video frame is empty or video processing has been successfully completed.")

                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 with Distance Calculation"


        ```python

        import math


        import cv2


        from ultralytics import YOLO

        from ultralytics.utils.plotting import Annotator


        model = YOLO("yolov8s.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("Video frame is empty or video processing has been successfully completed.")

                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)  # Bounding box centroid


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


                    text_size, _ = cv2.getTextSize(f"Distance: {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: {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` Arguments

| Name        | Type    | Default          | Description                    |
| ----------- | ------- | ---------------- | ------------------------------ |
| `color`     | `tuple` | `(235, 219, 11)` | Line and object centroid color |
| `pin_color` | `tuple` | `(255, 0, 255)`  | VisionEye pinpoint color       |

## Note

For any inquiries, feel free to post your questions in the [Ultralytics Issue Section](https://github.com/ultralytics/ultralytics/issues/new/choose) or the discussion section mentioned below.

## FAQ

### How do I start using VisionEye Object Mapping with Ultralytics YOLOv8?

To start using VisionEye Object Mapping with Ultralytics YOLOv8, first, you'll need to install the Ultralytics YOLO package via pip. Then, you can use the sample code provided in the documentation to set up object detection with VisionEye. Here's a simple example to get you started:

```python

import cv2



from ultralytics import YOLO



model = YOLO("yolov8n.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:

        # Perform custom logic with result

        pass



    cv2.imshow("visioneye", frame)

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

        break



cap.release()

cv2.destroyAllWindows()

```

### What are the key features of VisionEye's object tracking capability using Ultralytics YOLOv8?

VisionEye's object tracking with Ultralytics YOLOv8 allows users to follow the movement of objects within a video frame. Key features include:

1. **Real-Time Object Tracking**: Keeps up with objects as they move.
2. **Object Identification**: Utilizes YOLOv8's powerful detection algorithms.
3. **Distance Calculation**: Calculates distances between objects and specified points.
4. **Annotation and Visualization**: Provides visual markers for tracked objects.

Here's a brief code snippet demonstrating tracking with VisionEye:

```python

import cv2



from ultralytics import YOLO



model = YOLO("yolov8n.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:

        # Annotate and visualize tracking

        pass



    cv2.imshow("visioneye-tracking", frame)

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

        break



cap.release()

cv2.destroyAllWindows()

```

For a comprehensive guide, visit the [VisionEye Object Mapping with Object Tracking](#samples).

### How can I calculate distances with VisionEye's YOLOv8 model?

Distance calculation with VisionEye and Ultralytics YOLOv8 involves determining the distance of detected objects from a specified point in the frame. It enhances spatial analysis capabilities, useful in applications such as autonomous driving and surveillance.

Here's a simplified example:

```python

import math



import cv2



from ultralytics import YOLO



model = YOLO("yolov8s.pt")

cap = cv2.VideoCapture("path/to/video/file.mp4")

center_point = (0, 480)  # Example center point

pixel_per_meter = 10



while True:

    ret, frame = cap.read()

    if not ret:

        break



    results = model.track(frame, persist=True)

    for result in results:

        # Calculate distance logic

        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()

```

For detailed instructions, refer to the [VisionEye with Distance Calculation](#samples).

### Why should I use Ultralytics YOLOv8 for object mapping and tracking?

Ultralytics YOLOv8 is renowned for its speed, accuracy, and ease of integration, making it a top choice for object mapping and tracking. Key advantages include:

1. **State-of-the-art Performance**: Delivers high accuracy in real-time object detection.
2. **Flexibility**: Supports various tasks such as detection, tracking, and distance calculation.
3. **Community and Support**: Extensive documentation and active GitHub community for troubleshooting and enhancements.
4. **Ease of Use**: Intuitive API simplifies complex tasks, allowing for rapid deployment and iteration.

For more information on applications and benefits, check out the [Ultralytics YOLOv8 documentation](https://docs.ultralytics.com/models/yolov8/).

### How can I integrate VisionEye with other machine learning tools like Comet or ClearML?

Ultralytics YOLOv8 can integrate seamlessly with various machine learning tools like Comet and ClearML, enhancing experiment tracking, collaboration, and reproducibility. Follow the detailed guides on [how to use YOLOv5 with Comet](https://www.ultralytics.com/blog/how-to-use-yolov5-with-comet) and [integrate YOLOv8 with ClearML](https://docs.ultralytics.com/integrations/clearml/) to get started.

For further exploration and integration examples, check our [Ultralytics Integrations Guide](https://docs.ultralytics.com/integrations/).