Cách xem kết quả inference YOLO trong terminal VSCode#
Hình ảnh từ website libsixel.
Động lực#
Khi kết nối với máy từ xa qua SSH, thông thường bạn không thể trực quan hóa hình ảnh của kết quả, hoặc 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ể hiển thị 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 tệp về máy tính xách tay. Hướng dẫn này trình bày cách bật cấu hình, kết nối mã và giải đáp các câu hỏi thường gặp.
Chỉ tương thích với Linux và macOS. Kiểm tra repository VSCode, xem trạng thái Issue hoặc tài liệu để biết thông tin cập nhật về hỗ trợ Windows khi xem 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 cài đặt
terminal.integrated.enableImagesvàterminal.integrated.gpuAccelerationtrong VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Cài thư viện
python-sixeltrong môi trường ảo. Đây là một fork của thư việnPySixel, hiện không còn được duy trì.pip install sixel -
Tải model và chạy inference, sau đó vẽ kết quả và lưu vào một biến. Tìm hiểu 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 # Tải model model = YOLO("yolo26n.pt") # Chạy suy luận trên một ảnh results = model.predict(source="https://ultralytics.com/images/bus.jpg") # Vẽ kết quả inference 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ờ, dùng OpenCV để chuyển đổi
np.ndarraythành dữ liệubytes. Sau đó dùngio.BytesIOđể tạo một đối tượng "giống tệp".import io import cv2 # Ảnh kết quả dưới dạng bytes im_bytes = cv2.imencode( ".png", # (1)! plot, )[1].tobytes() # (2)! # Bytes hình ảnh dưới dạng đối tượng giống tệp 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 ở chỉ mục
1được trả về.
-
Tạo một instance
SixelWriter, sau đó dùng phương thức.draw()để vẽ hình ảnh trong terminal.from sixel import SixelWriter # Tạo đối tượng ghi sixel w = SixelWriter() # Vẽ hình ảnh sixel trong terminal w.draw(mem_file)
Ví dụ về kết quả inference#
Chưa kiểm tra việc sử dụng ví dụ này với video hoặc các frame GIF động. Hãy tự chịu rủi ro khi thử.
Ví dụ mã hoàn chỉnh#
import io
import cv2
from sixel import SixelWriter
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt")
# Chạy suy luận trên một ảnh
results = model.predict(source="https://ultralytics.com/images/bus.jpg")
# Vẽ kết quả inference
plot = results[0].plot() # (3)!
# Ảnh kết quả dưới dạng 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 ở chỉ mục
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 dùng clear để "xóa" hình ảnh đang hiển thị trong terminal.
Câu hỏi thường gặp#
Để xem kết quả inference YOLO trong terminal VSCode trên macOS hoặc Linux, hãy làm theo các bước sau:
-
Bật các cài đặt VSCode cần thiết:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Cài thư viện sixel:
pip install sixel -
Tải model YOLO và chạy inference:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="https://ultralytics.com/images/bus.jpg") plot = results[0].plot() -
Chuyển đổi ả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 hiển thị đồ họa sixel tích hợp trong terminal. 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 xem trạng thái Issue của VSCode và tài liệu.
Nếu không có gì được hiển thị, hãy lần lượt kiểm tra các mục sau:
- Xác nhận cả
terminal.integrated.enableImagesvàterminal.integrated.gpuAccelerationđều được bật như trình bày trong phần Quy trình, sau đó khởi động lại terminal tích hợp để áp dụng cài đặt. - Xác minh rằng
sixelđược cài trong cùng môi trường ảo 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ẽ báo lỗi nếu hình ảnh trống hoặc không phải là một 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 sự cố vẫn tiếp diễn, hãy tham khảo repository VSCode để biết trạng thái hỗ trợ hình ảnh trong terminal.
- Xác nhận cả
Hiện chưa kiểm tra việc hiển thị kết quả inference video hoặc các frame GIF động bằng sixel trong terminal và tính năng này 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 nếu thử hiển thị kết quả video, đồng thời lưu ý đến các giới hạn hiệu năng. Để tìm hiểu thêm về cách vẽ kết quả inference, hãy truy cập trang predict mode.
Gói
sixellà một fork của thư việnPySixelkhông còn được duy trì và là wrapper Python gọn nhẹ cho Pillow (PIL). Nếuimport sixelkhông hoạt động hoặcSixelWriter().draw()báo lỗi, hãy xác nhận gói được cài trong môi trường ảo đang hoạt động, đảm bảo Pillow khả dụng và kiểm tra repository python-sixel trên GitHub để xem 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.