Ana içeriğe geç

Python SnapScript Pipeline'ları

Python scripting ile 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, bu sayede hatalar ve çökmeler sorunsuz bir şekilde yönetilir.

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

Limelight donanım, kamera arayüzü, ağ iletişimi, yayın ve temel görüntü ön işleme işlemlerini yönetir. Tek yapmanız gereken runPipeline() adında bir python fonksiyonu yazmaktır.

  • Sunduğumuz en önemli özelliklerden biri tek tıklamayla çalışan crosshair'dir. Crosshair, çift crosshair, tx, ty, ta, ts, tvert ve diğer tüm standart limelight NetworkTables okumaları, python runPipeline() fonksiyonundan döndürdüğünüz kontüre otomatik olarak kilitlenir.
  • Kendi gerçek zamanlı görselleştirmelerinizi, eşikleme işlemlerinizi, filtrelemelerinizi yazın ve isterseniz backend'imizi tamamen atlayın.
    • Limelight'ın python scripting'i tam OpenCV ve numpy kütüphanelerine erişim sağlar.
    • Görüntüye erişimin ötesinde, runPipeline() fonksiyonu robottan gelen verilere de erişebilir. FTC takımları updatePythonInputs() kullanabilir ve FRC takımları "llrobot" NetworkTables sayı dizisini güncelleyebilir. Robotlarınızdan python scriptlerinize görselleştirme veya gelişmiş uygulamalar için herhangi bir veri gönderin (IMU verileri, poz verileri, robot hızı vb. python scriptlerinde kullanılmak üzere gönderilebilir)
    • runPipeline fonksiyonu ayrıca getPythonOutputs() ile ve "llpython" networktables sayı dizisinden erişilebilen bir sayı dizisi çıktısı verir. Bu, Limelight'ın crosshair'ini ve diğer işlevlerini tamamen atlayarak robotlarınıza kendi özel verilerinizi gönderebileceğiniz anlamına gelir.
    • Python scriptleri c++ ortamımız içinde sandbox'lanmıştır, bu yüzden çökmeler konusunda endişelenmenize gerek yoktur. Scriptlerdeki değişiklikler anında uygulanır ve tüm hata mesajları doğrudan web arayüzüne yazdırılır.

Minimal Limelight Python Script'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)
# aşağıdaki HSV Min/Max değerlerine düşmeyen pikselleri
# kaldırarak hsv'yi ikili 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 kontürleri bul
contours, _ = cv2.findContours(img_threshold,
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largestContour = np.array([[]])

# robota geri gönderilecek değerler için boş bir dizi başlat
llpython = [0,0,0,0,0,0,0,0]

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

# kontürü ç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önderilecek bazı özel verileri kaydet
llpython = [1,x,y,w,h,9,8,7]

# LL crosshair için en büyük kontürü, değiştirilmiş görüntüyü ve özel robot verilerini döndür
return largestContour, image, llpython