ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΡƒΠΌΠΎΠ·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅

БиксСль ΠΏΡ€ΠΈΠΌΠ΅Ρ€ изобраТСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с сайта libsixel.

ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡ

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ машинС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ визуализация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСмСщСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° локальноС устройство с графичСским интСрфСйсом. Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» VSCode позволяСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния. Π­Ρ‚ΠΎ короткая дСмонстрация Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² сочСтании с ultralytics с Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ прСдсказаний.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

БовмСстим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Linux ΠΈ MacOS. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒ VSCode Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒ БостояниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΈΠ»ΠΈ докумСнтация для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Windows для просмотра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ с sixel.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, совмСстимыС с VSCode, для просмотра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ sixel ΠΈ iTerm. Π­Ρ‚ΠΎ руководство продСмонстрируСт использованиС sixel ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».

ΠŸΡ€ΠΎΡ†Π΅ΡΡ

  1. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ настройки terminal.integrated.enableImages ΠΈ terminal.integrated.gpuAcceleration Π² VSCode.

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

Настройка ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ VSCode

  1. Установи python-sixel Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π² Ρ‚Π²ΠΎΠ΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ Π’ΠΈΠ»ΠΊΠ° ΠΈΠ· PySixel Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая большС Π½Π΅ поддСрТиваСтся.

    pip install sixel
    
  2. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

    import io
    
    import cv2 as cv
    
    from ultralytics import YOLO
    from sixel import SixelWriter
    
  3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈ модСль ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈ Π²Ρ‹Π²ΠΎΠ΄, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡˆΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡˆΡŒ ΠΈΡ… Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Ρ‡ΠΈΡ‚Π°ΠΉ Π½Π° страницС Ρ€Π΅ΠΆΠΈΠΌΠ° прСдсказания.

    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. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° plot, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для использования.
  4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ OpenCV, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ numpy.ndarray Π½Π° bytes Π”Π°Π½Π½Ρ‹Π΅. Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ io.BytesIO Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ "Ρ„Π°ΠΉΠ»ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

    # 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. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
    2. Волько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с индСксом 1 ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ возвращаСтся, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ.
  5. Π‘ΠΎΠ·Π΄Π°ΠΉ SixelWriter экзСмпляр, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ .draw() ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΡƒΠΌΠΎΠ·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ изобраТСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅

ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

ИспользованиС этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ GIF-ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ»ΠΎΡΡŒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ Π½Π° свой страх ΠΈ риск.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

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. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
  2. Волько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с индСксом 1 ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ возвращаСтся, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ.
  3. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° plot, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для использования.

НаконСчник

Π’Π΅Π±Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ clear Ρ‡Ρ‚ΠΎΠ±Ρ‹ "ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ" Π²ΠΈΠ΄ изобраТСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.



Боздано 2024-03-09, ОбновлСно 2024-04-27
Авторы: glenn-jocher (1), Burhan-Q (1)

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ