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 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ç#
-
Öncelikle VSCode'da
terminal.integrated.enableImagesveterminal.integrated.gpuAccelerationayarlarını etkinleştirmen gerekir."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
python-sixelkitaplığını sanal ortamına yükle. Bu kitaplık, artık bakımı yapılmayanPySixelkitaplığının bir çatallanmış sürümüdür.pip install sixel -
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)!- Kullanabileceğin olası bağımsız değişkenleri görmek için çizim yöntemi parametrelerine bak.
-
Şimdi,
np.ndarrayverisinibytesverisine dönüştürmek için OpenCV kullan. Ardından "dosya benzeri" bir nesne oluşturmak içinio.BytesIOkullan.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)- Diğer görüntü uzantılarını kullanmak da mümkündür.
- Yalnızca döndürülen
1dizinindeki nesne gereklidir.
-
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ı#
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)- Diğer görüntü uzantılarını kullanmak da mümkündür.
- Yalnızca döndürülen
1dizinindeki nesne gereklidir. - Kullanabileceğin olası bağımsız değişkenleri görmek için çizim yöntemi parametrelerine bak.
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:
-
Gerekli VSCode ayarlarını etkinleştir:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
sixel kitaplığını yükle:
pip install sixel -
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() -
Çı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:
- Süreç bölümünde gösterildiği gibi hem
terminal.integrated.enableImageshem determinal.integrated.gpuAccelerationöğelerinin etkin olduğunu doğrula, ardından ayarların uygulanması için tümleşik terminali yeniden başlat. sixelöğesinin, komut dosyanın çalıştığı sanal ortamla (pip install sixel) aynı ortama yüklendiğini doğrula.- Kodlamadan önce
plotöğesinin geçerli birnp.ndarrayolduğundan emin ol; çünkü görüntü boşsa veya geçerli bir dizi değilsecv2.imencodehata 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.
- Süreç bölümünde gösterildiği gibi hem
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.
sixelpaketi, bakımı yapılmayanPySixelkitaplığının bir çatallanmış sürümüdür ve Pillow (PIL) üzerinde ince bir Python sarmalayıcısıdır.import sixelbaşarısız olursa veyaSixelWriter().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.