Ana içeriğe geç

Python SnapScript Pipeline'ları

Python komut dosyalarıyla, OpenCV'nin tüm gücünü kullanarak kendi pipeline'larınızı hızlıca oluşturabilirsiniz. Python yorumlayıcısı Limelight'ın C++ backend'ine entegre edilmiştir, böylece hatalar ve çökmeler düzgün bir şekilde yönetilir.

Normal SnapScript pipeline'ları doğrudan Limelight web arayüzünde programlanır.

Limelight; donanım, kamera arayüzü, ağ, yayın ve temel görüntü ön işlemeyi halleder. Tek yapmanız gereken runPipeline() adlı bir Python fonksiyonu yazmaktır.

  • Sunduğumuz en önemli özelliklerden biri tek tıklamayla artı işareti oluşturmadır. Artı işareti, çift artı işareti, tx, ty, ta, ts, tvert ve diğer tüm standart Limelight NetworkTables okumaları, Python runPipeline() fonksiyonundan döndürdüğünüz kontura otomatik olarak kilitlenecektir.
  • Kendi gerçek zamanlı görselleştirmelerinizi, eşikleme ve filtreleme işlemlerinizi yazın ve isterseniz backend'imizi tamamen atlayın.
    • Limelight'ın Python betikleri tam OpenCV ve numpy kütüphanelerine erişime sahiptir.
    • Görüntüye erişimin yanı sıra, runPipeline() fonksiyonu robottan gelen verilere de erişebilir. FTC takımları updatePythonInputs()'u kullanabilir ve FRC takımları "llrobot" NetworkTables sayı dizisini güncelleyebilir. Görselleştirme veya gelişmiş uygulamalar için robotlarınızdan Python betiklerinize herhangi bir veri gönderin (IMU verisi, konum verisi, robot hızı vb. Python betiklerinde kullanılmak üzere gönderilebilir)
    • runPipeline fonksiyonu ayrıca getPythonOutputs() ve "llpython" networktables sayı dizisinden erişilebilen bir sayı dizisi çıktısı verir. Bu, Limelight'ın artı işareti ve diğer işlevselliğini tamamen atlayıp kendi özel verilerinizi robotlarınıza geri gönderebileceğiniz anlamına gelir.
    • Python betikleri C++ ortamımızda korumalı alanda çalışır, bu yüzden çökmeler konusunda endişelenmenize gerek yok. Betiklerdeki değişiklikler anında uygulanır ve hata mesajları doğrudan web arayüzüne yazdırılır.

Minimal Limelight Python Betiği


import cv2
import numpy as np

# runPipeline() Limelight'ın backend'i tarafından her karede çağrılır.
def runPipeline(image, llrobot):
# giriş görüntüsünü HSV renk uzayına dönüştür
img_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# hsv'yi aşağıdaki HSV Min/Max değerleri aralığında olmayan
# pikselleri kaldırarak ikili bir görüntüye dönüştür
img_threshold = cv2.inRange(img_hsv, (60, 70, 70), (85, 255, 255))

# yeni ikili görüntüde konturları bul
contours, _ = cv2.findContours(img_threshold,
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largestContour = np.array([[]])

# robota geri göndermek için boş bir değer dizisi başlat
llpython = [0,0,0,0,0,0,0,0]

# eğer konturlar tespit edildiyse, onları çiz
if len(contours) > 0:
cv2.drawContours(image, contours, -1, 255, 2)
# en büyük konturu kaydet
largestContour = max(contours, key=cv2.contourArea)

# konturu çevreleyen döndürülmemiş sınırlayıcı kutuyu al
x,y,w,h = cv2.boundingRect(largestContour)

# döndürülmemiş sınırlayıcı kutuyu çiz
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,255),2)

# robota geri göndermek için bazı özel veriler kaydet
llpython = [1,x,y,w,h,9,8,7]

# LL artı işareti için en büyük konturu, değiştirilmiş görüntüyü ve özel robot verisini döndür
return largestContour, image, llpython