Meet YOLO26: next-gen vision AI.

Link to this sectionCách xem kết quả dự đoán (inference) YOLO trong Terminal VSCode#

Sixel example of image in Terminal

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

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à sixeliTerm. 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#

  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 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 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)!
    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".

    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 lấy đối tượng ở chỉ mục 1 được trả về.
  5. 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#

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.

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)
  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 lấy đối tượng ở chỉ mục 1 được trả về.
  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 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:

  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ế độ 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 VSCodetà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:

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

Bình luận