Contagem de objectos utilizando Ultralytics YOLO11
O que é a contagem de objectos?
A contagem de objectos com Ultralytics YOLO11 envolve a identificação e contagem precisas de objectos específicos em vídeos e fluxos de câmaras. O YOLO11 destaca-se em aplicações em tempo real, fornecendo uma contagem de objectos eficiente e precisa para vários cenários, como a análise de multidões e a vigilância, graças aos seus algoritmos de ponta e capacidades de aprendizagem profunda.
Ver: Contagem de objectos utilizando Ultralytics YOLOv8 |
Ver: Contagem de objectos por classe utilizando Ultralytics YOLO11 |
Vantagens da contagem de objectos?
- Otimização de recursos: A contagem de objectos facilita a gestão eficiente de recursos, fornecendo contagens precisas e optimizando a atribuição de recursos em aplicações como a gestão de inventário.
- Segurança melhorada: A contagem de objectos melhora a segurança e a vigilância ao seguir e contar entidades com precisão, ajudando na deteção proactiva de ameaças.
- Tomada de decisões informada: A contagem de objectos oferece informações valiosas para a tomada de decisões, optimizando os processos no comércio a retalho, na gestão do tráfego e em vários outros domínios.
Aplicações no mundo real
Logística | Aquacultura |
---|---|
Contagem de pacotes de correia transportadora usando Ultralytics YOLO11 | Contagem de peixes no mar usando Ultralytics YOLO11 |
Contagem de objectos utilizando YOLO11 Exemplo
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video/file.mp4")
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))
# Define region points
# region_points = [(20, 400), (1080, 400)] # For line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # For rectangle region counting
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)] # For polygon region counting
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init Object Counter
counter = solutions.ObjectCounter(
show=True, # Display the output
region=region_points, # Pass region points
model="yolo11n.pt", # model="yolo11n-obb.pt" for object counting using YOLO11 OBB model.
# classes=[0, 2], # If you want to count specific classes i.e person and car with COCO pretrained model.
# show_in=True, # Display in counts
# show_out=True, # Display out counts
# line_width=2, # Adjust the line width for bounding boxes and text display
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = counter.count(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
Argumento ObjectCounter
Aqui está uma tabela com os ObjectCounter
argumentos:
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
model |
str |
None |
Caminho para Ultralytics YOLO Modelo de ficheiro |
region |
list |
[(20, 400), (1260, 400)] |
Lista de pontos que definem a região de contagem. |
line_width |
int |
2 |
Espessura da linha para caixas delimitadoras. |
show |
bool |
False |
Sinalizador para controlar se o fluxo de vídeo deve ser apresentado. |
show_in |
bool |
True |
Sinalizador para controlar se as contagens de entrada devem ser apresentadas no fluxo de vídeo. |
show_out |
bool |
True |
Sinalizador para controlar se as contagens de saída devem ser apresentadas no fluxo de vídeo. |
Argumentos model.track
Argumento | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
str |
None |
Especifica o diretório de origem para imagens ou vídeos. Suporta caminhos de ficheiros e URLs. |
persist |
bool |
False |
Permite o rastreio persistente de objectos entre fotogramas, mantendo as IDs nas sequências de vídeo. |
tracker |
str |
botsort.yaml |
Especifica o algoritmo de seguimento a utilizar, por exemplo, bytetrack.yaml ou botsort.yaml . |
conf |
float |
0.3 |
Define o limiar de confiança para as detecções; valores mais baixos permitem o seguimento de mais objectos, mas podem incluir falsos positivos. |
iou |
float |
0.5 |
Define o limiar 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] só rastreia as classes especificadas. |
verbose |
bool |
True |
Controla a apresentação dos resultados do seguimento, fornecendo uma saída visual dos objectos seguidos. |
FAQ
Como contar objectos num vídeo utilizando Ultralytics YOLO11 ?
Para contar objectos num vídeo utilizando Ultralytics YOLO11 , pode seguir estes passos:
- Importar as bibliotecas necessárias (
cv2
,ultralytics
). - Definir a região de contagem (por exemplo, um polígono, uma linha, etc.).
- Configurar a captura de vídeo e inicializar o contador de objectos.
- Processar cada fotograma para localizar objectos e contá-los dentro da região definida.
Eis um exemplo simples de contagem numa 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 video processing has been successfully completed.")
break
im0 = counter.count(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")
Explore mais configurações e opções na secção Contagem de objectos.
Quais são as vantagens de utilizar Ultralytics YOLO11 para a contagem de objectos?
A utilização de Ultralytics YOLO11 para a contagem de objectos oferece várias vantagens:
- Otimização de recursos: Facilita a gestão eficiente de recursos ao fornecer contagens precisas, ajudando a otimizar a atribuição de recursos em indústrias como a gestão de inventário.
- Segurança melhorada: Melhora a segurança e a vigilância através do rastreio e contagem precisos de entidades, ajudando na deteção proactiva de ameaças.
- Tomada de decisões informada: Oferece informações valiosas para a tomada de decisões, optimizando os processos em domínios como o retalho, a gestão do tráfego e muito mais.
Para aplicações reais e exemplos de código, visite a secção Vantagens da contagem de objectos.
Como é que posso contar classes específicas de objectos utilizando Ultralytics YOLO11 ?
Para contar classes específicas de objectos utilizando Ultralytics YOLO11 , é necessário especificar as classes em que está interessado durante a fase de rastreio. Abaixo está um exemplo de 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 video processing has been successfully completed.")
break
im0 = counter.count(im0)
video_writer.write(im0)
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]
, o que significa que conta os objectos da classe 0
e 2
(por exemplo, pessoa e carro).
Por que razão devo utilizar YOLO11 em vez de outros modelos de deteção de objectos para aplicações em tempo real?
Ultralytics YOLO11 oferece várias vantagens em relação a outros modelos de deteção de objectos, como o Faster R-CNN, o SSD e as versões anteriores do YOLO :
- Velocidade e eficiência: YOLO11 oferece capacidades de processamento em tempo real, tornando-o ideal para aplicações que requerem inferência a alta velocidade, como a vigilância e a condução autónoma.
- Precisão: Proporciona uma precisão de ponta para tarefas de deteção e seguimento de objectos, reduzindo o número de falsos positivos e melhorando a fiabilidade geral do sistema.
- Facilidade de integração: YOLO11 oferece uma integração perfeita com várias plataformas e dispositivos, incluindo dispositivos móveis e de ponta, o que é crucial para aplicações modernas de IA.
- Flexibilidade: Suporta várias tarefas como a deteção de objectos, a segmentação e o seguimento com modelos configuráveis para satisfazer requisitos específicos de casos de utilização.
Consulte Ultralytics YOLO11 Documentation para obter uma análise mais aprofundada das suas funcionalidades e comparações de desempenho.
Posso utilizar o YOLO11 para aplicações avançadas como a análise de multidões e a gestão do tráfego?
Sim, o Ultralytics YOLO11 é perfeitamente adequado para aplicações avançadas, como a análise de multidões e a gestão de tráfego, devido às suas capacidades de deteção em tempo real, escalabilidade e flexibilidade de integração. As suas funcionalidades avançadas permitem o seguimento, contagem e classificação de objectos com elevada precisão em ambientes dinâmicos. Exemplos de casos de utilização incluem:
- Análise de multidões: Monitorizar e gerir grandes aglomerações, garantindo a segurança e optimizando o fluxo de pessoas.
- Gestão de tráfego: Seguir e contar veículos, analisar padrões de tráfego e gerir o congestionamento em tempo real.
Para mais informações e detalhes de implementação, consulte o guia sobre Aplicações do mundo real da contagem de objectos com YOLO11.