मुख्य कंटेंट तक स्किप करें

Python SnapScript पाइपलाइन्स

Python स्क्रिप्टिंग के साथ, आप अपनी खुद की पाइपलाइन्स को तेजी से बनाने के लिए OpenCV की पूरी शक्ति का उपयोग कर सकते हैं। Python इंटरप्रेटर Limelight के C++ बैकएंड में एकीकृत है, इसलिए त्रुटियों और क्रैश को सुचारू रूप से संभाला जाता है।

नियमित SnapScript पाइपलाइन्स सीधे Limelight वेब इंटरफेस में प्रोग्राम की जाती हैं।

Limelight हार्डवेयर, कैमरा इंटरफेसिंग, नेटवर्किंग, स्ट्रीमिंग और बेसिक इमेज प्री-प्रोसेसिंग को संभालता है। आपको केवल runPipeline() नामक एक Python फंक्शन लिखना होगा।

  • हमारी सबसे महत्वपूर्ण सुविधाओं में से एक है वन-क्लिक क्रॉसहेयर। क्रॉसहेयर, डुअल क्रॉसहेयर, tx, ty, ta, ts, tvert, और अन्य सभी मानक Limelight NetworkTables रीडिंग्स स्वचालित रूप से Python runPipeline() फंक्शन से वापस आने वाले कंटूर से जुड़ जाएंगी।
  • अपने खुद के रीयल-टाइम विजुअलाइजेशन, थ्रेशोल्डिंग, फिल्टरिंग लिखें, और यदि चाहें तो हमारे बैकएंड को पूरी तरह से बायपास करें।
    • Limelight की Python स्क्रिप्टिंग में पूर्ण OpenCV और numpy लाइब्रेरी तक पहुंच है।
    • इमेज तक पहुंच के अलावा, runPipeline() फंक्शन को रोबोट से डेटा तक भी पहुंच है। FTC टीमें updatePythonInputs() का उपयोग कर सकती हैं और FRC टीमें "llrobot" NetworkTables नंबर ऐरे को अपडेट कर सकती हैं। विजुअलाइजेशन या उन्नत एप्लिकेशन के लिए अपने रोबोट से अपनी Python स्क्रिप्ट में कोई भी डेटा भेजें (कोई IMU डेटा, पोज डेटा, रोबोट वेलोसिटी आदि भेज सकता है)
    • runPipeline फंक्शन एक नंबर ऐरे भी आउटपुट करता है जो getPythonOutputs() और "llpython" नेटवर्कटेबल्स नंबर ऐरे से एक्सेस किया जा सकता है। इसका मतलब है कि आप Limelight के क्रॉसहेयर और अन्य कार्यक्षमता को पूरी तरह से बायपास कर सकते हैं और अपना कस्टम डेटा अपने रोबोट को वापस भेज सकते हैं।
    • Python स्क्रिप्ट हमारे C++ वातावरण में सैंडबॉक्स हैं, इसलिए आपको क्रैश की चिंता नहीं करनी पड़ती। स्क्रिप्ट में परिवर्तन तुरंत लागू होते हैं, और कोई भी त्रुटि संदेश सीधे वेब इंटरफेस पर प्रिंट होते हैं।

न्यूनतम Limelight Python स्क्रिप्ट


import cv2
import numpy as np

# runPipeline() को Limelight के बैकएंड द्वारा हर फ्रेम पर कॉल किया जाता है।
def runPipeline(image, llrobot):
# इनपुट इमेज को HSV कलर स्पेस में कनवर्ट करें
img_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# HSV को बाइनरी इमेज में कनवर्ट करें उन पिक्सेल्स को हटाकर
# जो निम्नलिखित HSV Min/Max वैल्यूज के भीतर नहीं आते
img_threshold = cv2.inRange(img_hsv, (60, 70, 70), (85, 255, 255))

# नई बाइनरी इमेज में कंटूर्स ढूंढें
contours, _ = cv2.findContours(img_threshold,
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largestContour = np.array([[]])

# रोबोट को वापस भेजने के लिए वैल्यूज की एक खाली ऐरे इनिशियलाइज करें
llpython = [0,0,0,0,0,0,0,0]

# यदि कंटूर्स का पता चला है, तो उन्हें ड्रा करें
if len(contours) > 0:
cv2.drawContours(image, contours, -1, 255, 2)
# सबसे बड़े कंटूर को रिकॉर्ड करें
largestContour = max(contours, key=cv2.contourArea)

# कंटूर को घेरने वाला अनरोटेटेड बाउंडिंग बॉक्स प्राप्त करें
x,y,w,h = cv2.boundingRect(largestContour)

# अनरोटेटेड बाउंडिंग बॉक्स ड्रा करें
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,255),2)

# रोबोट को वापस भेजने के लिए कुछ कस्टम डेटा रिकॉर्ड करें
llpython = [1,x,y,w,h,9,8,7]

# LL क्रॉसहेयर के लिए सबसे बड़ा कंटूर, मॉडिफाइड इमेज, और कस्टम रोबोट डेटा वापस करें
return largestContour, image, llpython