Salta para o conteúdo

Previsão de modelos com Ultralytics YOLO

Ultralytics YOLO ecossistema e integrações

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
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, define stream=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=FalseSe 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.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to the image file
source = 'path/to/image.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

Executa a inferência no conteúdo do ecrã atual como uma captura de ecrã.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define current screenshot as source
source = 'screen'

# Run inference on the source
results = model(source)  # list of Results objects

Executa a inferência numa imagem ou vídeo alojado remotamente através de URL.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define remote image or video URL
source = 'https://ultralytics.com/images/bus.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

Executa a inferência numa imagem aberta com Python Imaging Library (PIL).

from PIL import Image
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Open an image using PIL
source = Image.open('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

Executa a inferência numa imagem lida com o OpenCV.

import cv2
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Read an image using OpenCV
source = cv2.imread('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

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.

import torch
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define a path to a CSV file with images, URLs, videos and directories
source = 'path/to/file.csv'

# Run inference on the source
results = model(source)  # list of Results objects

Executa a inferência num ficheiro de vídeo. Utiliza o stream=TrueSe o utilizador tiver uma conta de resultados, pode criar um gerador de objectos de resultados para reduzir a utilização da memória.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to video file
source = 'path/to/video.mp4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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/**/*.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to directory containing images and videos for inference
source = 'path/to/dir'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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=TrueSe quiseres, podes criar um gerador de objectos de Resultados para reduzir a utilização de memória em vídeos longos.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define source as YouTube video URL
source = 'https://youtu.be/LNwODJXcvt4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on 'bus.jpg' with arguments
model.predict('bus.jpg', save=True, imgsz=320, conf=0.5)

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 TrueApresenta 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 NoneSe 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # list of 1 Results object
results = model(['bus.jpg', 'zidane.jpg'])  # list of 2 Results objects

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-seg Segment model
model = YOLO('yolov8n-seg.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-pose Pose model
model = YOLO('yolov8n-pose.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-cls Classify model
model = YOLO('yolov8n-cls.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n-obb.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

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)

Comentários