Xem kết quả dự đoán (inference) trong terminal
Hình ảnh từ trang web libsixel.
Động lực
Khi kết nối với máy từ xa, 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 (GUI). Terminal tích hợp trong VSCode cho phép hiển thị hình ảnh trực tiếp. Đây là hướng dẫn ngắn gọn về cách sử dụng tính năng này kết hợp với ultralytics cùng kết quả dự đoán.
Chỉ tương thích với Linux và MacOS. Hãy kiểm tra kho lưu trữ VSCode, theo dõi trạng thái Issue hoặc xem tài liệu để cập nhật thông tin về hỗ trợ Windows khi hiển thị hình ảnh trong terminal bằng sixel.
Các giao thức tương thích với VSCode để xem hình ảnh thông qua 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 kích hoạ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 môi trường ảo của bạn. Đây là một bản fork của thư việnPySixel, vốn không còn được duy trì.pip install sixel -
Tải một model và thực hiện dự đoán, sau đó vẽ kết quả và lưu vào một biến. Xem thêm về các đối số dự đoán và cách làm việc với kết quả trên trang chế độ dự đoán.
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ờ, 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 tệp tin".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)- Cũng có thể sử dụng các định dạng hình ảnh mở rộng khác.
- Chỉ đối tượng tại chỉ mục
1được trả về mới cần thiết.
-
Tạo một instance
SixelWriter, sau đó sử dụng phương thức.draw()để hiển thị 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ả dự đoán
Việc sử dụng ví dụ này với video hoặc các khung hình GIF động chưa được kiểm thử. Hãy cân nhắc rủi ro khi tự thực hiện.
Ví dụ mã đầ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)- Cũng có thể sử dụng các định dạng hình ảnh mở rộng khác.
- Chỉ đối tượng tại chỉ mục
1được trả về mới cần thiết. - 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" hình ảnh hiển thị trong terminal.
Câu hỏi thường gặp (FAQ)
Làm thế nào để tôi có thể xem kết quả dự đoán YOLO trong terminal VSCode trên macOS hoặc Linux?
Để 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:
-
Kích hoạt các thiết lập 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 dự đoán:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="path_to_image") plot = results[0].plot() -
Chuyển đổi hình ảnh kết quả dự đoán 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ế độ dự đoán.
Tại sao giao thức sixel chỉ hoạt động trên Linux và macOS?
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ó khả năng terminal gốc tương thích với đồ họa sixel. Việc hỗ trợ đồ họa terminal qua sixel trên Windows vẫn đang được phát triển. Để cập nhật về tính 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.
Tôi phải làm gì nếu gặp sự cố khi hiển thị hình ảnh trong terminal VSCode?
Nếu bạn gặp sự cố khi hiển thị hình ảnh trong terminal VSCode bằng sixel:
-
Đảm bảo các thiết lập cần thiết trong VSCode đã được kích hoạt:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Xác minh việc cài đặt thư viện sixel:
pip install sixel -
Kiểm tra mã chuyển đổi dữ liệu hình ảnh và mã vẽ (plotting) để tìm lỗi. Ví dụ:
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)
Nếu vấn đề vẫn tiếp diễn, hãy tham khảo kho lưu trữ VSCode và truy cập phần tham số phương thức plot để được hướng dẫn thêm.
YOLO có thể hiển thị kết quả dự đoán video trong terminal bằng sixel không?
Việc hiển thị kết quả dự đoán video hoặc khung hình 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 bạn nên bắt đầu với hình ảnh tĩnh để xác minh tính tương thích. Hãy thực hiện dự đoán video với rủi ro của riêng bạn, đồng thời lưu ý đến các hạn chế về hiệu năng. Để biết thêm thông tin về việc vẽ kết quả dự đoán, hãy truy cập trang chế độ dự đoán.
Làm cách nào để khắc phục sự cố với thư viện python-sixel?
Để khắc phục sự cố với thư viện python-sixel:
-
Đảm bảo thư viện đã được cài đặt chính xác trong môi trường ảo của bạn:
pip install sixel -
Xác minh rằng bạn đã có các phụ thuộc Python và hệ thống cần thiết.
-
Tham khảo kho lưu trữ GitHub python-sixel để biết thêm tài liệu và nhận hỗ trợ từ cộng đồng.
-
Kiểm tra kỹ mã của bạn để tìm các lỗi tiềm ẩn, đặc biệt là cách sử dụng
SixelWritervà các bước chuyển đổi dữ liệu hình ảnh.
Để được hỗ trợ thêm về việc làm việc với các model YOLO và tích hợp sixel, hãy xem các trang tài liệu xuất (export) và chế độ dự đoán.