Xem kết quả dự đoán (inference) trong terminal

Sixel example of image in 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.

Cảnh báo

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à 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 kích hoạt các thiết lập 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, vốn không còn được duy trì.

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

YOLO inference results displayed in terminal

Nguy hiểm

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

Mẹo

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:

  1. Kích hoạt các thiết lập 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 dự đoán:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
  4. 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 VSCodetà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:

  1. Đả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"
  2. Xác minh việc cài đặt thư viện sixel:

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

  1. Đả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
  2. Xác minh rằng bạn đã có các phụ thuộc Python và hệ thống cần thiết.

  3. 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.

  4. 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 SixelWriter và 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)chế độ dự đoán.

Bình luận