콘텐츠로 건너뛰기

다음을 사용하여 개체 수 계산 Ultralytics YOLO11

오브젝트 카운팅이란 무엇인가요?

Colab에서 개체 계산 열기

를 사용한 객체 카운팅 Ultralytics YOLO11 는 동영상과 카메라 스트림에서 특정 객체를 정확하게 식별하고 카운팅하는 기능을 제공합니다. YOLO11 는 최첨단 알고리즘과 딥러닝 기능 덕분에 군중 분석 및 감시와 같은 다양한 시나리오에서 효율적이고 정확한 객체 카운팅을 제공하는 실시간 애플리케이션에 탁월합니다.



Watch: 클래스별 오브젝트 카운팅을 사용하여 Ultralytics YOLOv8

객체 카운팅의 장점

  • 리소스 최적화: 개체 카운팅은 정확한 개수를 제공하여 재고 관리와 같은 애플리케이션에서 리소스 할당을 최적화함으로써 효율적인 리소스 관리를 용이하게 합니다.
  • 보안 강화: 개체 카운팅은 개체를 정확하게 추적하고 계산하여 사전 위협 탐지를 지원함으로써 보안과 감시를 강화합니다.
  • 정보에 기반한 의사 결정: 객체 카운팅은 의사 결정, 소매업, 교통 관리 및 기타 다양한 영역의 프로세스 최적화를 위한 귀중한 인사이트를 제공합니다.

실제 애플리케이션

물류 양식업
컨베이어 벨트 패킷 계수 사용 Ultralytics YOLO11 바다에서 물고기 수 세기 Ultralytics YOLO11
컨베이어 벨트 패킷 계수 사용 Ultralytics YOLO11 바다에서 물고기 수 세기 Ultralytics YOLO11

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 인수

다음은 표입니다. ObjectCounter 인수를 사용합니다:

인수 유형 기본값 설명
model str None Ultralytics YOLO 모델 파일 경로.
show_in bool True 비디오 스트림에 인 카운트를 표시할지 여부를 제어하는 플래그입니다.
show_out bool True 비디오 스트림에 아웃 카운트를 표시할지 여부를 제어하는 플래그입니다.
region list [(20, 400), (1260, 400)] 계산 영역을 정의하는 포인트 목록입니다.

그리고 ObjectCounter 솔루션을 사용하면 여러 track 인수를 사용합니다:

인수 유형 기본값 설명
tracker str 'botsort.yaml' 사용할 추적 알고리즘을 지정합니다(예, bytetrack.yaml 또는 botsort.yaml.
conf float 0.3 탐지 신뢰 임계값을 설정합니다. 값이 낮을수록 더 많은 개체를 추적할 수 있지만 오탐이 포함될 수 있습니다.
iou float 0.5 중복 감지를 필터링하기 위한 IoU( Intersection over Union ) 임계값을 설정합니다.
classes list None 클래스 인덱스별로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3] 지정된 클래스만 추적합니다.
verbose bool True 추적 결과의 표시를 제어하여 추적된 개체의 시각적 출력을 제공합니다.
device str None 추론할 장치를 지정합니다(예, cpu, cuda:0 또는 0). 사용자가 모델 실행을 위해 CPU, 특정 GPU, 또는 기타 컴퓨팅 장치 중에서 선택할 수 있습니다.

또한 아래 나열된 시각화 인수가 지원됩니다:

인수 유형 기본값 설명
show bool False 만약 True를 클릭하면 주석이 달린 이미지 또는 동영상이 창에 표시됩니다. 개발 또는 테스트 중에 즉각적인 시각적 피드백을 받을 때 유용합니다.
line_width None or int None 경계 상자의 선 너비를 지정합니다. 만약 None를 클릭하면 이미지 크기에 따라 선 너비가 자동으로 조정됩니다. 선명도를 위한 시각적 사용자 지정 기능을 제공합니다.

자주 묻는 질문

Ultralytics YOLO11 을 사용하여 동영상에서 객체를 계산하려면 어떻게 하나요?

Ultralytics YOLO11 을 사용하여 동영상에서 개체를 카운트하려면 다음 단계를 따르세요:

  1. 필요한 라이브러리 가져오기(cv2, ultralytics).
  2. 카운팅 영역(예: 다각형, 선 등)을 정의합니다.
  3. 동영상 캡처를 설정하고 개체 카운터를 초기화합니다.
  4. 각 프레임을 처리하여 객체를 추적하고 정의된 영역 내에서 객체를 계산합니다.

다음은 한 지역에서 계산하는 간단한 예입니다:

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")

고급 구성 및 옵션에 대해서는 여러 지역의 개체를 동시에 카운팅하는 RegionCounter 솔루션을 확인하세요.

객체 카운팅에 Ultralytics YOLO11 을 사용하면 어떤 이점이 있나요?

객체 카운팅에 Ultralytics YOLO11 을 사용하면 몇 가지 장점이 있습니다:

  1. 리소스 최적화: 정확한 카운트를 제공하여 재고 관리와 같은 산업에서 리소스 할당을 최적화하여 효율적인 리소스 관리를 용이하게 합니다.
  2. 보안 강화: 개체를 정확하게 추적하고 계산하여 사전 위협 탐지 및 보안 시스템을 지원함으로써 보안 및 감시를 강화합니다.
  3. 정보에 기반한 의사 결정: 리테일, 트래픽 관리 등의 영역에서 의사 결정을 위한 귀중한 인사이트를 제공하여 프로세스를 최적화합니다.
  4. 실시간 처리: YOLO11 아키텍처는 실시간 추론이 가능하여 라이브 비디오 스트림과 시간에 민감한 애플리케이션에 적합합니다.

구현 예제와 실제 적용 사례는 특정 영역에서 객체를 추적하는 TrackZone 솔루션을 살펴보세요.

Ultralytics YOLO11 을 사용하여 특정 클래스 오브젝트를 계산하려면 어떻게 해야 하나요?

Ultralytics YOLO11 을 사용하여 특정 클래스 오브젝트를 카운트하려면 추적 단계에서 관심 있는 클래스를 지정해야 합니다. 아래는 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])

이 예제에서는 classes_to_count=[0, 2] 클래스의 객체를 계산한다는 의미입니다. 0 그리고 2 (예: COCO 데이터 집합의 사람 및 자동차). 클래스 인덱스에 대한 자세한 내용은 다음에서 확인할 수 있습니다. COCO 데이터 세트 문서.

실시간 애플리케이션에 다른 객체 감지 모델 대신 YOLO11 을 사용해야 하는 이유는 무엇인가요?

Ultralytics YOLO11 Faster R-CNN, SSD 및 이전 YOLO 버전과 같은 다른 객체 감지 모델에 비해 몇 가지 장점을 제공합니다:

  1. 속도와 효율성: YOLO11 실시간 처리 기능을 제공하므로 감시 및 자율 주행과 같이 고속 추론이 필요한 애플리케이션에 이상적입니다.
  2. 정확도: 물체 감지 및 추적 작업에 최첨단 정확도를 제공하여 오탐지 횟수를 줄이고 전반적인 시스템 안정성을 향상시킵니다.
  3. 통합의 용이성: YOLO11 모바일 및 엣지 디바이스를 비롯한 다양한 플랫폼 및 디바이스와의 원활한 통합을 제공하며, 이는 최신 AI 애플리케이션에 필수적인 요소입니다.
  4. 유연성: 특정 사용 사례 요구 사항을 충족하도록 구성 가능한 모델을 통해 객체 감지, 세분화, 추적과 같은 다양한 작업을 지원합니다.

기능 및 성능 비교에 대한 자세한 내용은 Ultralytics YOLO11 설명서를 참조하세요.

군중 분석 및 트래픽 관리와 같은 고급 애플리케이션에 YOLO11 을 사용할 수 있나요?

예, Ultralytics YOLO11 은 실시간 감지 기능, 확장성 및 통합 유연성으로 인해 군중 분석 및 트래픽 관리와 같은 고급 애플리케이션에 완벽하게 적합합니다. 고급 기능을 통해 동적인 환경에서 고정밀 객체 추적, 카운팅 및 분류가 가능합니다. 사용 사례의 예는 다음과 같습니다:

  • 군중 분석: 대규모 모임을 모니터링하고 관리하여 안전을 보장하고 지역 기반 집계로 군중 흐름을 최적화하세요.
  • 교통 관리: 속도 추정 기능으로 차량을 추적 및 집계하고, 교통 패턴을 분석하고, 실시간으로 혼잡을 관리하세요.
  • 리테일 분석: 고객의 이동 패턴과 제품 상호 작용을 분석하여 매장 레이아웃을 최적화하고 고객 경험을 개선합니다.
  • 산업 자동화: 컨베이어 벨트 위의 제품을 계수하고 생산 라인을 모니터링하여 품질 관리 및 효율성을 개선합니다.

보다 전문적인 애플리케이션의 경우, 실제 컴퓨터 비전 과제를 위해 설계된 포괄적인 도구 세트인 Ultralytics 솔루션을 살펴보세요.

📅1 년 전 생성됨 ✏️ 업데이트됨 5 일 전

댓글