Cách xem kết quả dự đoán (inference) YOLO trong Terminal VSCode#
Hình ảnh từ trang web libsixel.
Động lực#
Khi kết nối đến một máy từ xa qua SSH, việc trực quan hóa kết quả hình ảnh thường không khả thi hoặc đòi hỏi phải chuyển dữ liệu sang thiết bị cục bộ có giao diện đồ họa. Terminal tích hợp của VSCode có thể hiển thị hình ảnh trực tiếp, cho phép bạn kiểm tra kết quả dự đoán ngay tại nơi chạy suy luận mà không cần sao chép tệp về laptop. Hướng dẫn này sẽ hướng dẫn cách bật cấu hình, thiết lập mã nguồn 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 kho lưu trữ VSCode, trạng thái Issue hoặc tài liệu để cập nhật thông tin về hỗ trợ Windows nhằm xem hình ảnh trong terminal với sixel.
Các giao thức 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 giao thức 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 đặt thư viện
python-sixeltrong môi trường ảo của bạn. Đây là một bản fork của thư việnPySixel, hiện không còn được duy trì.pip install sixel -
Tải một model và thực thi suy luận, sau đó vẽ biểu đồ kết quả và lưu vào một biến. Xem thêm về các đối số suy luận và cách làm việc với kết quả trên trang chế độ predict.
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 tham số phương thức plot để biết các đối số có thể sử dụng.
-
Bây giờ, hãy sử dụng OpenCV để chuyển đổi dữ liệu
np.ndarraythànhbytes. Sau đó sử dụngio.BytesIOđể tạo một đối tượng dạng tệp ("file-like" object).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 sử dụng đối tượng được trả về ở chỉ mục
1.
-
Tạo một thể hiện
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 cân nhắc rủi ro khi thử nghiệm.
Ví dụ mã nguồn đầy đủ#
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 sử dụng đối tượng được trả về ở chỉ mục
1. - Xem tham số phương thức plot để biết các đối số có thể sử dụng.
Bạn có thể cần sử dụng clear để "xóa" khung nhìn hình ảnh trong terminal.
Câu hỏi thường gặp#
Để xem kết quả dự đoán 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 cần thiết trong VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Cài đặt thư viện sixel:
pip install sixel -
Tải model YOLO của bạn 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ị nó 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 chế độ predict.
-
Giao thức sixel hiện chỉ được hỗ trợ trên Linux và macOS vì các nền tảng này có tính năng terminal gốc tương thích với đồ họa sixel. Khả năng hỗ trợ đồ họa terminal trên Windows sử dụng sixel vẫn đang được phát triển. Để cập nhật về tính tương thích trên 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ì hiển thị, hãy thực hiện các bước kiểm tra theo thứ tự sau:
- Xác nhận rằng 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 cài đặt có hiệu lực. - Xác minh rằng
sixelđược cài đặt trong cùng môi trường ảo mà tập lệnh của bạn đang chạy (pip install sixel). - Đảm bảo
plotlà mộtnp.ndarrayhợp lệ trước khi mã hóa nó, vìcv2.imencodesẽ báo lỗi nếu hình ảnh trống hoặc không phải là một mảng hợp lệ. Xem tham số 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 kho lưu trữ VSCode để biết trạng thái hỗ trợ hình ảnh trong terminal.
- Xác nhận rằng cả
Việc hiển thị kết quả suy luận video hoặc các khung hình động GIF bằng sixel trong terminal hiện chưa được thử nghiệm và có thể không được hỗ trợ. Chúng tôi khuyên bạn nên bắt đầu với hình ảnh tĩnh và xác minh tính tương thích. Việc thử nghiệm kết quả video là tùy thuộc vào rủi ro của bạn, cần lưu ý các giới hạn về hiệu năng. Để biết thêm thông tin về việc vẽ kết quả suy luận, hãy truy cập trang chế độ predict.
Gói
sixellà một bản fork của thư việnPySixelkhông còn được duy trì và là một trình bao bọc Python mỏng trên Pillow (PIL). Nếuimport sixelgặp lỗi hoặcSixelWriter().draw()báo lỗi, hãy xác nhận gói đã được cài đặt vào môi trường ảo đang hoạt động, đảm bảo Pillow khả dụng, và kiểm tra kho lưu trữ GitHub python-sixel để biết các ghi chú dành riêng cho nền tảng. Để biết thêm thông tin về cách tạo hình ảnh truyền vàodraw(), hãy xem tài liệu chế độ predict.