Bỏ để qua phần nội dung

Xem kết quả suy luận trong một thiết bị đầu cuối

Ví dụ thứ sáu về hình ảnh trong Terminal

Hình ảnh từ trang web libsixel .

Động lực

Khi kết nối với máy từ xa, thông thường không thể hiển thị kết quả hình ảnh hoặc yêu cầu di chuyển dữ liệu sang thiết bị cục bộ có GUI. Thiết bị đầu cuối tích hợp VSCode cho phép hiển thị trực tiếp hình ảnh. Đây là một minh chứng ngắn về cách sử dụng điều này kết hợp với ultralytics với Kết quả dự đoán.

Cảnh báo

Chỉ tương thích với Linux và MacOS. Kiểm tra VSCode Khokiểm Tình trạng vấn đềhoặc tư liệu để cập nhật về hỗ trợ Windows để xem hình ảnh trong thiết bị đầu cuối với sixel.

Các giao thức tương thích với VSCode để xem hình ảnh bằng thiết bị đầu cuối tích hợp là: sixeliTerm. Hướng dẫn này sẽ trình bày việc sử dụng sixel Protocol.

Quá trình

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

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

VSCode bật cài đặt hình ảnh thiết bị đầu cuối

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

    pip install sixel
    
  2. Nhập các thư viện liên quan

    import io
    
    import cv2 as cv
    
    from ultralytics import YOLO
    from sixel import SixelWriter
    
  3. Tải một mô hình và thực hiện suy luận, sau đó vẽ kết quả và lưu trữ trong một biến. Xem thêm về đối số suy luận và 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("yolov8n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot() #(1)!
    
    1. Xem các tham số phương thức vẽ để xem các đối số có thể sử dụng.
  4. Bây giờ, sử dụng OpenCV để chuyển đổi numpy.ndarray đến bytes dữ liệu. Sau đó sử dụng io.BytesIO để tạo một đối tượng "giống như tệp".

    # Results image as bytes
    im_bytes = cv.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 tiện ích mở rộng hình ảnh khác.
    2. Chỉ đối tượng tại index 1 Đó là trả lại là cần thiết.
  5. Tạo một SixelWriter phiên bản, và sau đó sử dụng .draw() phương pháp vẽ hình ảnh trong thiết bị đầu cuối.

    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

Kết quả suy luận ví dụ

Xem hình ảnh trong Terminal

Nguy cơ

Sử dụng ví dụ này với video hoặc khung GIF động chưa được thử nghiệm. Cố gắng tự chịu rủi ro.

Ví dụ về mã đầy đủ

import io

import cv2 as cv

from ultralytics import YOLO
from sixel import SixelWriter

# Load a model
model = YOLO("yolov8n.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 = cv.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 tiện ích mở rộng hình ảnh khác.
  2. Chỉ đối tượng tại index 1 Đó là trả lại là cần thiết.
  3. Xem các tham số phương thức vẽ để xem các đối số có thể sử dụng.

Mẹo

Bạn có thể cần sử dụng clear để "xóa" chế độ xem của hình ảnh trong thiết bị đầu cuối.



Đã tạo 2024-03-09, Cập nhật 2024-04-27
Tác giả: glenn-jocher (1), Burhan-Q (1)

Ý kiến