Cách xem kết quả inference của YOLO trong terminal VSCode#
Hình ảnh từ website libsixel.
Động lực#
Khi kết nối với một máy từ xa qua SSH, thông thường không thể trực quan hóa kết quả hình ảnh, hoặc bạn phải chuyển dữ liệu sang thiết bị cục bộ có GUI. Terminal tích hợp của VSCode có thể render hình ảnh trực tiếp, vì vậy bạn có thể kiểm tra kết quả dự đoán ngay tại nơi chạy inference mà không cần sao chép file về laptop. Hướng dẫn này trình bày cách bật thiết lập, kết nối code và giải đáp các câu hỏi thường gặp.
Chỉ tương thích với Linux và macOS. Hãy kiểm tra repository của VSCode, trạng thái Issue hoặc tài liệu để xem các cập nhật về việc hỗ trợ Windows hiển thị hình ảnh trong terminal bằng sixel.
Các protocol tương thích với VSCode để xem hình ảnh bằng terminal tích hợp là sixel và iTerm. Hướng dẫn này sẽ minh họa cách sử dụng protocol sixel.
Quy trình#
-
Trước tiên, bạn phải bật các thiết lập
terminal.integrated.enableImagesvàterminal.integrated.gpuAccelerationtrong VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Cài đặt thư viện
python-sixeltrong virtual environment của bạn. Đây là một fork của thư việnPySixel, hiện không còn được duy trì.pip install sixel -
Load một model và thực thi inference, sau đó plot kết quả và lưu vào một biến. Xem thêm về các đối số inference và cách làm việc với kết quả trên trang 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)!- Xem các tham số của phương thức plot để biết những đối số có thể sử dụng.
-
Bây giờ, sử dụng OpenCV để chuyển đổi
np.ndarraythành dữ liệubytes. Sau đó sử dụngio.BytesIOđể tạo một đối tượng "giống file".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)- Bạn cũng có thể sử dụng các phần mở rộng hình ảnh khác.
- Chỉ cần đối tượng tại index
1được trả về.
-
Tạo một instance
SixelWriter, sau đó sử dụng phương thức.draw()để vẽ hình ảnh trong terminal.from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
Ví dụ về kết quả inference#
Việc sử dụng ví dụ này với video hoặc các frame GIF động chưa được kiểm thử. Hãy tự chịu rủi ro khi thử.
Ví dụ đầy đủ về code#
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)- Bạn cũng có thể sử dụng các phần mở rộng hình ảnh khác.
- Chỉ cần đối tượng tại index
1được trả về. - Xem các tham số của phương thức plot để biết những đối số có thể sử dụng.
Bạn có thể cần sử dụng clear để "xóa" phần hiển thị hình ảnh trong terminal.
FAQ#
Để xem kết quả inference của YOLO trong terminal VSCode trên macOS hoặc Linux, hãy làm theo các bước sau:
-
Bật các thiết lập VSCode cần thiết:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Cài đặt thư viện sixel:
pip install sixel -
Load model YOLO và chạy inference:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
Chuyển đổi hình ảnh kết quả inference thành bytes và hiển thị trong terminal:
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)
Để biết thêm chi tiết, hãy truy cập trang predict mode.
-
Hiện tại, protocol sixel chỉ được hỗ trợ trên Linux và macOS vì các nền tảng này có khả năng terminal native tương thích với đồ họa sixel. Hỗ trợ đồ họa terminal bằng sixel trên Windows vẫn đang được phát triển. Để cập nhật về khả năng tương thích với Windows, hãy kiểm tra trạng thái Issue của VSCode và tài liệu.
Nếu không có gì được render, hãy lần lượt thực hiện các bước kiểm tra sau:
- Xác nhận cả
terminal.integrated.enableImagesvàterminal.integrated.gpuAccelerationđều đã được bật như minh họa trong phần Quy trình, sau đó khởi động lại terminal tích hợp để các thiết lập có hiệu lực. - Xác minh
sixelđược cài đặt trong cùng virtual environment mà script của bạn chạy (pip install sixel). - Đảm bảo
plotlà mộtnp.ndarrayhợp lệ trước khi mã hóa, vìcv2.imencodesẽ phát sinh lỗi nếu hình ảnh rỗng hoặc không phải là array hợp lệ. Xem các tham số của phương thức plot để biết các giá trị màresults[0].plot()chấp nhận.
Nếu vấn đề vẫn tiếp diễn, hãy tham khảo repository của VSCode để xem trạng thái hỗ trợ hình ảnh trong terminal.
- Xác nhận cả
Việc hiển thị kết quả inference video hoặc các frame GIF động bằng sixel trong terminal hiện chưa được kiểm thử và có thể không được hỗ trợ. Chúng tôi khuyến nghị bắt đầu với hình ảnh tĩnh và xác minh khả năng tương thích. Hãy tự chịu rủi ro khi thử với kết quả video, đồng thời lưu ý các giới hạn về hiệu năng. Để biết thêm thông tin về việc plot kết quả inference, hãy truy cập trang predict mode.
Package
sixellà một fork của thư việnPySixelkhông còn được duy trì và là một Python wrapper mỏng trên Pillow (PIL). Nếuimport sixelkhông hoạt động hoặcSixelWriter().draw()phát sinh lỗi, hãy xác nhận package được cài đặt trong virtual environment đang hoạt động, đảm bảo Pillow khả dụng và kiểm tra repository GitHub của python-sixel để xem các lưu ý dành riêng cho từng nền tảng. Để biết thêm về cách tạo hình ảnh truyền vàodraw(), hãy xem tài liệu predict mode.