Python SnapScript Pipelines
Python komut dosyaları ile OpenCV'nin tüm gücünü kullanarak hızlı bir şekilde kendi işlem hatlarınızı oluşturabilirsiniz. Python yorumlayıcısı, Limelight'ın C++ arka ucuna entegre edilmiştir, böylece hatalar ve çökmeler düzgün bir şekilde ele alınır.
Normal SnapScript işlem hatları doğrudan Limelight web arayüzünde programlanır.
Limelight; donanımı, kamera arayüzünü, ağ iletişimini, akışı 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 nişangâh oluşturmadır. Nişangâh, çift nişangâh, 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 arka ucumuzu tamamen atlayın.
- Limelight'ın Python komut dosyası oluşturma özelliği, tam OpenCV ve numpy kütüphanelerine erişim sağlar.
- Görüntüye erişimin yanı sıra, runPipeline() fonksiyonu robottan gelen verilere de erişebilir. FTC takımları updatePythonInputs() fonksiyonunu kullanabilir ve FRC takımları "llrobot" NetworkTables sayı dizisini güncelleyebilir. Robotlarınızdan Python betiklerinize görselleştirme veya gelişmiş uygulamalar için herhangi bir veri gönderin (IMU verileri, konum verileri, robot hızı vb. Python betiklerinde kullanılmak üzere gönderilebilir)
- runPipeline fonksiyonu ayrıca getPythonOutputs() ve "llpython" networktables sayı dizisi ile erişilebilen bir sayı dizisi çıktısı verir. Bu, Limelight'ın nişangâhını ve diğer işlevlerini tamamen atlayıp kendi özel verilerinizi robotlarınıza geri gönderebileceğiniz anlamına gelir.
- Python betikleri C++ ortamımız içinde korumalı alanda çalışır, bu nedenle çökmeler konusunda endişelenmenize gerek yoktur. 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() her kare için Limelight'ın arka ucu tarafından ç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 arası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 verileri kaydet
llpython = [1,x,y,w,h,9,8,7]
# LL nişangâhı için en büyük konturu, değiştirilmiş görüntüyü ve özel robot verilerini döndür
return largestContour, image, llpython