터미널에서 추론 결과 보기

Sixel example of image in Terminal

libsixel 웹사이트의 이미지.

동기

원격 시스템에 연결할 때 일반적으로 이미지 결과를 시각화하는 것은 불가능하거나 GUI가 있는 로컬 장치로 데이터를 이동해야 합니다. VSCode 통합 터미널을 사용하면 이미지를 직접 렌더링할 수 있습니다. 다음은 ultralytics예측 결과를 함께 사용하여 이를 수행하는 방법에 대한 간단한 시연입니다.

경고

Linux 및 MacOS에서만 호환됩니다. VSCode 저장소를 확인하거나, 이슈 상태 또는 문서에서 sixel을 사용하여 터미널에서 이미지를 보는 것에 대한 Windows 지원 업데이트를 확인하십시오.

통합 터미널을 사용하여 이미지를 보기 위한 VSCode 호환 프로토콜은 sixeliTerm입니다. 이 가이드에서는 sixel 프로토콜 사용법을 설명합니다.

절차

  1. 먼저 VSCode에서 terminal.integrated.enableImagesterminal.integrated.gpuAcceleration 설정을 활성화해야 합니다.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. Install the python-sixel library in your virtual environment. This is a fork of the PySixel library, which is no longer maintained.

    pip install sixel
  3. 모델을 로드하고 추론을 실행한 다음, 결과를 플롯하고 변수에 저장하십시오. 추론 인수 및 결과 작업에 대한 자세한 내용은 예측 모드 페이지를 참조하십시오.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    1. 사용 가능한 인수를 보려면 플롯 메서드 매개변수를 참조하십시오.
  4. 이제 OpenCV를 사용하여 np.ndarraybytes 데이터로 변환하십시오. 그런 다음 io.BytesIO를 사용하여 "파일과 유사한" 객체를 만드십시오.

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    1. 다른 이미지 확장자를 사용하는 것도 가능합니다.
    2. 반환된 인덱스 1의 객체만 필요합니다.
  5. SixelWriter 인스턴스를 생성한 다음 .draw() 메서드를 사용하여 터미널에 이미지를 그립니다.

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)

추론 결과 예시

YOLO inference results displayed in terminal

주의

비디오나 애니메이션 GIF 프레임에 이 예제를 사용하는 것은 테스트되지 않았습니다. 시도할 경우 발생하는 위험은 사용자 본인의 책임입니다.

전체 코드 예제

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model.predict(source="ultralytics/assets/bus.jpg")

# Plot inference results
plot = results[0].plot()  # (3)!

# Results image as bytes
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. 다른 이미지 확장자를 사용하는 것도 가능합니다.
  2. 반환된 인덱스 1의 객체만 필요합니다.
  3. 사용 가능한 인수를 보려면 플롯 메서드 매개변수를 참조하십시오.

터미널에서 이미지 보기를 "지우기" 위해 clear를 사용해야 할 수도 있습니다.

FAQ

macOS 또는 Linux의 VSCode 터미널에서 YOLO 추론 결과를 어떻게 볼 수 있습니까?

macOS 또는 Linux의 VSCode 터미널에서 YOLO 추론 결과를 보려면 다음 단계를 따르십시오:

  1. 필요한 VSCode 설정을 활성화하십시오:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
  2. sixel 라이브러리를 설치하십시오:

    pip install sixel
  3. YOLO 모델을 로드하고 추론을 실행하십시오:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
  4. 추론 결과 이미지를 바이트로 변환하고 터미널에 표시하십시오:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)

자세한 내용은 예측 모드 페이지를 방문하십시오.

sixel 프로토콜이 왜 Linux와 macOS에서만 작동합니까?

sixel 프로토콜은 현재 Linux와 macOS에서만 지원되는데, 이는 이 플랫폼들이 sixel 그래픽과 호환되는 기본 터미널 기능을 갖추고 있기 때문입니다. sixel을 사용하는 터미널 그래픽에 대한 Windows 지원은 아직 개발 중입니다. Windows 호환성 업데이트는 VSCode 이슈 상태문서를 확인하십시오.

VSCode 터미널에서 이미지를 표시할 때 문제가 발생하면 어떻게 해야 합니까?

sixel을 사용하여 VSCode 터미널에서 이미지를 표시할 때 문제가 발생하면 다음을 수행하십시오:

  1. VSCode에서 필요한 설정이 활성화되었는지 확인하십시오:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
  2. sixel 라이브러리 설치를 확인하십시오:

    pip install sixel
  3. 이미지 데이터 변환 및 플롯 코드에 오류가 있는지 확인하십시오. 예를 들어:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)

문제가 지속되면 VSCode 저장소를 참조하고, 추가 안내를 위해 플롯 메서드 매개변수 섹션을 방문하십시오.

YOLO가 sixel을 사용하여 터미널에 비디오 추론 결과를 표시할 수 있습니까?

터미널에서 sixel을 사용하여 비디오 추론 결과나 애니메이션 GIF 프레임을 표시하는 것은 현재 테스트되지 않았으며 지원되지 않을 수 있습니다. 정적 이미지로 시작하여 호환성을 확인하는 것을 권장합니다. 비디오 결과는 성능 제한을 고려하여 사용자의 책임하에 시도하십시오. 추론 결과 플로팅에 대한 자세한 내용은 예측 모드 페이지를 방문하십시오.

python-sixel 라이브러리 문제를 어떻게 해결합니까?

python-sixel 라이브러리 문제를 해결하려면 다음을 수행하십시오:

  1. 가상 환경에 라이브러리가 올바르게 설치되었는지 확인하십시오:

    pip install sixel
  2. 필요한 Python 및 시스템 종속성이 있는지 확인하십시오.

  3. 추가 문서 및 커뮤니티 지원은 python-sixel GitHub 저장소를 참조하십시오.

  4. 코드에서 SixelWriter 사용 및 이미지 데이터 변환 단계와 같은 잠재적인 오류를 다시 확인하십시오.

YOLO 모델 작업 및 sixel 통합에 대한 추가 지원은 내보내기예측 모드 문서 페이지를 참조하십시오.

댓글