Add `retry` option to `get_github_assets()` function (#4148)

single_channel
Glenn Jocher 1 year ago committed by GitHub
parent 11d0488bf1
commit 09a0378e81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -410,7 +410,7 @@ All Ultralytics `predict()` calls will return a list of `Results` objects:
| `save_crop()` | `None` | Save cropped predictions to `save_dir/cls/file_name.jpg`. | | `save_crop()` | `None` | Save cropped predictions to `save_dir/cls/file_name.jpg`. |
| `tojson()` | `None` | Convert the object to JSON format. | | `tojson()` | `None` | Convert the object to JSON format. |
For more details see the `Results` class [documentation](../reference/engine/results.md#-results). For more details see the `Results` class [documentation](../reference/engine/results.md).
### Boxes ### Boxes
@ -448,7 +448,7 @@ Here is a table for the `Boxes` class methods and properties, including their na
| `xyxyn` | Property (`torch.Tensor`) | Return the boxes in xyxy format normalized by original image size. | | `xyxyn` | Property (`torch.Tensor`) | Return the boxes in xyxy format normalized by original image size. |
| `xywhn` | Property (`torch.Tensor`) | Return the boxes in xywh format normalized by original image size. | | `xywhn` | Property (`torch.Tensor`) | Return the boxes in xywh format normalized by original image size. |
For more details see the `Boxes` class [documentation](../reference/engine/results.md#boxes). For more details see the `Boxes` class [documentation](../reference/engine/results.md).
### Masks ### Masks
@ -473,7 +473,7 @@ For more details see the `Boxes` class [documentation](../reference/engine/resul
Here is a table for the `Masks` class methods and properties, including their name, type, and description: Here is a table for the `Masks` class methods and properties, including their name, type, and description:
| Name | Type | Description | | Name | Type | Description |
|------------|---------------------------|-----------------------------------------------------------------| |-----------|---------------------------|-----------------------------------------------------------------|
| `cpu()` | Method | Returns the masks tensor on CPU memory. | | `cpu()` | Method | Returns the masks tensor on CPU memory. |
| `numpy()` | Method | Returns the masks tensor as a numpy array. | | `numpy()` | Method | Returns the masks tensor as a numpy array. |
| `cuda()` | Method | Returns the masks tensor on GPU memory. | | `cuda()` | Method | Returns the masks tensor on GPU memory. |
@ -481,7 +481,7 @@ Here is a table for the `Masks` class methods and properties, including their na
| `xyn` | Property (`torch.Tensor`) | A list of normalized segments represented as tensors. | | `xyn` | Property (`torch.Tensor`) | A list of normalized segments represented as tensors. |
| `xy` | Property (`torch.Tensor`) | A list of segments in pixel coordinates represented as tensors. | | `xy` | Property (`torch.Tensor`) | A list of segments in pixel coordinates represented as tensors. |
For more details see the `Masks` class [documentation](../reference/engine/results.md#masks). For more details see the `Masks` class [documentation](../reference/engine/results.md).
### Keypoints ### Keypoints
@ -515,7 +515,7 @@ Here is a table for the `Keypoints` class methods and properties, including thei
| `xy` | Property (`torch.Tensor`) | A list of keypoints in pixel coordinates represented as tensors. | | `xy` | Property (`torch.Tensor`) | A list of keypoints in pixel coordinates represented as tensors. |
| `conf` | Property (`torch.Tensor`) | Returns confidence values of keypoints if available, else None. | | `conf` | Property (`torch.Tensor`) | Returns confidence values of keypoints if available, else None. |
For more details see the `Keypoints` class [documentation](../reference/engine/results.md#keypoints). For more details see the `Keypoints` class [documentation](../reference/engine/results.md).
### Probs ### Probs
@ -540,21 +540,21 @@ For more details see the `Keypoints` class [documentation](../reference/engine/r
Here's a table summarizing the methods and properties for the `Probs` class: Here's a table summarizing the methods and properties for the `Probs` class:
| Name | Type | Description | | Name | Type | Description |
|------------|-------------------------|-------------------------------------------------------------------------| |------------|---------------------------|-------------------------------------------------------------------------|
| `cpu()` | Method | Returns a copy of the probs tensor on CPU memory. | | `cpu()` | Method | Returns a copy of the probs tensor on CPU memory. |
| `numpy()` | Method | Returns a copy of the probs tensor as a numpy array. | | `numpy()` | Method | Returns a copy of the probs tensor as a numpy array. |
| `cuda()` | Method | Returns a copy of the probs tensor on GPU memory. | | `cuda()` | Method | Returns a copy of the probs tensor on GPU memory. |
| `to()` | Method | Returns a copy of the probs tensor with the specified device and dtype. | | `to()` | Method | Returns a copy of the probs tensor with the specified device and dtype. |
| `top1` | Property `int` | Index of the top 1 class. | | `top1` | Property (`int`) | Index of the top 1 class. |
| `top5` | Property `list[int]` | Indices of the top 5 classes. | | `top5` | Property (`list[int]`) | Indices of the top 5 classes. |
| `top1conf` | Property `torch.Tensor` | Confidence of the top 1 class. | | `top1conf` | Property (`torch.Tensor`) | Confidence of the top 1 class. |
| `top5conf` | Property `torch.Tensor` | Confidences of the top 5 classes. | | `top5conf` | Property (`torch.Tensor`) | Confidences of the top 5 classes. |
For more details see the `Probs` class [documentation](../reference/engine/results.md#probs). For more details see the `Probs` class [documentation](../reference/engine/results.md).
## Plotting Results ## Plotting Results
You can the `plot()` method of a `Result` objects to plot predictions. It plots all prediction types (boxes, masks, keypoints, probabilities, etc.) contained in the `Results` object. You can use the `plot()` method of a `Result` objects to visualize predictions. It plots all prediction types (boxes, masks, keypoints, probabilities, etc.) contained in the `Results` object onto a numpy array that can then be shown or saved.
!!! example "Plotting" !!! example "Plotting"
@ -570,8 +570,10 @@ You can the `plot()` method of a `Result` objects to plot predictions. It plots
# Show the results # Show the results
for r in results: for r in results:
im = r.plot() # plot a BGR numpy array of predictions im_array = r.plot() # plot a BGR numpy array of predictions
Image.fromarray(im[..., ::-1]).show() # show RGB image im = Image.fromarray(im[..., ::-1]) # RGB PIL image
im.show() # show image
im.save('results.jpg') # save image
``` ```
The `plot()` method has the following arguments available: The `plot()` method has the following arguments available:

@ -422,7 +422,7 @@ class Exporter:
f'{prefix} WARNING ⚠️ PNNX not found. Attempting to download binary file from ' f'{prefix} WARNING ⚠️ PNNX not found. Attempting to download binary file from '
'https://github.com/pnnx/pnnx/.\nNote PNNX Binary file must be placed in current working directory ' 'https://github.com/pnnx/pnnx/.\nNote PNNX Binary file must be placed in current working directory '
f'or in {ROOT}. See PNNX repo for full installation instructions.') f'or in {ROOT}. See PNNX repo for full installation instructions.')
_, assets = get_github_assets(repo='pnnx/pnnx') _, assets = get_github_assets(repo='pnnx/pnnx', retry=True)
asset = [x for x in assets if ('macos' if MACOS else 'ubuntu' if LINUX else 'windows') in x][0] asset = [x for x in assets if ('macos' if MACOS else 'ubuntu' if LINUX else 'windows') in x][0]
attempt_download_asset(asset, repo='pnnx/pnnx', release='latest') attempt_download_asset(asset, repo='pnnx/pnnx', release='latest')
unzip_dir = Path(asset).with_suffix('') unzip_dir = Path(asset).with_suffix('')

@ -208,8 +208,10 @@ class Results(SimpleClass):
model = YOLO('yolov8n.pt') model = YOLO('yolov8n.pt')
results = model('bus.jpg') # results list results = model('bus.jpg') # results list
for r in results: for r in results:
im = r.plot() # BGR numpy array im_array = r.plot() # plot a BGR numpy array of predictions
Image.fromarray(im[..., ::-1]).show() # show RGB image im = Image.fromarray(im[..., ::-1]) # RGB PIL image
im.show() # show image
im.save('results.jpg') # save image
``` ```
""" """
if img is None and isinstance(self.orig_img, torch.Tensor): if img is None and isinstance(self.orig_img, torch.Tensor):

@ -202,12 +202,16 @@ def safe_download(url,
return unzip_dir return unzip_dir
def get_github_assets(repo='ultralytics/assets', version='latest'): def get_github_assets(repo='ultralytics/assets', version='latest', retry=False):
"""Return GitHub repo tag and assets (i.e. ['yolov8n.pt', 'yolov8s.pt', ...]).""" """Return GitHub repo tag and assets (i.e. ['yolov8n.pt', 'yolov8s.pt', ...])."""
if version != 'latest': if version != 'latest':
version = f'tags/{version}' # i.e. tags/v6.2 version = f'tags/{version}' # i.e. tags/v6.2
response = requests.get(f'https://api.github.com/repos/{repo}/releases/{version}').json() # github api url = f'https://api.github.com/repos/{repo}/releases/{version}'
return response['tag_name'], [x['name'] for x in response['assets']] # tag, assets r = requests.get(url) # github api
if r.status_code != 200 and retry:
r = requests.get(url) # try again
data = r.json()
return data['tag_name'], [x['name'] for x in data['assets']] # tag, assets
def attempt_download_asset(file, repo='ultralytics/assets', release='v0.0.0'): def attempt_download_asset(file, repo='ultralytics/assets', release='v0.0.0'):

Loading…
Cancel
Save