VSCode 터미널에서 YOLO 추론 결과를 확인하는 방법#
libsixel 웹사이트의 이미지입니다.
동기#
SSH를 통해 원격 머신에 연결하면 일반적으로 이미지 결과를 시각화할 수 없거나, GUI가 있는 로컬 장치로 데이터를 옮겨야 합니다. VSCode 통합 터미널에서는 이미지를 직접 렌더링할 수 있으므로, 파일을 노트북으로 다시 복사하지 않고도 추론을 실행하는 바로 그곳에서 prediction results를 확인할 수 있습니다. 이 가이드에서는 setup을 활성화하고 code를 연결하는 방법을 설명하며, common questions에 대한 답변도 제공합니다.
Linux 및 macOS에서만 호환됩니다. sixel을 사용하여 터미널에서 이미지를 확인할 수 있도록 Windows 지원에 관한 업데이트를 확인하려면 VSCode repository, Issue status 또는 documentation을 확인하세요.
통합 터미널을 사용하여 이미지를 확인하는 데 호환되는 VSCode 프로토콜은 sixel 및 iTerm입니다. 이 가이드에서는 sixel 프로토콜의 사용 방법을 설명합니다.
프로세스#
-
먼저 VSCode에서
terminal.integrated.enableImages및terminal.integrated.gpuAcceleration설정을 활성화해야 합니다."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
가상 환경에
python-sixel라이브러리를 설치합니다. 이 라이브러리는 더 이상 유지 관리되지 않는PySixel라이브러리의 fork입니다.pip install sixel -
모델을 로드하고 추론을 실행한 다음, 결과를 플롯하여 변수에 저장합니다. 추론 인수 및 결과 작업에 대한 자세한 내용은 predict mode 페이지를 참조하세요.
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)!- 사용 가능한 인수는 plot method parameters를 참조하세요.
-
이제 OpenCV를 사용하여
np.ndarray을bytes데이터로 변환합니다. 그런 다음io.BytesIO을 사용하여 "file-like" 객체를 만듭니다.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의 객체만 필요합니다.
-
SixelWriter인스턴스를 생성한 다음.draw()메서드를 사용하여 터미널에 이미지를 그립니다.from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
추론 결과 예시#
이 예시를 동영상 또는 애니메이션 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의 객체만 필요합니다. - 사용 가능한 인수는 plot method parameters를 참조하세요.
터미널에서 이미지 표시를 "지우기" 위해 clear을 사용해야 할 수 있습니다.
FAQ#
macOS 또는 Linux의 VSCode 터미널에서 YOLO 추론 결과를 확인하려면 다음 단계를 따르세요.
-
필요한 VSCode 설정을 활성화합니다.
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
sixel 라이브러리를 설치합니다.
pip install sixel -
YOLO 모델을 로드하고 추론을 실행합니다.
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
추론 결과 이미지를 바이트로 변환하고 터미널에 표시합니다.
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)
자세한 내용은 predict mode 페이지를 참조하세요.
-
sixel 프로토콜은 현재 Linux 및 macOS에서만 지원됩니다. 이러한 플랫폼에는 sixel 그래픽과 호환되는 네이티브 터미널 기능이 있기 때문입니다. sixel을 사용한 터미널 그래픽의 Windows 지원은 아직 개발 중입니다. Windows 호환성 업데이트는 VSCode Issue status 및 documentation을 확인하세요.
아무것도 렌더링되지 않으면 다음 확인 사항을 순서대로 수행하세요.
- Process 섹션에 설명된 대로
terminal.integrated.enableImages및terminal.integrated.gpuAcceleration이 모두 활성화되어 있는지 확인한 다음, 설정이 적용되도록 통합 터미널을 다시 시작합니다. sixel이 스크립트를 실행하는 동일한 가상 환경(pip install sixel)에 설치되어 있는지 확인합니다.- 인코딩하기 전에
plot이 유효한np.ndarray인지 확인하세요. 이미지가 비어 있거나 유효한 배열이 아닌 경우cv2.imencode에서 오류가 발생하기 때문입니다.results[0].plot()가 허용하는 값은 plot method parameters에서 확인하세요.
문제가 계속되면 터미널 이미지 지원 상태를 VSCode repository에서 확인하세요.
- Process 섹션에 설명된 대로
현재 터미널에서 sixel을 사용하여 동영상 추론 결과 또는 애니메이션 GIF 프레임을 표시하는 것은 테스트되지 않았으며 지원되지 않을 수 있습니다. 정적 이미지부터 시작하여 호환성을 확인하는 것을 권장합니다. 성능 제약을 고려하여 동영상 결과 사용은 사용자의 책임하에 시도하세요. 추론 결과 플로팅에 대한 자세한 내용은 predict mode 페이지를 참조하세요.
sixel패키지는 유지 관리되지 않는PySixel라이브러리의 fork이며 Pillow(PIL)를 기반으로 하는 얇은 Python 래퍼입니다.import sixel가 실패하거나SixelWriter().draw()에서 오류가 발생하면 패키지가 활성 가상 환경에 설치되어 있는지 확인하고, Pillow를 사용할 수 있는지 확인한 다음 플랫폼별 참고 사항은 python-sixel GitHub repository에서 확인하세요.draw()에 전달할 이미지를 생성하는 방법은 predict mode 문서를 참조하세요.