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

पायथन SnapScript पाइपलाइन्स

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

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

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

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

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


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