एआई विज़न सेंसर#
परिचय#
आईक्यू एआई विज़न सेंसर वस्तुओं, रंगों और अप्रैलटैग आईडी का पता लगा सकता है और उन्हें ट्रैक कर सकता है। इससे रोबोट अपने आसपास के वातावरण का विश्लेषण कर सकता है, वस्तुओं का पीछा कर सकता है और पता लगाए गए दृश्य डेटा के आधार पर प्रतिक्रिया कर सकता है।
नीचे दिए गए उदाहरणों के लिए, कॉन्फ़िगर किए गए IQ AI विज़न सेंसर को ai_vision_1नाम दिया जाएगा, और कॉन्फ़िगर किए गए कलर सिग्नेचर ऑब्जेक्ट, जैसे RED_BOX, का उपयोग इस API दस्तावेज़ीकरण में बाद के सभी उदाहरणों में AiVision क्लास विधियों का संदर्भ देते समय किया जाएगा।
नीचे सभी विधियों की सूची दी गई है:
गेटर्स — आईक्यू एआई विज़न सेंसर से डेटा प्राप्त करें।
take_snapshot— एक विशिष्ट हस्ताक्षर के लिए डेटा कैप्चर करता है।installed— क्या आईक्यू एआई विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से जुड़ा है।
गुणधर्म — take_snapshot से प्राप्त ऑब्जेक्ट डेटा।
.exists— क्या वस्तु वर्तमान पहचान में मौजूद है।.width— पता लगाए गए ऑब्जेक्ट की चौड़ाई।.height— पता लगाई गई वस्तु की ऊँचाई।.centerX— वस्तु के केंद्र की X स्थिति।.centerY— वस्तु के केंद्र की Y स्थिति।.angle— रंग कोड या अप्रैलटैग आईडी का अभिविन्यास।.originX— वस्तु के शीर्ष-बाएँ कोने की X स्थिति।.originY— वस्तु के शीर्ष-बाएँ कोने की Y स्थिति।.id— ऑब्जेक्ट का वर्गीकरण या टैग आईडी।.score— एआई वर्गीकरण के लिए आत्मविश्वास स्कोर।
कंस्ट्रक्टर — सेंसरों को मैन्युअल रूप से आरंभ और कॉन्फ़िगर करें।
टिककर खेल#
take_snapshot#
take_snapshot IQ AI विज़न सेंसर के फ्रेम से डेटा को एक एकल हस्ताक्षर में फ़िल्टर करता है - सेंसर द्वारा पहचाने जा सकने वाली किसी चीज़ का सहेजा गया विवरण, जैसे कि एक पूर्व-प्रशिक्षित वस्तु, एक अप्रैलटैग आईडी, या एक कॉन्फ़िगर किया गया रंग हस्ताक्षर या रंग कोड - और एक टपल लौटाता है।
कलर सिग्नेचर और कलर कोड को इस विधि के साथ उपयोग करने से पहले विज़न यूटिलिटी में पहले कॉन्फ़िगर किया जाना चाहिए।
यह टपल, इंडेक्स 0 से शुरू होकर, चौड़ाई के अनुसार सबसे बड़े से सबसे छोटे क्रम में व्यवस्थित वस्तुओं को संग्रहीत करता है। प्रत्येक वस्तु के गुण को उसके इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। यदि कोई मेल खाने वाली वस्तुएँ नहीं मिलती हैं, तो एक खाली टपल लौटाया जाता है।
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
पैरामीटर |
विवरण |
|---|---|
|
डेटासेट को फ़िल्टर करके केवल दिए गए सिग्नेचर का डेटा शामिल किया जाता है। उपलब्ध सिग्नेचर हैं:
|
|
यह वैकल्पिक है। यह 1 से 24 तक लौटाए जा सकने वाले ऑब्जेक्ट की अधिकतम संख्या निर्धारित करता है (डिफ़ॉल्ट: 8)। |
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
नोट: लौटाए गए टपल को केवल चौड़ाई के आधार पर ही नहीं, बल्कि किसी भी प्रॉपर्टी के आधार पर सॉर्ट किया जा सकता है, इसके लिए Python के sorted फ़ंक्शन का उपयोग किया जाता है। उदाहरण के लिए, अप्रैल टैग आईडी के आधार पर सॉर्ट करना:
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
या फिर ऊंचाई के आधार पर क्रमबद्ध करना:
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
एआई वर्गीकरण#
IQ AI विज़न सेंसर कुछ AI वर्गीकरणों के अंतर्गत विभिन्न वस्तुओं का पता लगा सकता है। डिवाइस विंडो में AI विज़न सेंसर को कॉन्फ़िगर करते समय चयनित AI वर्गीकरण मॉडल के आधार पर, विभिन्न वस्तुओं का पता लगाया जाएगा। वर्तमान में उपलब्ध मॉडल हैं:
कक्षा के वस्तुओं
आईडी नंबर |
एआई वर्गीकरण |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX IQ रोबोटिक्स प्रतियोगिता मिक्स एंड मैच
आईडी नंबर |
एआई वर्गीकरण |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
VEX IQ रोबोटिक्स प्रतियोगिता का स्तर बढ़ा
आईडी नंबर |
एआई वर्गीकरण |
|---|---|
0 |
|
1 |
|
2 |
|
रंग हस्ताक्षर#
कलर सिग्नेचर एक विशिष्ट रंग होता है जिसे IQ AI विज़न सेंसर पहचान सकता है। ये सिग्नेचर IQ AI विज़न सेंसर को वस्तुओं को उनके रंग के आधार पर पहचानने और ट्रैक करने में सक्षम बनाते हैं। एक बार कलर सिग्नेचर कॉन्फ़िगर हो जाने पर, सेंसर अपने दृश्य क्षेत्र में उस विशिष्ट रंग वाली वस्तुओं की पहचान कर सकता है। कलर सिग्नेचर का उपयोग take_snapshot के साथ वास्तविक समय में रंगीन वस्तुओं को संसाधित करने और पहचानने के लिए किया जाता है।
किसी प्रोजेक्ट में कॉन्फ़िगर किए गए कलर सिग्नेचर का उपयोग करने के लिए, उसका नाम सेंसर का नाम, दो अंडरस्कोर और फिर कलर सिग्नेचर का नाम होना चाहिए। उदाहरण के लिए: ai_vision_1__RED_BOX।
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color detected!")
wait(100, MSEC)
रंग कोड#
कलर कोड एक संरचित पैटर्न होता है जो विशिष्ट क्रम में व्यवस्थित रंग चिह्नों से बना होता है। ये कोड IQ AI विज़न सेंसर को पूर्वनिर्धारित रंग पैटर्न को पहचानने में सक्षम बनाते हैं। कलर कोड जटिल वस्तुओं की पहचान करने या स्वचालित नेविगेशन के लिए विशिष्ट मार्कर बनाने में उपयोगी होते हैं।
किसी प्रोजेक्ट में कॉन्फ़िगर किए गए कलर कोड का उपयोग करने के लिए, उसका नाम सेंसर का नाम, दो अंडरस्कोर और फिर कलर कोड का नाम होना चाहिए। उदाहरण के लिए: ai_vision_1__BOX_CODE।
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)
installed#
installed एक बूलियन मान लौटाता है जो दर्शाता है कि क्या IQ AI विज़न सेंसर वर्तमान में IQ (दूसरी पीढ़ी) ब्रेन से जुड़ा है।
True— आईक्यू एआई विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से जुड़ा है।False— आईक्यू एआई विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से जुड़ा नहीं है।
Usage:
ai_vision_1.installed()
पैरामीटर |
विवरण |
|---|---|
इस विधि के कोई मानदंड नहीं हैं। |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
गुण#
take_snapshot का उपयोग करने के बाद tuple में संग्रहीत प्रत्येक ऑब्जेक्ट के साथ दस गुण शामिल होते हैं।
.id और .score को छोड़कर सभी प्रॉपर्टी मान, IQ AI विज़न सेंसर के दृश्य में पता लगाए गए ऑब्जेक्ट की स्थिति और आकार का वर्णन करते हैं, जिस क्षण take_snapshot उपयोग किया गया था। ये मान सेंसर के 320 x 240 पिक्सेल रिज़ॉल्यूशन के आधार पर पिक्सेल में मापे जाते हैं।
.exists#
.exists एक बूलियन लौटाता है जो इंगित करता है कि टपल में इंडेक्स मौजूद है या नहीं।
True— सूचकांक मौजूद है।False— इंडेक्स मौजूद नहीं है।
# Check if at least two objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[1].exists:
brain.screen.print("At least 2")
else:
brain.screen.print("Less than 2")
wait(50, MSEC)
.width#
.width पिक्सेल में पता लगाए गए ऑब्जेक्ट की चौड़ाई लौटाता है, जो 1 और 320 के बीच एक पूर्णांक है।
# Approach an object until it's at least 100 pixels wide
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].width < 100:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
.height पिक्सेल में पता लगाए गए ऑब्जेक्ट की ऊंचाई लौटाता है, जो 1 और 240 के बीच एक पूर्णांक है।
# Approach an object until it's at least 90 pixels tall
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].height < 90:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX पता लगाए गए ऑब्जेक्ट के केंद्र का x-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 320 के बीच एक पूर्णांक है।
# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if 140 < objects[0].centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY पता लगाए गए ऑब्जेक्ट के केंद्र का y-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 240 के बीच एक पूर्णांक है।
# Approach an object until the object's center is
# high enough in the field of view
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].centerY < 150:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
.angle पता लगाए गए कलर कोड या अप्रैलटैग आईडी का ओरिएंटेशन डिग्री में लौटाता है, जो 0 और 359 के बीच एक पूर्णांक है।
# Turn left or right depending on how a
# configured Color Code is rotated
while True:
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का x-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 320 के बीच एक पूर्णांक है।
# Display if an object is to the left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].originX < 120:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
else:
brain.screen.print("No objects")
wait(100, MSEC)
.originY#
.originY पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का y-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 240 के बीच एक पूर्णांक है।
# Display if an object is close or far
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].originY < 110:
brain.screen.print("Close")
else:
brain.screen.print("Far")
.id#
.id पता लगाए गए एआई वर्गीकरण या अप्रैलटैग आईडी को पूर्णांक के रूप में लौटाता है। एआई वर्गीकरण एआई विज़न यूटिलिटी में कॉन्फ़िगर किए गए मॉडल पर निर्भर करता है।
अप्रैलटैग आईडी के लिए, .id प्रॉपर्टी 0 से 36 की सीमा में पता लगाए गए अप्रैलटैग आईडी नंबर को दर्शाती है। एआई वर्गीकरण के लिए, .id प्रॉपर्टी एआई वर्गीकरण अनुभाग में पूर्वनिर्धारित आईडी से मेल खाती है।
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.score#
.score पता लगाए गए एआई वर्गीकरण का आत्मविश्वास स्कोर 1 और 100 के बीच एक पूर्णांक के रूप में लौटाता है।
कम स्कोर का मतलब है कि सेंसर को पता लगाए गए ऑब्जेक्ट के बारे में कम भरोसा है, जबकि उच्च स्कोर का मतलब है कि सेंसर को अधिक भरोसा है।
# Display if a score is confident
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
if objects[0].exists:
if objects[0].score > 95:
brain.screen.print("Confident")
else:
brain.screen.print("Not confident")
wait(50, MSEC)
कंस्ट्रक्टर्स#
कंस्ट्रक्टर का उपयोग मैन्युअल रूप से AiVision, Colordesc, और Codedesc ऑब्जेक्ट बनाने के लिए किया जाता है, जो VEXcode के बाहर IQ AI विज़न सेंसर को कॉन्फ़िगर करने के लिए आवश्यक हैं।
AI Vision Sensor#
AiVision एक IQ AI विज़न सेंसर बनाता है।
उपयोग
Vision(port, sigs)
पैरामीटर |
विवरण |
|---|---|
|
आईक्यू एआई विजन सेंसर किस स्मार्ट पोर्ट से जुड़ा है, 1 से 12 तक के अंकों में से। |
|
वैकल्पिक। एक या अधिक हस्ताक्षरों के नाम:
|
उदाहरण
ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
Color Signature#
Colordesc एक कलर सिग्नेचर बनाता है। एक IQ AI विज़न सेंसर पर एक साथ अधिकतम सात अलग-अलग कलर सिग्नेचर स्टोर किए जा सकते हैं।
उपयोग:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
पैरामीटर |
विवरण |
|---|---|
|
|
|
विज़न यूटिलिटी में |
|
विजन यूटिलिटी में uMax का मान |
|
विज़न यूटिलिटी में uMean का मान |
|
विज़न यूटिलिटी में |
|
विज़न यूटिलिटी में vMax का मान |
|
विज़न यूटिलिटी में vMean का मान |
|
विज़न यूटिलिटी में मान |
|
विज़न यूटिलिटी में |
कलर सिग्नेचर बनाने के लिए आवश्यक मान प्राप्त करने हेतु, विज़न यूटिलिटी पर जाएँ। कलर सिग्नेचर कॉन्फ़िगर हो जाने के बाद, कॉन्फ़िगरेशन विंडो से पैरामीटर मानों को कॉपी करें।
उदाहरण
# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = ai_vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
Codedesc एक कलर कोड बनाता है। इसके उपयोग के लिए कम से कम दो पहले से परिभाषित कलर सिग्नेचर की आवश्यकता होती है। एक विज़न सेंसर पर एक साथ अधिकतम आठ अलग-अलग कलर कोड स्टोर किए जा सकते हैं।
उपयोग:
Codedesc(sig1, sig2, sig3, sig4, sig5)
पैरामीटर |
विवरण |
|---|---|
|
पहले से निर्मित रंग हस्ताक्षर। |
|
पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
उदाहरण
# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)