Previsão de modelos com Ultralytics YOLO
Introdução
No mundo da aprendizagem automática e da visão computacional, o processo de dar sentido aos dados visuais é designado por "inferência" ou "previsão". Ultralytics YOLOv8 oferece uma poderosa funcionalidade conhecida como modo de previsão, concebida para inferência de alto desempenho e em tempo real numa vasta gama de fontes de dados.
Observa: Como extrair os resultados do modelo Ultralytics YOLOv8 para projectos personalizados.
Aplicações no mundo real
Fabrico | Desporto | Segurança |
---|---|---|
Deteção de peças sobressalentes de veículos | Deteção de jogadores de futebol | Deteção de quedas de pessoas |
Porquê utilizar Ultralytics YOLO para a inferência?
Eis porque deves considerar o modo de previsão do YOLOv8 para as tuas várias necessidades de inferência:
- Versatilidade: Capaz de fazer inferências em imagens, vídeos e até mesmo em transmissões ao vivo.
- Desempenho: Concebido para processamento em tempo real e a alta velocidade sem sacrificar a precisão.
- Facilidade de utilização: interfaces intuitivas Python e CLI para uma rápida implementação e teste.
- Altamente personalizável: Várias definições e parâmetros para ajustar o comportamento de inferência do modelo de acordo com os teus requisitos específicos.
Principais características do Modo de previsão
YOLOv8O modo de previsão do sistema foi concebido para ser robusto e versátil, apresentando:
- Compatibilidade com várias fontes de dados: Quer os teus dados se apresentem sob a forma de imagens individuais, uma coleção de imagens, ficheiros de vídeo ou fluxos de vídeo em tempo real, o modo de previsão tem tudo o que precisas.
- Modo de transmissão em fluxo contínuo: Utiliza a funcionalidade de transmissão para criar um gerador de memória eficiente de
Results
objectos. Para o ativar, definestream=True
no método de chamada do preditor. - Processamento em lote: A capacidade de processar várias imagens ou quadros de vídeo num único lote, acelerando ainda mais o tempo de inferência.
- Fácil de integrar: Integra-se facilmente com pipelines de dados existentes e outros componentes de software, graças à sua API flexível.
Ultralytics YOLO devolvem uma lista Python de Results
ou um gerador Python eficiente em termos de memória de objectos Results
objectos quando stream=True
é passado para o modelo durante a inferência:
Prevê
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg']) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename='result.jpg') # save to disk
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(['im1.jpg', 'im2.jpg'], stream=True) # return a generator of Results objects
# Process results generator
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename='result.jpg') # save to disk
Fontes de inferência
YOLOv8 pode processar diferentes tipos de fontes de entrada para inferência, como mostra a tabela abaixo. As fontes incluem imagens estáticas, fluxos de vídeo e vários formatos de dados. A tabela também indica se cada fonte pode ser usada no modo de fluxo contínuo com o argumento stream=True
✅. O modo de transmissão em fluxo é benéfico para o processamento de vídeos ou transmissões em direto, uma vez que cria um gerador de resultados em vez de carregar todos os fotogramas na memória.
Dica
Utiliza stream=True
para o processamento de vídeos longos ou grandes conjuntos de dados para gerir eficientemente a memória. Quando stream=False
Se o teu computador não tiver uma memória de dados, os resultados de todos os fotogramas ou pontos de dados são armazenados na memória, o que pode rapidamente aumentar e causar erros de memória para grandes entradas. Em contrapartida, stream=True
utiliza um gerador, que apenas mantém na memória os resultados do quadro ou ponto de dados atual, reduzindo significativamente o consumo de memória e evitando problemas de falta de memória.
Fonte | Argumenta | Tipo | Notas |
---|---|---|---|
imagem | 'image.jpg' |
str ou Path |
Ficheiro de imagem único. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL para uma imagem. |
captura de ecrã | 'screen' |
str |
Captura uma imagem do ecrã. |
PIL | Image.open('im.jpg') |
PIL.Image |
Formato HWC com canais RGB. |
OpenCV | cv2.imread('im.jpg') |
np.ndarray |
Formato HWC com canais BGR uint8 (0-255) . |
numpy | np.zeros((640,1280,3)) |
np.ndarray |
Formato HWC com canais BGR uint8 (0-255) . |
torch | torch.zeros(16,3,320,640) |
torch.Tensor |
Formato BCHW com canais RGB float32 (0.0-1.0) . |
CSV | 'sources.csv' |
str ou Path |
Ficheiro CSV que contém caminhos para imagens, vídeos ou directórios. |
vídeo ✅ | 'video.mp4' |
str ou Path |
Ficheiro de vídeo em formatos como MP4, AVI, etc. |
diretório ✅ | 'path/' |
str ou Path |
Caminho para um diretório que contém imagens ou vídeos. |
glob ✅ | 'path/*.jpg' |
str |
Padrão glob para corresponder a vários ficheiros. Utiliza o * como um caractere curinga. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL para um vídeo do YouTube. |
fluxo ✅ | 'rtsp://example.com/media.mp4' |
str |
URL para protocolos de transmissão como RTSP, RTMP, TCP ou um endereço IP. |
multi-fluxo ✅ | 'list.streams' |
str ou Path |
*.streams ficheiro de texto com um URL de fluxo por linha, ou seja, 8 fluxos serão executados com o tamanho de lote 8. |
Abaixo estão exemplos de código para a utilização de cada tipo de fonte:
Fontes de previsão
Executa a inferência num ficheiro de imagem.
Executa a inferência no conteúdo do ecrã atual como uma captura de ecrã.
Executa a inferência numa imagem ou vídeo alojado remotamente através de URL.
Executa a inferência numa imagem aberta com Python Imaging Library (PIL).
Executa a inferência numa imagem lida com o OpenCV.
Executa a inferência numa imagem representada como uma matriz numpy.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
# Run inference on the source
results = model(source) # list of Results objects
Executa a inferência numa imagem representada como PyTorch tensor .
import torch
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# Run inference on the source
results = model(source) # list of Results objects
Executa a inferência numa coleção de imagens, URLs, vídeos e directórios listados num ficheiro CSV.
Executa a inferência num ficheiro de vídeo. Utiliza o stream=True
Se o utilizador tiver uma conta de resultados, pode criar um gerador de objectos de resultados para reduzir a utilização da memória.
Executa a inferência em todas as imagens e vídeos de um diretório. Para capturar também imagens e vídeos em subdirectórios, utiliza um padrão glob, ou seja path/to/dir/**/*
.
Executa a inferência em todas as imagens e vídeos que correspondem a uma expressão glob com *
caracteres.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Define a glob search for all JPG files in a directory
source = 'path/to/dir/*.jpg'
# OR define a recursive glob search for all JPG files including subdirectories
source = 'path/to/dir/**/*.jpg'
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Executa a inferência num vídeo do YouTube. Utiliza o stream=True
Se quiseres, podes criar um gerador de objectos de Resultados para reduzir a utilização de memória em vídeos longos.
Executa a inferência em fontes de transmissão remotas utilizando os protocolos RTSP, RTMP, TCP e endereço IP. Se forem fornecidos vários fluxos num *.streams
ficheiro de texto, a inferência em lote será executada, ou seja, 8 fluxos serão executados com o tamanho de lote 8, caso contrário, os fluxos individuais serão executados com o tamanho de lote 1.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Single stream with batch-size 1 inference
source = 'rtsp://example.com/media.mp4' # RTSP, RTMP, TCP or IP streaming address
# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = 'path/to/list.streams' # *.streams text file with one streaming address per row
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Argumentos de Inferência
model.predict()
aceita vários argumentos que podem ser passados no momento da inferência para substituir as predefinições:
Exemplo
Argumentos de inferência:
Argumenta | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Especifica a fonte de dados para inferência. Pode ser um caminho de imagem, ficheiro de vídeo, diretório, URL ou ID de dispositivo para feeds em direto. Suporta uma vasta gama de formatos e fontes, permitindo uma aplicação flexível em diferentes tipos de entrada. |
conf |
float |
0.25 |
Define o limite mínimo de confiança para as detecções. Os objectos detectados com confiança abaixo deste limite serão ignorados. Ajustar este valor pode ajudar a reduzir os falsos positivos. |
iou |
float |
0.7 |
Limiar de Intersecção sobre União (IoU) para Supressão Não Máxima (NMS). Valores mais baixos resultam em menos detecções, eliminando caixas sobrepostas, o que é útil para reduzir duplicados. |
imgsz |
int or tuple |
640 |
Define o tamanho da imagem para inferência. Pode ser um único número inteiro 640 para redimensionamento quadrado ou uma tupla (altura, largura). O dimensionamento correto pode melhorar a precisão da deteção e a velocidade de processamento. |
half |
bool |
False |
Permite a inferência de meia-precisão (FP16), que pode acelerar a inferência de modelos em GPUs compatíveis com um impacto mínimo na precisão. |
device |
str |
None |
Especifica o dispositivo para inferência (por exemplo, cpu , cuda:0 ou 0 ). Permite que os usuários selecionem entre CPU, uma GPU específica ou outros dispositivos de computação para a execução do modelo. |
max_det |
int |
300 |
Número máximo de detecções permitidas por imagem. Limita o número total de objectos que o modelo pode detetar numa única inferência, evitando saídas excessivas em cenas densas. |
vid_stride |
int |
1 |
Avanço de fotogramas para entradas de vídeo. Permite saltar fotogramas em vídeos para acelerar o processamento à custa da resolução temporal. Um valor de 1 processa cada fotograma, valores mais altos saltam fotogramas. |
stream_buffer |
bool |
False |
Determina se todos os quadros devem ser armazenados em buffer ao processar fluxos de vídeo (True ), ou se o modelo deve retornar o quadro mais recente (False ). Útil para aplicações em tempo real. |
visualize |
bool |
False |
Ativa a visualização dos recursos do modelo durante a inferência, fornecendo informações sobre o que o modelo está "vendo". Útil para depuração e interpretação do modelo. |
augment |
bool |
False |
Permite o aumento do tempo de teste (TTA) para previsões, melhorando potencialmente a robustez da deteção à custa da velocidade de inferência. |
agnostic_nms |
bool |
False |
Permite a supressão não máxima (NMS) independente de classe, que mescla caixas sobrepostas de classes diferentes. Útil em cenários de deteção de várias classes em que a sobreposição de classes é comum. |
classes |
list[int] |
None |
Filtra as previsões para um conjunto de IDs de classe. Apenas as detecções pertencentes às classes especificadas serão retornadas. Útil para se concentrar em objetos relevantes em tarefas de deteção de várias classes. |
retina_masks |
bool |
False |
Usa máscaras de segmentação de alta resolução, se disponíveis no modelo. Isso pode melhorar a qualidade da máscara para tarefas de segmentação, fornecendo detalhes mais finos. |
embed |
list[int] |
None |
Especifica as camadas a partir das quais se extraem vectores de características ou incorporações. Útil para tarefas a jusante como o agrupamento ou a pesquisa de semelhanças. |
Argumentos de visualização:
Argumenta | Tipo | Predefinição | Descrição |
---|---|---|---|
show |
bool |
False |
Se True Apresenta as imagens ou vídeos anotados numa janela. É útil para obter feedback visual imediato durante o desenvolvimento ou o teste. |
save |
bool |
False |
Permite guardar as imagens ou vídeos anotados num ficheiro. Útil para documentação, análise posterior ou partilha de resultados. |
save_frames |
bool |
False |
Ao processar vídeos, guarda fotogramas individuais como imagens. É útil para extrair fotogramas específicos ou para uma análise detalhada fotograma a fotograma. |
save_txt |
bool |
False |
Guarda os resultados da deteção num ficheiro de texto, seguindo o formato [class] [x_center] [y_center] [width] [height] [confidence] . Útil para a integração com outras ferramentas de análise. |
save_conf |
bool |
False |
Inclui pontuações de confiança nos arquivos de texto salvos. Aumenta o detalhe disponível para pós-processamento e análise. |
save_crop |
bool |
False |
Guarda imagens cortadas de detecções. Útil para aumentar o conjunto de dados, analisar ou criar conjuntos de dados específicos para objectos específicos. |
show_labels |
bool |
True |
Apresenta etiquetas para cada deteção na saída visual. Proporciona uma compreensão imediata dos objectos detectados. |
show_conf |
bool |
True |
Apresenta a pontuação de confiança para cada deteção ao lado da etiqueta. Dá uma ideia da certeza do modelo para cada deteção. |
show_boxes |
bool |
True |
Desenha caixas delimitadoras em torno dos objectos detectados. Essencial para a identificação visual e localização de objectos em imagens ou fotogramas de vídeo. |
line_width |
None or int |
None |
Especifica a largura da linha das caixas delimitadoras. Se None Se não tiveres a certeza, a largura da linha é automaticamente ajustada com base no tamanho da imagem. Proporciona uma personalização visual para maior clareza. |
Formatos de imagem e vídeo
YOLOv8 suporta vários formatos de imagem e vídeo, conforme especificado em ultralytics/data/utils .py. Vê as tabelas abaixo para os sufixos válidos e exemplos de comandos de previsão.
Imagens
A tabela seguinte contém os formatos de imagem válidos para Ultralytics .
Sufixos de imagem | Exemplo de comando Prever | Referência |
---|---|---|
.bmp |
yolo predict source=image.bmp |
Formato de ficheiro Microsoft BMP |
.dng |
yolo predict source=image.dng |
Adobe DNG |
.jpeg |
yolo predict source=image.jpeg |
JPEG |
.jpg |
yolo predict source=image.jpg |
JPEG |
.mpo |
yolo predict source=image.mpo |
Objeto com várias imagens |
.png |
yolo predict source=image.png |
Gráficos de rede portáteis |
.tif |
yolo predict source=image.tif |
Etiqueta Formato de ficheiro de imagem |
.tiff |
yolo predict source=image.tiff |
Etiqueta Formato de ficheiro de imagem |
.webp |
yolo predict source=image.webp |
WebP |
.pfm |
yolo predict source=image.pfm |
Mapa de flutuação portátil |
Vídeos
A tabela seguinte contém os formatos de vídeo válidos para Ultralytics .
Sufixos de vídeo | Exemplo de comando Prever | Referência |
---|---|---|
.asf |
yolo predict source=video.asf |
Formato de sistemas avançados |
.avi |
yolo predict source=video.avi |
Intercalação de áudio e vídeo |
.gif |
yolo predict source=video.gif |
Formato de intercâmbio de gráficos |
.m4v |
yolo predict source=video.m4v |
MPEG-4 Parte 14 |
.mkv |
yolo predict source=video.mkv |
Matroska |
.mov |
yolo predict source=video.mov |
Formato de ficheiro QuickTime |
.mp4 |
yolo predict source=video.mp4 |
MPEG-4 Parte 14 - Wikipédia |
.mpeg |
yolo predict source=video.mpeg |
MPEG-1 Parte 2 |
.mpg |
yolo predict source=video.mpg |
MPEG-1 Parte 2 |
.ts |
yolo predict source=video.ts |
Fluxo de transporte MPEG |
.wmv |
yolo predict source=video.wmv |
Vídeo do Windows Media |
.webm |
yolo predict source=video.webm |
Projeto WebM |
Trabalhar com resultados
Todos Ultralytics predict()
devolverá uma lista de Results
objectos:
Resultados
Results
têm os seguintes atributos:
Atributo | Tipo | Descrição |
---|---|---|
orig_img |
numpy.ndarray |
A imagem original como uma matriz numpy. |
orig_shape |
tuple |
A forma da imagem original no formato (altura, largura). |
boxes |
Boxes, optional |
Um objeto Boxes que contém as caixas delimitadoras da deteção. |
masks |
Masks, optional |
Um objeto Máscaras que contém as máscaras de deteção. |
probs |
Probs, optional |
Um objeto Probs que contém as probabilidades de cada classe para a tarefa de classificação. |
keypoints |
Keypoints, optional |
Um objeto Keypoints que contém os pontos-chave detectados para cada objeto. |
obb |
OBB, optional |
Um objeto OBB que contém caixas delimitadoras orientadas. |
speed |
dict |
Um dicionário de velocidades de pré-processamento, inferência e pós-processamento em milissegundos por imagem. |
names |
dict |
Um dicionário de nomes de classes. |
path |
str |
O caminho para o ficheiro de imagem. |
Results
Os objectos têm os seguintes métodos:
Método | Tipo de retorno | Descrição |
---|---|---|
update() |
None |
Actualiza os atributos caixas, máscaras e probs do objeto Resultados. |
cpu() |
Results |
Devolve uma cópia do objeto Results com todos os tensores na memória da CPU. |
numpy() |
Results |
Devolve uma cópia do objeto Results com todos os tensores como arrays numpy. |
cuda() |
Results |
Retorna uma cópia do objeto Results com todos os tensores na memória da GPU. |
to() |
Results |
Devolve uma cópia do objeto Results com tensores no dispositivo e tipo d especificados. |
new() |
Results |
Devolve um novo objeto Results com a mesma imagem, caminho e nomes. |
plot() |
numpy.ndarray |
Plota os resultados da deteção. Devolve uma matriz numpy da imagem anotada. |
show() |
None |
Mostra os resultados anotados no ecrã. |
save() |
None |
Guarda os resultados anotados num ficheiro. |
verbose() |
str |
Devolve a cadeia de registo para cada tarefa. |
save_txt() |
None |
Guarda as previsões num ficheiro txt. |
save_crop() |
None |
Guarda as previsões cortadas em save_dir/cls/file_name.jpg . |
tojson() |
str |
Converte o objeto para o formato JSON. |
Para mais informações, consulta o Results
documentação da classe.
Caixas
Boxes
pode ser utilizado para indexar, manipular e converter caixas delimitadoras em diferentes formatos.
Caixas
Aqui tens uma tabela para o Boxes
métodos e propriedades da classe, incluindo o seu nome, tipo e descrição:
Nome | Tipo | Descrição |
---|---|---|
cpu() |
Método | Move o objeto para a memória da CPU. |
numpy() |
Método | Converte o objeto em um array numpy. |
cuda() |
Método | Move o objeto para a memória CUDA. |
to() |
Método | Move o objeto para o dispositivo especificado. |
xyxy |
Propriedade (torch.Tensor ) |
Devolve as caixas no formato xyxy. |
conf |
Propriedade (torch.Tensor ) |
Devolve os valores de confiança das caixas. |
cls |
Propriedade (torch.Tensor ) |
Devolve os valores de classe das caixas. |
id |
Propriedade (torch.Tensor ) |
Devolve as IDs de faixa das caixas (se disponíveis). |
xywh |
Propriedade (torch.Tensor ) |
Devolve as caixas no formato xywh. |
xyxyn |
Propriedade (torch.Tensor ) |
Devolve as caixas no formato xyxy normalizado pelo tamanho da imagem original. |
xywhn |
Propriedade (torch.Tensor ) |
Devolve as caixas no formato xywh normalizado pelo tamanho da imagem original. |
Para mais informações, consulta o Boxes
documentação da classe.
Máscaras
Masks
pode ser utilizado para indexar, manipular e converter máscaras em segmentos.
Máscaras
Aqui tens uma tabela para o Masks
métodos e propriedades da classe, incluindo o seu nome, tipo e descrição:
Nome | Tipo | Descrição |
---|---|---|
cpu() |
Método | Devolve as máscaras tensor na memória da CPU. |
numpy() |
Método | Devolve as máscaras tensor como uma matriz numpy. |
cuda() |
Método | Devolve as máscaras tensor na memória da GPU. |
to() |
Método | Devolve as máscaras tensor com o dispositivo e o dtype especificados. |
xyn |
Propriedade (torch.Tensor ) |
Uma lista de segmentos normalizados representados como tensores. |
xy |
Propriedade (torch.Tensor ) |
Uma lista de segmentos em coordenadas de pixéis representados como tensores. |
Para mais informações, consulta o Masks
documentação da classe.
Pontos-chave
Keypoints
pode ser utilizado para indexar, manipular e normalizar coordenadas.
Pontos-chave
Aqui tens uma tabela para o Keypoints
métodos e propriedades da classe, incluindo o seu nome, tipo e descrição:
Nome | Tipo | Descrição |
---|---|---|
cpu() |
Método | Devolve os pontos-chave tensor na memória da CPU. |
numpy() |
Método | Devolve os pontos-chave tensor como uma matriz numpy. |
cuda() |
Método | Devolve os pontos-chave tensor na memória da GPU. |
to() |
Método | Devolve os pontos-chave tensor com o dispositivo e o dtype especificados. |
xyn |
Propriedade (torch.Tensor ) |
Uma lista de pontos-chave normalizados representados como tensores. |
xy |
Propriedade (torch.Tensor ) |
Uma lista de pontos-chave em coordenadas de píxeis representados como tensores. |
conf |
Propriedade (torch.Tensor ) |
Devolve os valores de confiança dos pontos-chave, se disponíveis, caso contrário, nenhum. |
Para mais informações, consulta o Keypoints
documentação da classe.
Provas
Probs
pode ser utilizado para indexar, obter top1
e top5
índices e pontuações de classificação.
Provas
Aqui tens uma tabela que resume os métodos e as propriedades do Probs
classe:
Nome | Tipo | Descrição |
---|---|---|
cpu() |
Método | Devolve uma cópia do probs tensor na memória da CPU. |
numpy() |
Método | Devolve uma cópia do probs tensor como uma matriz numpy. |
cuda() |
Método | Devolve uma cópia dos problemas tensor na memória da GPU. |
to() |
Método | Devolve uma cópia do probs tensor com o dispositivo e o dtype especificados. |
top1 |
Propriedade (int ) |
Índice da classe 1 superior. |
top5 |
Propriedade (list[int] ) |
Índices das 5 primeiras classes. |
top1conf |
Propriedade (torch.Tensor ) |
Confiança na classe 1. |
top5conf |
Propriedade (torch.Tensor ) |
Confidências das 5 primeiras classes. |
Para mais informações, consulta o Probs
documentação da classe.
OBB
OBB
pode ser utilizado para indexar, manipular e converter caixas delimitadoras orientadas para diferentes formatos.
OBB
Aqui tens uma tabela para o OBB
métodos e propriedades da classe, incluindo o seu nome, tipo e descrição:
Nome | Tipo | Descrição |
---|---|---|
cpu() |
Método | Move o objeto para a memória da CPU. |
numpy() |
Método | Converte o objeto em um array numpy. |
cuda() |
Método | Move o objeto para a memória CUDA. |
to() |
Método | Move o objeto para o dispositivo especificado. |
conf |
Propriedade (torch.Tensor ) |
Devolve os valores de confiança das caixas. |
cls |
Propriedade (torch.Tensor ) |
Devolve os valores de classe das caixas. |
id |
Propriedade (torch.Tensor ) |
Devolve as IDs de faixa das caixas (se disponíveis). |
xyxy |
Propriedade (torch.Tensor ) |
Devolve as caixas horizontais no formato xyxy. |
xywhr |
Propriedade (torch.Tensor ) |
Devolve as caixas rodadas no formato xywhr. |
xyxyxyxy |
Propriedade (torch.Tensor ) |
Devolve as caixas rodadas no formato xyxyxyxy. |
xyxyxyxyn |
Propriedade (torch.Tensor ) |
Devolve as caixas rodadas no formato xyxyxyxy normalizado pelo tamanho da imagem. |
Para mais informações, consulta o OBB
documentação da classe.
Traçar resultados
O plot()
método em Results
facilita a visualização das previsões ao sobrepor objectos detectados (como caixas delimitadoras, máscaras, pontos-chave e probabilidades) à imagem original. Este método devolve a imagem anotada como uma matriz NumPy, permitindo uma fácil visualização ou gravação.
Traçar
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')
# Run inference on 'bus.jpg'
results = model(['bus.jpg', 'zidane.jpg']) # results list
# Visualize the results
for i, r in enumerate(results):
# Plot results image
im_bgr = r.plot() # BGR-order numpy array
im_rgb = Image.fromarray(im_bgr[..., ::-1]) # RGB-order PIL image
# Show results to screen (in supported environments)
r.show()
# Save results to disk
r.save(filename=f'results{i}.jpg')
plot()
Parâmetros do método
O plot()
suporta vários argumentos para personalizar a saída:
Argumenta | Tipo | Descrição | Predefinição |
---|---|---|---|
conf |
bool |
Inclui as pontuações de confiança da deteção. | True |
line_width |
float |
Largura da linha das caixas delimitadoras. Escala com o tamanho da imagem se None . |
None |
font_size |
float |
Tamanho do tipo de letra do texto. Escala com o tamanho da imagem se None . |
None |
font |
str |
Nome do tipo de letra para anotações de texto. | 'Arial.ttf' |
pil |
bool |
Devolve a imagem como um objeto PIL Image. | False |
img |
numpy.ndarray |
Usa a imagem original se a imagem original for usada. Usa a imagem original se None . |
None |
im_gpu |
torch.Tensor |
Imagem acelerada por GPU para uma plotagem de máscara mais rápida. Forma: (1, 3, 640, 640). | None |
kpt_radius |
int |
Raio para os pontos-chave desenhados. | 5 |
kpt_line |
bool |
Liga os pontos-chave com linhas. | True |
labels |
bool |
Inclui etiquetas de classe nas anotações. | True |
boxes |
bool |
Sobrepõe caixas delimitadoras na imagem. | True |
masks |
bool |
Sobrepõe máscaras na imagem. | True |
probs |
bool |
Inclui as probabilidades de classificação. | True |
show |
bool |
Apresenta a imagem anotada diretamente utilizando o visualizador de imagens predefinido. | False |
save |
bool |
Guarda a imagem anotada num ficheiro especificado por filename . |
False |
filename |
str |
Caminho e nome do ficheiro para guardar a imagem anotada, se save é True . |
None |
Inferência segura de threads
Garantir a segurança do thread durante a inferência é crucial quando estás a executar vários modelos YOLO em paralelo em diferentes threads. A inferência thread-safe garante que as previsões de cada thread são isoladas e não interferem umas com as outras, evitando condições de corrida e garantindo resultados consistentes e fiáveis.
Ao utilizar modelos YOLO numa aplicação multithread, é importante instanciar objectos de modelo separados para cada thread ou utilizar armazenamento local de thread para evitar conflitos:
Inferência segura de threads
Instancia um único modelo dentro de cada thread para inferência thread-safe:
from ultralytics import YOLO
from threading import Thread
def thread_safe_predict(image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
local_model = YOLO("yolov8n.pt")
results = local_model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()
Para uma análise aprofundada da inferência thread-safe com os modelos YOLO e instruções passo a passo, consulta o nosso YOLO Guia de inferência thread-safe. Este guia fornecerá todas as informações necessárias para evitar armadilhas comuns e garantir que sua inferência multithread funcione sem problemas.
Fonte de transmissão em fluxo contínuo for
-loop
Aqui tens um script Python que utiliza o OpenCV (cv2
) e YOLOv8 para executar a inferência em quadros de vídeo. Este script assume que já instalaste os pacotes necessários (opencv-python
e ultralytics
).
Fluxo para o loop
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO('yolov8n.pt')
# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
Este script executa previsões em cada fotograma do vídeo, visualiza os resultados e apresenta-os numa janela. O ciclo pode ser encerrado premindo 'q'.
Criado em 2023-11-12, Atualizado em 2024-05-03
Autores: glenn-jocher (18), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)