Contagem de Objetos usando Ultralytics YOLO11
O que é a Contagem de Objetos?
A contagem de objetos com Ultralytics YOLO11 envolve a identificação e contagem precisas de objetos específicos em vídeos e transmissões de câmeras. O YOLO11 se destaca em aplicações em tempo real, fornecendo contagem de objetos eficiente e precisa para vários cenários, como análise de multidões e vigilância, graças aos seus algoritmos de última geração e capacidades de aprendizado profundo.
Assista: Como Realizar a Contagem de Objetos em Tempo Real com Ultralytics YOLO11 🍏
Vantagens da Contagem de Objetos
- Otimização de Recursos: A contagem de objetos facilita o gerenciamento eficiente de recursos, fornecendo contagens precisas, otimizando a alocação de recursos em aplicações como gestão de inventário.
- Segurança Aprimorada: A contagem de objetos aprimora a segurança e a vigilância, rastreando e contando entidades com precisão, auxiliando na detecção proativa de ameaças.
- Tomada de Decisão Informada: A contagem de objetos oferece insights valiosos para a tomada de decisões, otimizando processos no varejo, gerenciamento de tráfego e vários outros domínios.
Aplicações no Mundo Real
Logística | Aquicultura |
---|---|
![]() |
![]() |
Contagem de Pacotes na Esteira Transportadora Usando Ultralytics YOLO11 | Contagem de Peixes no Mar usando Ultralytics YOLO11 |
Contagem de Objetos usando Ultralytics YOLO
# Run a counting example
yolo solutions count show=True
# Pass a source video
yolo solutions count source="path/to/video.mp4"
# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# region_points = [(20, 400), (1080, 400)] # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)] # polygon region
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize object counter object
counter = solutions.ObjectCounter(
show=True, # display the output
region=region_points, # pass region points
model="yolo11n.pt", # model="yolo11n-obb.pt" for object counting with OBB model.
# classes=[0, 2], # count specific classes i.e. person and car with COCO pretrained model.
# tracker="botsort.yaml", # choose trackers i.e "bytetrack.yaml"
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
# print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
ObjectCounter
Argumentos
Aqui está uma tabela com o ObjectCounter
argumentos:
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
model |
str |
None |
Caminho para o arquivo do modelo Ultralytics YOLO. |
show_in |
bool |
True |
Flag para controlar se exibe as contagens de entrada no fluxo de vídeo. |
show_out |
bool |
True |
Flag para controlar se exibe as contagens de saída no fluxo de vídeo. |
region |
list |
'[(20, 400), (1260, 400)]' |
Lista de pontos que definem a região de contagem. |
O ObjectCounter
solução permite o uso de vários track
argumentos:
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
Especifica o algoritmo de rastreamento a ser usado, por exemplo, bytetrack.yaml ou botsort.yaml . |
conf |
float |
0.3 |
Define o limite de confiança para detecções; valores mais baixos permitem que mais objetos sejam rastreados, mas podem incluir falsos positivos. |
iou |
float |
0.5 |
Define o limite de Intersecção sobre União (IoU) para filtrar detecções sobrepostas. |
classes |
list |
None |
Filtra os resultados por índice de classe. Por exemplo, classes=[0, 2, 3] rastreia apenas as classes especificadas. |
verbose |
bool |
True |
Controla a exibição dos resultados de rastreamento, fornecendo uma saída visual dos objetos rastreados. |
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. |
Adicionalmente, os argumentos de visualização listados abaixo são suportados:
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
show |
bool |
False |
Se True , exibe as imagens ou vídeos anotados em uma janela. Útil para feedback visual imediato durante o desenvolvimento ou teste. |
line_width |
None or int |
None |
Especifica a largura da linha das caixas delimitadoras. Se None , a largura da linha é ajustada automaticamente com base no tamanho da imagem. Fornece personalização visual para clareza. |
show_conf |
bool |
True |
Exibe o score de confiança para cada detecção junto com o rótulo. Dá uma ideia da certeza do modelo para cada detecção. |
show_labels |
bool |
True |
Exibe rótulos para cada detecção na saída visual. Fornece compreensão imediata dos objetos detectados. |
FAQ
Como conto objetos em um vídeo usando o Ultralytics YOLO11?
Para contar objetos em um vídeo usando Ultralytics YOLO11, você pode seguir estes passos:
- Importe as bibliotecas necessárias (
cv2
,ultralytics
). - Defina a região de contagem (por exemplo, um polígono, linha, etc.).
- Configure a captura de vídeo e inicialize o contador de objetos.
- Processe cada frame para rastrear objetos e contá-los dentro da região definida.
Aqui está um exemplo simples para contagem em uma região:
import cv2
from ultralytics import solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")
Para configurações e opções mais avançadas, consulte a solução RegionCounter para contar objetos em várias regiões simultaneamente.
Quais são as vantagens de usar o Ultralytics YOLO11 para contagem de objetos?
Usar o Ultralytics YOLO11 para contagem de objetos oferece diversas vantagens:
- Otimização de Recursos: Facilita o gerenciamento eficiente de recursos, fornecendo contagens precisas, ajudando a otimizar a alocação de recursos em setores como gestão de inventário.
- Segurança Aprimorada: Aprimora a segurança e a vigilância, rastreando e contando entidades com precisão, auxiliando na detecção proativa de ameaças e em sistemas de segurança.
- Tomada de Decisão Informada: Oferece insights valiosos para a tomada de decisão, otimizando processos em domínios como varejo, gerenciamento de tráfego e muito mais.
- Processamento em Tempo Real: A arquitetura do YOLO11 permite inferência em tempo real, tornando-o adequado para transmissões de vídeo ao vivo e aplicações sensíveis ao tempo.
Para exemplos de implementação e aplicações práticas, explore a solução TrackZone para rastrear objetos em zonas específicas.
Como posso contar classes específicas de objetos usando Ultralytics YOLO11?
Para contar classes específicas de objetos usando Ultralytics YOLO11, você precisa especificar as classes nas quais está interessado durante a fase de rastreamento. Abaixo está um exemplo em Python:
import cv2
from ultralytics import solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
cap = cv2.VideoCapture(video_path)
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
line_points = [(20, 400), (1080, 400)]
counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = counter(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])
Neste exemplo, classes_to_count=[0, 2]
significa que conta objetos da classe 0
e 2
(por exemplo, pessoa e carro no dataset COCO). Você pode encontrar mais informações sobre os índices de classe no Documentação do conjunto de dados COCO.
Por que devo usar YOLO11 em vez de outros modelos de detecção de objetos para aplicações em tempo real?
Ultralytics YOLO11 oferece várias vantagens sobre outros modelos de detecção de objetos, como Faster R-CNN, SSD e versões anteriores do YOLO:
- Velocidade e Eficiência: O YOLO11 oferece capacidades de processamento em tempo real, tornando-o ideal para aplicações que exigem inferência de alta velocidade, como vigilância e direção autônoma.
- Precisão: Oferece precisão de última geração para tarefas de detecção e rastreamento de objetos, reduzindo o número de falsos positivos e melhorando a confiabilidade geral do sistema.
- Facilidade de Integração: O YOLO11 oferece integração perfeita com várias plataformas e dispositivos, incluindo dispositivos móveis e edge devices, o que é crucial para aplicações modernas de IA.
- Flexibilidade: Suporta várias tarefas, como detecção de objetos, segmentação e rastreamento com modelos configuráveis para atender aos requisitos específicos do caso de uso.
Confira a Documentação YOLO11 da Ultralytics para uma análise mais detalhada de seus recursos e comparações de desempenho.
Posso usar YOLO11 para aplicações avançadas como análise de multidões e gestão de tráfego?
Sim, o Ultralytics YOLO11 é perfeitamente adequado para aplicações avançadas, como análise de multidões e gerenciamento de tráfego, devido aos seus recursos de detecção em tempo real, escalabilidade e flexibilidade de integração. Seus recursos avançados permitem rastreamento, contagem e classificação de objetos de alta precisão em ambientes dinâmicos. Casos de uso de exemplo incluem:
- Análise de Multidões: Monitore e gerencie grandes aglomerações, garantindo a segurança e otimizando o fluxo de pessoas com contagem baseada em região.
- Gestão de Tráfego: Rastreie e conte veículos, analise padrões de tráfego e gerencie o congestionamento em tempo real com capacidades de estimativa de velocidade.
- Análise de Varejo: Analise os padrões de movimento dos clientes e as interações com os produtos para otimizar o layout da loja e melhorar a experiência do cliente.
- Automação Industrial: Contar produtos em esteiras transportadoras e monitorar linhas de produção para controle de qualidade e melhorias de eficiência.
Para aplicações mais especializadas, explore as Soluções Ultralytics para um conjunto abrangente de ferramentas projetadas para desafios de visão computacional no mundo real.