ultralytics 8.0.191 fix yolo checks for missing packages (#5179)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Muhammad Rizwan Munawar <62513924+RizwanMunawar@users.noreply.github.com>
This commit is contained in:
parent
9aaa5d5ed0
commit
525c8b0294
17 changed files with 110 additions and 74 deletions
|
|
@ -52,22 +52,23 @@ When adding new functions or classes, please include a [Google-style docstring](
|
|||
Example Google-style docstring:
|
||||
|
||||
```python
|
||||
def example_function(arg1: int, arg2: str) -> bool:
|
||||
"""Example function that demonstrates Google-style docstrings.
|
||||
def example_function(arg1: int, arg2: int) -> bool:
|
||||
"""
|
||||
Example function that demonstrates Google-style docstrings.
|
||||
|
||||
Args:
|
||||
arg1 (int): The first argument.
|
||||
arg2 (str): The second argument.
|
||||
arg2 (int): The second argument.
|
||||
|
||||
Returns:
|
||||
bool: True if successful, False otherwise.
|
||||
(bool): True if successful, False otherwise.
|
||||
|
||||
Raises:
|
||||
ValueError: If `arg1` is negative or `arg2` is empty.
|
||||
Examples:
|
||||
>>> result = example_function(1, 2) # returns False
|
||||
"""
|
||||
if arg1 < 0 or not arg2:
|
||||
raise ValueError("Invalid input values")
|
||||
return True
|
||||
if arg1 == arg2:
|
||||
return True
|
||||
return False
|
||||
```
|
||||
|
||||
### GitHub Actions CI Tests
|
||||
|
|
|
|||
|
|
@ -32,10 +32,10 @@ The output from Ultralytics trackers is consistent with standard object detectio
|
|||
|
||||
## Real-world Applications
|
||||
|
||||
| Transportation | Retail | Aquaculture |
|
||||
|:-----------------------------------:|:-----------------------:|:-----------:|
|
||||
| Transportation | Retail | Aquaculture |
|
||||
|:----------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------:|
|
||||
|  |  |  |
|
||||
| Vehicle Tracking | People Tracking | Fish Tracking |
|
||||
| Vehicle Tracking | People Tracking | Fish Tracking |
|
||||
|
||||
## Features at a Glance
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ Multithreaded tracking provides the capability to run object tracking on multipl
|
|||
|
||||
In the provided Python script, we make use of Python's `threading` module to run multiple instances of the tracker concurrently. Each thread is responsible for running the tracker on one video file, and all the threads run simultaneously in the background.
|
||||
|
||||
To ensure that each thread receives the correct parameters (the video file and the model to use), we define a function `run_tracker_in_thread` that accepts these parameters and contains the main tracking loop. This function reads the video frame by frame, runs the tracker, and displays the results.
|
||||
To ensure that each thread receives the correct parameters (the video file, the model to use and the file index), we define a function `run_tracker_in_thread` that accepts these parameters and contains the main tracking loop. This function reads the video frame by frame, runs the tracker, and displays the results.
|
||||
|
||||
Two different models are used in this example: `yolov8n.pt` and `yolov8n-seg.pt`, each tracking objects in a different video file. The video files are specified in `video_file1` and `video_file2`.
|
||||
|
||||
|
|
@ -276,44 +276,67 @@ Finally, after all threads have completed their task, the windows displaying the
|
|||
|
||||
```python
|
||||
import threading
|
||||
|
||||
import cv2
|
||||
from ultralytics import YOLO
|
||||
|
||||
|
||||
def run_tracker_in_thread(filename, model, file_index):
|
||||
"""
|
||||
Runs a video file or webcam stream concurrently with the YOLOv8 model using threading.
|
||||
|
||||
This function captures video frames from a given file or camera source and utilizes the YOLOv8 model for object
|
||||
tracking. The function runs in its own thread for concurrent processing.
|
||||
|
||||
def run_tracker_in_thread(filename, model):
|
||||
video = cv2.VideoCapture(filename)
|
||||
frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
|
||||
for _ in range(frames):
|
||||
ret, frame = video.read()
|
||||
if ret:
|
||||
results = model.track(source=frame, persist=True)
|
||||
res_plotted = results[0].plot()
|
||||
cv2.imshow('p', res_plotted)
|
||||
if cv2.waitKey(1) == ord('q'):
|
||||
break
|
||||
Args:
|
||||
filename (str): The path to the video file or the identifier for the webcam/external camera source.
|
||||
model (obj): The YOLOv8 model object.
|
||||
file_index (int): An index to uniquely identify the file being processed, used for display purposes.
|
||||
|
||||
Note:
|
||||
Press 'q' to quit the video display window.
|
||||
"""
|
||||
video = cv2.VideoCapture(filename) # Read the video file
|
||||
|
||||
while True:
|
||||
ret, frame = video.read() # Read the video frames
|
||||
|
||||
# Exit the loop if no more frames in either video
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Track objects in frames if available
|
||||
results = model.track(frame, persist=True)
|
||||
res_plotted = results[0].plot()
|
||||
cv2.imshow(f"Tracking_Stream_{file_index}", res_plotted)
|
||||
|
||||
key = cv2.waitKey(1)
|
||||
if key == ord('q'):
|
||||
break
|
||||
|
||||
# Release video sources
|
||||
video.release()
|
||||
|
||||
|
||||
# Load the models
|
||||
model1 = YOLO('yolov8n.pt')
|
||||
model2 = YOLO('yolov8n-seg.pt')
|
||||
|
||||
|
||||
# Define the video files for the trackers
|
||||
video_file1 = 'path/to/video1.mp4'
|
||||
video_file2 = 'path/to/video2.mp4'
|
||||
|
||||
video_file1 = "path/to/video1.mp4" # Path to video file, 0 for webcam
|
||||
video_file2 = 0 # Path to video file, 0 for webcam, 1 for external camera
|
||||
|
||||
# Create the tracker threads
|
||||
tracker_thread1 = threading.Thread(target=run_tracker_in_thread, args=(video_file1, model1), daemon=True)
|
||||
tracker_thread2 = threading.Thread(target=run_tracker_in_thread, args=(video_file2, model2), daemon=True)
|
||||
|
||||
tracker_thread1 = threading.Thread(target=run_tracker_in_thread, args=(video_file1, model1, 1), daemon=True)
|
||||
tracker_thread2 = threading.Thread(target=run_tracker_in_thread, args=(video_file2, model2, 2), daemon=True)
|
||||
|
||||
# Start the tracker threads
|
||||
tracker_thread1.start()
|
||||
tracker_thread2.start()
|
||||
|
||||
|
||||
# Wait for the tracker threads to finish
|
||||
tracker_thread1.join()
|
||||
tracker_thread2.join()
|
||||
|
||||
|
||||
# Clean up and close windows
|
||||
cv2.destroyAllWindows()
|
||||
```
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ Train YOLOv8n on the COCO128 dataset for 100 epochs at image size 640. For a ful
|
|||
|
||||
### Dataset format
|
||||
|
||||
YOLO detection dataset format can be found in detail in the [Dataset Guide](../datasets/detect/index.md). To convert your existing dataset from other formats( like COCO etc.) to YOLO format, please use [json2yolo tool](https://github.com/ultralytics/JSON2YOLO) by Ultralytics.
|
||||
YOLO detection dataset format can be found in detail in the [Dataset Guide](../datasets/detect/index.md). To convert your existing dataset from other formats (like COCO etc.) to YOLO format, please use [JSON2YOLO](https://github.com/ultralytics/JSON2YOLO) tool by Ultralytics.
|
||||
|
||||
## Val
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ Train a YOLOv8-pose model on the COCO128-pose dataset.
|
|||
|
||||
### Dataset format
|
||||
|
||||
YOLO pose dataset format can be found in detail in the [Dataset Guide](../datasets/pose/index.md). To convert your existing dataset from other formats( like COCO etc.) to YOLO format, please use [json2yolo tool](https://github.com/ultralytics/JSON2YOLO) by Ultralytics.
|
||||
YOLO pose dataset format can be found in detail in the [Dataset Guide](../datasets/pose/index.md). To convert your existing dataset from other formats (like COCO etc.) to YOLO format, please use [JSON2YOLO](https://github.com/ultralytics/JSON2YOLO) tool by Ultralytics.
|
||||
|
||||
## Val
|
||||
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ Train YOLOv8n-seg on the COCO128-seg dataset for 100 epochs at image size 640. F
|
|||
|
||||
### Dataset format
|
||||
|
||||
YOLO segmentation dataset format can be found in detail in the [Dataset Guide](../datasets/segment/index.md). To convert your existing dataset from other formats( like COCO etc.) to YOLO format, please use [json2yolo tool](https://github.com/ultralytics/JSON2YOLO) by Ultralytics.
|
||||
YOLO segmentation dataset format can be found in detail in the [Dataset Guide](../datasets/segment/index.md). To convert your existing dataset from other formats (like COCO etc.) to YOLO format, please use [JSON2YOLO](https://github.com/ultralytics/JSON2YOLO) tool by Ultralytics.
|
||||
|
||||
## Val
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue