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

snapscript-pipelines

Here's the translated version of the Docusaurus page for Hindi users:


पायथन 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" networktables संख्या सरणी से पहुंच योग्य है। इसका मतलब है कि आप 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 न्यूनतम/अधिकतम मानों के भीतर नहीं आते हैं
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