Ultralytics YOLO27:

YOLO Çıkarım Sonuçlarını VSCode Terminalinde Görüntüleme#

libsixel web sitesinden alınan görüntü.

Gerekçe#

SSH üzerinden uzak bir makineye bağlandığında, görüntü sonuçlarını normal şekilde görselleştirmek mümkün değildir veya verileri GUI'ye sahip yerel bir cihaza taşıman gerekir. VSCode tümleşik terminali görüntüleri doğrudan işleyebilir; böylece dosyaları dizüstü bilgisayarına geri kopyalamadan, çıkarımı çalıştırdığın yerde tahmin sonuçlarını inceleyebilirsin. Bu kılavuzda kurulumu etkinleştirme, kodu bağlama adımları ele alınır ve sık sorulan sorular yanıtlanır.

Yalnızca Linux ve macOS

Yalnızca Linux ve macOS ile uyumludur. Terminalde sixel ile görüntüleri görmek üzere Windows desteğiyle ilgili güncellemeler için VSCode deposuna, Issue durumuna veya belgelere göz at.

Tümleşik terminali kullanarak görüntüleri görüntülemek için VSCode ile uyumlu protokoller sixel ve iTerm protokolleridir. Bu kılavuzda sixel protokolünün kullanımı gösterilmektedir.

Süreç#

  1. Öncelikle VSCode'da terminal.integrated.enableImages ve terminal.integrated.gpuAcceleration ayarlarını etkinleştirmen gerekir.

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

    VSCode enable terminal images setting

  2. python-sixel kitaplığını sanal ortamına yükle. Bu kitaplık, artık bakımı yapılmayan PySixel kitaplığının bir çatallanmış sürümüdür.

    pip install sixel
  3. Bir model yükleyip çıkarımı çalıştır, ardından sonuçları çiz ve bir değişkende sakla. Çıkarım bağımsız değişkenleri ve sonuçlarla çalışma hakkında daha fazla bilgi için tahmin modu sayfasına bak.

    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. Kullanabileceğin olası bağımsız değişkenleri görmek için çizim yöntemi parametrelerine bak.
  4. Şimdi, np.ndarray verisini bytes verisine dönüştürmek için OpenCV kullan. Ardından "dosya benzeri" bir nesne oluşturmak için io.BytesIO kullan.

    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. Diğer görüntü uzantılarını kullanmak da mümkündür.
    2. Yalnızca döndürülen 1 dizinindeki nesne gereklidir.
  5. Bir SixelWriter örneği oluştur, ardından görüntüyü terminalde çizmek için .draw() yöntemini kullan.

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

Örnek Çıkarım Sonuçları#

YOLO inference results displayed in terminal

Videolar ve GIF'ler test edilmemiştir

Bu örneğin videolarla veya hareketli GIF kareleriyle kullanımı test edilmemiştir. Denemeyi kendi sorumluluğunla yap.

Eksiksiz Kod Örneği#

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. Diğer görüntü uzantılarını kullanmak da mümkündür.
  2. Yalnızca döndürülen 1 dizinindeki nesne gereklidir.
  3. Kullanabileceğin olası bağımsız değişkenleri görmek için çizim yöntemi parametrelerine bak.
Görüntüyü temizleme

Terminaldeki görüntü görünümünü "silmek" için clear kullanman gerekebilir.

SSS#

  • YOLO çıkarım sonuçlarını macOS veya Linux'ta bir VSCode terminalinde görüntülemek için şu adımları izle:

    1. Gerekli VSCode ayarlarını etkinleştir:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. sixel kitaplığını yükle:

      pip install sixel
    3. YOLO modelini yükle ve çıkarımı çalıştır:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="ultralytics/assets/bus.jpg")
      plot = results[0].plot()
    4. Çıkarım sonucu görüntüsünü baytlara dönüştür ve terminalde görüntüle:

      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)

    Daha fazla ayrıntı için tahmin modu sayfasını ziyaret et.

  • sixel protokolü şu anda yalnızca Linux ve macOS'ta desteklenmektedir; bunun nedeni bu platformların sixel grafikleriyle uyumlu yerel terminal özelliklerine sahip olmasıdır. sixel kullanılarak terminal grafiklerine yönelik Windows desteği hâlâ geliştirilmektedir. Windows uyumluluğuyla ilgili güncellemeler için VSCode Issue durumuna ve belgelere göz at.

  • Hiçbir şey işlenmiyorsa şu kontrolleri sırayla yap:

    1. Süreç bölümünde gösterildiği gibi hem terminal.integrated.enableImages hem de terminal.integrated.gpuAcceleration öğelerinin etkin olduğunu doğrula, ardından ayarların uygulanması için tümleşik terminali yeniden başlat.
    2. sixel öğesinin, komut dosyanın çalıştığı sanal ortamla (pip install sixel) aynı ortama yüklendiğini doğrula.
    3. Kodlamadan önce plot öğesinin geçerli bir np.ndarray olduğundan emin ol; çünkü görüntü boşsa veya geçerli bir dizi değilse cv2.imencode hata verir. results[0].plot() öğesinin kabul ettiği değerler için çizim yöntemi parametrelerine bak.

    Sorunlar devam ederse terminal görüntüsü desteğinin durumunu öğrenmek için VSCode deposuna başvur.

  • Video çıkarım sonuçlarının veya hareketli GIF karelerinin sixel kullanılarak terminalde görüntülenmesi şu anda test edilmemiştir ve desteklenmeyebilir. Statik görüntülerle başlamanı ve uyumluluğu doğrulamanı öneririz. Performans kısıtlamalarını göz önünde bulundurarak video sonuçlarını kendi sorumluluğunla dene. Çıkarım sonuçlarını çizme hakkında daha fazla bilgi için tahmin modu sayfasını ziyaret et.

  • sixel paketi, bakımı yapılmayan PySixel kitaplığının bir çatallanmış sürümüdür ve Pillow (PIL) üzerinde ince bir Python sarmalayıcısıdır. import sixel başarısız olursa veya SixelWriter().draw() hata verirse paketin etkin sanal ortamına yüklendiğini doğrula, Pillow'un kullanılabilir olduğundan emin ol ve platforma özgü notlar için python-sixel GitHub deposuna göz at. draw() öğesine aktaracağın görüntüyü oluşturma hakkında daha fazla bilgi için tahmin modu belgelerine bak.

Yorumlar