Ultralytics YOLO27:

Ultralytics YOLO26을 사용한 영역 내 객체 카운팅#

Ultralytics YOLO26RegionCounter 솔루션은 비디오 프레임 전체에서 객체를 추적하고, 매 프레임마다 사용자가 정의한 각 영역 내부에 바운딩 박스 중심이 위치한 객체를 카운트합니다. 각 영역은 실시간 카운트와 함께 프레임에 표시되므로, 단일 Python 호출 또는 CLI 명령으로 매장 통로, 도로 차선, 생산 구역 등 여러 구역을 모니터링할 수 있습니다.



Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions

영역 카운팅을 사용하는 이유#

  • 한 번에 여러 구역 처리: 이름이 지정된 폴리곤의 dictionary를 전달하면 각 구역에 독립적인 카운트가 프레임에 표시되므로, 하나의 비디오 스트림으로 관심 있는 모든 영역을 처리할 수 있습니다.
  • 내장된 추적 기능: 이 솔루션은 내부적으로 YOLO26 detection과 객체 추적을 실행하므로 별도의 추적 파이프라인을 연결할 필요가 없습니다.
  • 프로그래밍 방식으로 읽을 수 있는 카운트: 처리된 각 프레임은 영역별 카운트 dictionary가 포함된 results object를 반환하므로 대시보드, 알림 또는 로깅에 바로 사용할 수 있습니다.

실제 적용 사례#

리테일시장 거리
소매점에서 그려진 폴리곤 영역 내부의 사람을 카운트하는 Ultralytics YOLO혼잡한 시장 거리에 오버레이된 Ultralytics YOLO 영역 카운트
영역 내 Ultralytics YOLO 사람 카운팅영역 내 Ultralytics YOLO 군중 카운팅

Ultralytics YOLO를 사용하여 영역 내 객체를 카운트하는 방법#

CLI 또는 Python을 사용하여 비디오 소스에서 RegionCounter 솔루션을 실행합니다. 영역은 점 목록(단일 구역) 또는 구역 이름을 점 목록에 매핑하는 dictionary일 수 있습니다. 아래 Python 예제는 이름이 지정된 두 영역의 객체를 카운트하고 처리된 프레임을 출력 비디오 파일에 기록합니다:

Ultralytics YOLO를 사용한 영역 카운팅
# Run a region counting example
yolo solutions region show=True

# Pass a source video
yolo solutions region source="path/to/video.mp4"

# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"

RegionCounter() 인수#

다음은 RegionCounter 인수 표입니다.

인수유형기본값설명
modelstrNoneUltralytics YOLO 모델 파일의 경로입니다.
regionlist 또는 dictNone관심 영역을 정의하는 점으로, (x, y) 튜플 목록 또는 여러 영역에 대해 영역 이름을 점 목록에 매핑하는 딕셔너리(RegionCounter만 해당)입니다. None인 경우 영역이 필요한 솔루션은 사전 정의된 기본값으로 대체됩니다.
line_widthint2솔루션이 그리는 박스, 키포인트 및 카운트의 선 두께입니다.
verboseboolTrue입력 형태, 클래스별 개수 및 처리 속도의 프레임별 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다.

RegionCounter 솔루션을 사용하면 객체 추적 매개변수를 사용할 수 있습니다:

인수유형기본값설명
trackerstr'botsort.yaml'사용할 추적 알고리즘을 지정합니다. 기본 제공 옵션: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml입니다.
conffloat0.25검출 결과의 신뢰도 임계값을 설정합니다. 값이 낮을수록 더 많은 객체를 추적할 수 있지만 오탐이 포함될 수 있습니다.
ioufloat0.7겹치는 검출 결과를 필터링하기 위한 교집합 대비 합집합 (IoU) 임계값을 설정합니다.
classeslistNone클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다.
devicestrNone추론에 사용할 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자는 CPU, 특정 GPU 또는 기타 컴퓨팅 장치 중에서 모델 실행 장치를 선택할 수 있습니다.
imgszint or tuple640목표 추론 이미지 크기: 정사각형의 경우 정수 또는 (height, width) 쌍입니다. 형태는 모델 스트라이드에 맞게 조정됩니다.
max_detint300추적 전 프레임당 유지되는 최대 검출 수로, 솔루션이 밀집된 장면에서 처리하는 객체를 제한합니다.
quantizeint or strNone추론 정밀도: PyTorch 및 TorchScript 모델의 경우 16(FP16) 또는 32/설정 안 함(FP32); 기타 형식은 아티팩트와 런타임이 선택하는 정밀도로 계산됩니다. 더 이상 사용되지 않는 half 플래그를 대체합니다.

또한 다음과 같은 시각화 설정을 지원합니다:

인수유형기본값설명
showboolFalseTrue인 경우 annotation이 추가된 이미지 또는 비디오를 window에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 제공하는 데 유용합니다.
show_confboolTrue각 detection의 confidence score를 label과 함께 표시합니다. 각 detection에 대한 모델의 확신 정도를 파악할 수 있습니다.
show_labelsboolTruevisual output에 각 detection의 label을 표시합니다. 검출된 객체를 즉시 파악할 수 있습니다.

영역 카운팅의 작동 방식#

RegionCounter 솔루션은 전달된 각 영역을 영역당 최소 3개의 점을 갖는 폴리곤으로 변환합니다. 일반 점 목록은 Region#01이라는 이름의 단일 구역이 되며, dictionary를 사용하면 지정한 구역 이름이 유지됩니다. 각 구역은 Ultralytics 팔레트에서 가져온 고유한 색상으로 표시됩니다. 그런 다음 모든 프레임이 다음 세 단계로 처리됩니다:

  1. YOLO26 추적이 프레임의 모든 객체를 감지하고 추적합니다.
  2. 추적된 각 객체에 대해 솔루션은 바운딩 박스 중심을 계산하고 해당 객체를 포함하는 영역 폴리곤을 확인합니다.
  3. 각 영역의 중심에 카운트가 표시되며, 다음 프레임 전에 카운트가 초기화됩니다.

카운트는 매 프레임마다 다시 시작되므로 영역에 표시되는 수는 누적 합계가 아니라 현재 점유 상태, 즉 현재 영역 내부에 있는 객체 수를 의미합니다. 경계를 통과하는 객체를 누적해서 카운트하려면 대신 ObjectCounter 솔루션을 사용합니다.

각 호출은 plot_im attribute에 주석이 표시된 프레임을 저장하고 region_counts dictionary에 영역 이름과 카운트를 매핑하는 results object도 반환하므로, 해당 수치를 자체 애플리케이션 로직에 전달할 수 있습니다.

결론#

Ultralytics YOLO26 RegionCounter 솔루션은 몇 줄의 코드만으로 필요한 만큼 이름이 지정된 구역에서 실시간 객체 카운트를 모니터링합니다. 더 다양한 기능을 사용하려면 객체 카운팅으로 경계 통과를 카운트하거나, TrackZone으로 단일 구역 내 객체를 추적하거나, 다른 Ultralytics Solutions을 살펴보세요.

FAQ#

  • Ultralytics YOLO26은 프레임의 모든 객체를 추적하고 각 사용자 정의 폴리곤 내부에 객체의 바운딩 박스 중심이 있는지 확인하여 영역 내 객체를 카운트합니다. 영역에 표시되는 카운트는 누적 합계가 아니라 해당 프레임의 현재 점유 상태입니다. 구성 옵션은 RegionCounter() Arguments 섹션에 나와 있습니다.

  • 기본 예제와 같이 region argument에 구역 이름을 점 목록에 매핑하는 dictionary를 전달합니다:

    from ultralytics import solutions
    
    region_points = {
        "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)],
        "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)],
    }
    regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)

    이름이 지정된 각 구역은 고유한 색상으로 표시되며 독립적인 카운트가 적용됩니다.

  • regioncounter(im0) 호출이 반환하는 object에는 영역 이름을 카운트에 매핑하는 region_counts dictionary가 포함되며, plot_im(주석이 표시된 프레임) 및 total_tracks(추적된 객체 수)도 함께 포함됩니다. results object를 출력하여 사용 가능한 모든 field를 확인할 수 있습니다.

  • 예. 유지할 class index와 함께 classes argument를 전달합니다. 예를 들어 COCO로 사전 학습된 모델에서 사람만 카운트하려면 classes=[0]을 사용합니다. 추적과 관련된 전체 argument 목록은 RegionCounter() Arguments 섹션에 있습니다.

  • RegionCounter은 현재 프레임의 각 폴리곤 구역 내부에 있는 객체 수를 표시하는 반면, ObjectCounter는 객체가 선 또는 영역 경계를 통과할 때 객체를 누적해서 카운트하며 진입 및 이탈 합계를 추적합니다. 하나 이상의 구역에서 실시간 점유 상태를 확인하려면 RegionCounter를 사용하고, 진입 및 이탈을 카운트하려면 ObjectCounter을 사용합니다. 선 형태의 영역은 ObjectCounter에서만 지원됩니다.

댓글