Ultralytics YOLO27:
Get Started

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

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#

  1. Trước tiên, bạn phải bật các cài đặt terminal.integrated.enableImages và terminal.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 thư viện python-sixel trong môi trường ảo. Đây là một fork của thư viện PySixel, hiện không còn được duy trì.

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

YOLO inference results displayed in terminal

Chưa kiểm tra video và GIF

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)
  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 đối tượng ở chỉ mục 1 được trả về.
  3. Xem các tham số của phương thức plot để biết những đối số có thể sử dụng.
Xóa hình ảnh

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:

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

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

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

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

  • 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 sixel là một fork của thư viện PySixel không còn được duy trì và là wrapper Python gọn nhẹ cho Pillow (PIL). Nếu import sixel không hoạt động hoặc SixelWriter().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ào draw(), hãy xem tài liệu predict mode.

Bình luận