Link to this sectionCách xem kết quả dự đoán (inference) YOLO trong Terminal VSCode#
Hình ảnh từ trang web libsixel.
Link to this sectionĐộng lực#
Khi kết nối với máy từ xa qua SSH, việc hiển thị hình ảnh kết quả theo cách thông thường là không thể hoặc đòi hỏi phải chuyển dữ liệu về thiết bị nội bộ có giao diện người dùng (GUI). Terminal tích hợp trong VSCode có thể hiển thị hình ảnh trực tiếp, giúp bạn kiểm tra kết quả dự đoán ngay tại nơi bạn chạy inference mà không cần sao chép tệp về máy tính của mình. Hướng dẫn này sẽ đi qua các bước thiết lập, kết nối 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, xem trạng thái Issue, hoặc tài liệu để cập nhật thông tin về hỗ trợ Windows khi 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 trong terminal tích hợp là sixel và iTerm. Hướng dẫn này sẽ trình bày cách sử dụng giao thức sixel.
Link to this sectionQuy 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 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 inference, sau đó vẽ 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 chế độ dự đoán (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 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".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 lấy đối tượng ở chỉ mục
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)
Link to this sectionVí 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.
Link to this sectionVí 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 lấy đối tượng ở chỉ mục
1được trả về. - 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 lệnh clear để "xóa" chế độ xem hình ảnh trong terminal.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionLà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:
-
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ế độ dự đoán (predict mode).
Link to this sectionTạ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. Hỗ trợ đồ họa terminal bằng sixel trên Windows vẫn đang được phát triển. Để cập nhật khả năng 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.
Link to this sectionTôi phải làm gì nếu gặp sự cố hiển thị hình ảnh trong terminal VSCode?#
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ư hiển thị trong phần Quy trình, sau đó khởi động lại terminal tích hợp để 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à script 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ẽ đưa ra lỗi nếu hình ảnh trống hoặc không phải là 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 về trạng thái hỗ trợ hình ảnh trong terminal.
Link to this sectionYOLO 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 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 bạn nên bắt đầu với hình ảnh tĩnh và xác minh tính tương thích. Hãy cân nhắc rủi ro khi thử nghiệm với kết quả video và lưu ý đến các hạn chế về hiệu năng. Để biết thêm thông tin về cách vẽ kết quả inference, hãy truy cập trang chế độ dự đoán (predict mode).
Link to this sectionLàm thế nào để khắc phục sự cố với thư viện python-sixel?#
Gói sixel là một fork của thư viện PySixel không còn được duy trì và là một trình bao bọc Python mỏng cho Pillow (PIL). Nếu import sixel thất bại hoặc SixelWriter().draw() gây ra 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 đã có sẵn và kiểm tra kho lưu trữ GitHub python-sixel để biết các ghi chú cụ thể theo nền tảng. Để biết thêm về cách tạo hình ảnh bạn truyền vào draw(), hãy xem tài liệu chế độ dự đoán (predict mode).