Ultralytics YOLO27:
Get Started

Ultralytics YOLO26을 사용한 객체 계수#

객체 계수란 무엇인가요?#

Open Object Counting In Colab

Ultralytics YOLO26을 사용한 객체 계수는 동영상과 카메라 스트림에서 특정 객체를 정확하게 식별하고 개수를 세는 작업입니다. YOLO26은 최첨단 알고리즘과 딥러닝 기능을 바탕으로 군중 분석 및 감시와 같은 다양한 시나리오에서 효율적이고 정확한 객체 계수를 제공하여 실시간 애플리케이션에 탁월한 성능을 발휘합니다.



시청: Ultralytics YOLO26으로 실시간 객체 계수를 수행하는 방법 🚀

객체 계수의 장점#

  • 리소스 최적화: 객체 계수는 정확한 수량 정보를 제공하여 효율적인 리소스 관리를 지원하고, 재고 관리와 같은 애플리케이션에서 리소스 할당을 최적화합니다.
  • 보안 강화: 객체 계수는 개체를 정확하게 추적하고 수량을 세어 보안 및 감시를 강화하고, 선제적인 위협 탐지를 지원합니다.
  • 정보에 기반한 의사 결정: 객체 계수는 의사 결정에 유용한 인사이트를 제공하고, 소매업, 교통 관리 및 다양한 분야의 프로세스를 최적화합니다.

실제 적용 사례#

물류양식업
Ultralytics YOLO26을 사용한 컨베이어 벨트 패킷 계수Ultralytics YOLO26을 사용한 바다의 물고기 계수
Ultralytics YOLO26을 사용한 컨베이어 벨트 패킷 계수Ultralytics YOLO26을 사용한 바다의 물고기 계수

YOLO26으로 객체 계수하기#

계수 region을 정의합니다. 선은 점 두 개, 폴리곤은 점 세 개 이상을 지정합니다. 그런 다음 이를 ObjectCounter 솔루션에 전달합니다. 카운터는 프레임 전체에서 각 객체를 추적하고, 추적 중인 객체가 선을 넘거나 영역을 통과할 때 IN/OUT 수를 집계하며, 출력 동영상에 기록할 수 있도록 주석이 추가된 프레임을 반환합니다.

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

region 인수는 점 두 개(선의 경우) 또는 점 세 개 이상의 폴리곤을 허용합니다. 카운터가 진입과 이탈 지점을 정확히 파악할 수 있도록 좌표를 연결할 순서대로 정의합니다.

ObjectCounter 인수#

다음은 ObjectCounter 인수 표입니다:

인수유형기본값설명
modelstrNoneUltralytics YOLO 모델 파일의 경로입니다.
show_inboolTrue비디오 스트림에 진입 수를 표시할지 제어하는 플래그입니다.
show_outboolTrue비디오 스트림에 이탈 수를 표시할지 제어하는 플래그입니다.
regionlist 또는 dictNone관심 영역을 정의하는 점입니다. (x, y) 튜플 목록 또는 여러 영역에 대해 영역 이름을 점 목록에 매핑하는 사전(RegionCounter만 해당)으로 지정할 수 있습니다. None이면 영역이 필요한 Solutions는 사전 정의된 기본값을 사용합니다.
line_widthint2Solution에서 그리는 상자, 키포인트 및 개수 표시의 선 두께입니다.
verboseboolTrue프레임별 입력 형태, 클래스 개수 및 처리 속도 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다.

ObjectCounter 솔루션에서는 여러 track 인수를 사용할 수 있습니다.

인수유형기본값설명
trackerstr'tracktrack.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) 쌍을 지정합니다. 모델 stride에 맞춰 형태가 조정됩니다.
max_detint300추적 전에 프레임별로 유지할 최대 탐지 수를 지정하여 밀집된 장면에서 솔루션이 처리하는 객체 수를 제한합니다.
quantizeint or strNone추론 정밀도입니다. PyTorch 및 TorchScript 모델의 경우 16 (FP16) 또는 32/미설정(FP32)을 사용합니다. 다른 형식은 아티팩트와 런타임에서 선택한 정밀도로 계산합니다. 더 이상 사용되지 않는 half 플래그를 대체합니다.

또한 아래의 시각화 인수도 지원됩니다.

인수유형기본값설명
showboolFalseTrue이면 주석이 추가된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 얻는 데 유용합니다.
show_confboolTrue각 감지 결과의 레이블 옆에 신뢰도 점수를 표시합니다. 각 감지 결과에 대한 모델의 확신도를 파악할 수 있습니다.
show_labelsboolTrue시각화 출력에 각 감지 결과의 레이블을 표시합니다. 감지된 객체를 즉시 파악할 수 있습니다.

자주 묻는 질문#

  • Ultralytics YOLO26을 사용하여 동영상의 객체를 계수하려면 다음 단계를 따르면 됩니다.

    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", "yolo26n.pt")

    여러 영역의 객체를 동시에 계수하는 고급 설정과 옵션은 RegionCounter 솔루션을 참조하세요.

  • 객체 계수에 Ultralytics YOLO26을 사용하면 다음과 같은 여러 장점이 있습니다.

    1. 리소스 최적화: 정확한 수량 정보를 제공해 효율적인 리소스 관리를 지원하고, 재고 관리와 같은 업계에서 리소스 할당을 최적화하는 데 도움이 됩니다.
    2. 보안 강화: 개체를 정확하게 추적하고 계수하여 보안 및 감시를 강화하고, 선제적인 위협 탐지와 보안 시스템을 지원합니다.
    3. 정보에 기반한 의사 결정: 의사 결정에 유용한 인사이트를 제공하고, 소매업, 교통 관리 등 다양한 분야의 프로세스를 최적화합니다.
    4. 실시간 처리: YOLO26의 아키텍처는 실시간 추론을 지원하여 라이브 동영상 스트림 및 시간에 민감한 애플리케이션에 적합합니다.

    구현 예제와 실제 애플리케이션은 특정 구역의 객체 추적을 위한 TrackZone 솔루션을 살펴보세요.

  • Ultralytics YOLO26으로 특정 객체 클래스를 계수하려면 추적 단계에서 관심 있는 클래스를 지정해야 합니다. 다음은 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", "yolo26n.pt", [0, 2])

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

  • Ultralytics YOLO26은 Faster R-CNN, SSD, 이전 YOLO 버전과 같은 다른 객체 탐지 모델에 비해 여러 장점을 제공합니다.

    1. 속도 및 효율성: YOLO26은 실시간 처리 기능을 제공하므로 감시 및 자율 주행처럼 빠른 추론이 필요한 애플리케이션에 적합합니다.
    2. 정확도: 최첨단 탐지 및 추적 정확도를 제공하여 오탐을 줄이고 전반적인 시스템 신뢰성을 향상합니다.
    3. 간편한 통합: YOLO26은 모바일 및 엣지 디바이스를 비롯한 다양한 플랫폼과 디바이스에 원활하게 통합되며, 이는 최신 AI 애플리케이션에 매우 중요합니다.
    4. 유연성: 탐지 및 세그멘테이션 작업을 지원하고, 여기에 추적 모드를 적용할 수 있으며, 특정 사용 사례의 요구 사항에 맞게 모델을 구성할 수 있습니다.

    기능과 성능 비교에 대한 자세한 내용은 Ultralytics YOLO26 문서를 참조하세요.

  • 예. Ultralytics YOLO26은 실시간 탐지 기능, 확장성, 통합 유연성 덕분에 군중 분석 및 교통 관리와 같은 고급 애플리케이션에 적합합니다. 고급 기능을 통해 동적인 환경에서 객체를 높은 정확도로 추적하고 계수하며 분류할 수 있습니다. 사용 사례는 다음과 같습니다.

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

    실제 컴퓨터 비전 과제를 위해 설계된 종합 도구 모음은 Ultralytics Solutions에서 확인하세요.

댓글