YOLO Vision 2026:

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ỉ dành cho Linux và macOS

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à sixeliTerm. Hướng dẫn này sẽ minh họa cách sử dụng giao thức sixel.

Quy trình#

  1. Trước tiên, bạn phải bật các cài đặt terminal.integrated.enableImagesterminal.integrated.gpuAcceleration trong VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. Cài đặt thư viện python-sixel trong môi trường ảo của bạn. Đây là một bản fork của thư viện PySixel, hiện không còn được duy trì.

    pip install sixel
  3. 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)!
    1. Xem tham số phương thức plot để biết các đối số có thể sử dụng.
  4. Bây giờ, hãy sử dụng OpenCV để chuyển đổi dữ liệu np.ndarray thành bytes. Sau đó sử dụng io.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)
    1. Bạn cũng có thể sử dụng các phần mở rộng hình ảnh khác.
    2. Chỉ cần sử dụng đối tượng được trả về ở chỉ mục 1.
  5. 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#

YOLO inference results displayed in terminal

Video và GIF chưa được kiểm thử

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)
  1. Bạn cũng có thể sử dụng các phần mở rộng hình ảnh khác.
  2. Chỉ cần sử dụng đối tượng được trả về ở chỉ mục 1.
  3. Xem tham số phương thức plot để biết các đối số có thể sử dụng.

Xóa hình ảnh

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:

    1. Bật các cài đặt cần thiết trong VSCode:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. Cài đặt thư viện sixel:

      pip install sixel
    3. 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()
    4. 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 VSCodetà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:

    1. Xác nhận rằng cả terminal.integrated.enableImagesterminal.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.
    2. 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).
    3. Đảm bảo plot là một np.ndarray hợp lệ trước khi mã hóa nó, vì cv2.imencode sẽ 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.

  • 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 sixel là một bản 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 trên Pillow (PIL). Nếu import sixel gặp lỗi hoặc SixelWriter().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ào draw(), hãy xem tài liệu chế độ predict.

Bình luận