Όραμα Τεχνητής Νοημοσύνης#
Εισαγωγή#
Ο αισθητήρας όρασης AI μπορεί να ανιχνεύσει και να παρακολουθήσει αντικείμενα, χρώματα και αναγνωριστικά AprilTag. Αυτό επιτρέπει στο ρομπότ να αναλύει το περιβάλλον του, να ακολουθεί αντικείμενα και να αντιδρά με βάση τα ανιχνευμένα οπτικά δεδομένα.
Αυτή η σελίδα χρησιμοποιεί ai_vision_1, RED_BOXκαι BOX_CODE ως παραδείγματα ονομάτων Αισθητήρα Όρασης AI, Υπογραφής Χρώματος και Κωδικού Χρώματος αντίστοιχα. Αντικαταστήστε τα με τα δικά σας διαμορφωμένα ονόματα, όπως απαιτείται.
Παρακάτω είναι μια λίστα με όλες τις μεθόδους:
Λήψη δεδομένων – Λήψη δεδομένων από τον αισθητήρα όρασης AI.
take_snapshot– Καταγράφει δεδομένα για μια συγκεκριμένη υπογραφή.installed– Εάν ο αισθητήρας όρασης AI είναι συνδεδεμένος στον εγκέφαλο EXP.
Ιδιότητες – Δεδομένα αντικειμένου που επιστράφηκαν από take_snapshot.
.exists– Εάν το αντικείμενο υπάρχει στην τρέχουσα ανίχνευση..width– Πλάτος του ανιχνευμένου αντικειμένου..height– Ύψος του ανιχνευμένου αντικειμένου..centerX– Η θέση X του κέντρου του αντικειμένου..centerY– Θέση Y του κέντρου του αντικειμένου..angle– Προσανατολισμός του Χρωματικού Κώδικα..originX– X position of the object’s top-left corner..originY– Y position of the object’s top-left corner..id– Classification or tag ID of the object..score– Βαθμολογία εμπιστοσύνης για ταξινομήσεις τεχνητής νοημοσύνης.
Κατασκευαστές – Μη αυτόματη αρχικοποίηση και διαμόρφωση του αισθητήρα AI Vision Sensor και των υπογραφών του.
Αποκτητές#
take_snapshot#
take_snapshot φιλτράρει δεδομένα από το πλαίσιο του αισθητήρα AI Vision Sensor σε μια μοναδική υπογραφή — μια αποθηκευμένη περιγραφή κάποιου πράγματος που μπορεί να αναγνωρίσει ο αισθητήρας, όπως ένα προ-εκπαιδευμένο αντικείμενο, ένα AprilTag ID ή μια διαμορφωμένη Χρωματική Υπογραφή ή Κωδικό Χρώματος — και επιστρέφει ένα tuple.
Οι Υπογραφές Χρώματος και Κωδικοί Χρώματος πρέπει πρώτα να ρυθμιστούν στο Vision Utility πριν μπορέσουν να χρησιμοποιηθούν με αυτήν τη μέθοδο.
Η πλειάδα αποθηκεύει αντικείμενα ταξινομημένα από το μεγαλύτερο στο μικρότερο κατά πλάτος, ξεκινώντας από τον δείκτη 0. Η πρόσβαση στις ιδιότητες κάθε αντικειμένου είναι δυνατή χρησιμοποιώντας τον δείκτη του. Μια κενή πλειάδα επιστρέφεται εάν δεν εντοπιστούν αντικείμενα που να ταιριάζουν.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Παράμετροι |
Περιγραφή |
|---|---|
|
Φιλτράρει το σύνολο δεδομένων ώστε να περιλαμβάνει μόνο δεδομένα της δεδομένης υπογραφής. Οι διαθέσιμες υπογραφές είναι:
|
|
Προαιρετικό. Ορίζει τον μέγιστο αριθμό αντικειμένων που μπορούν να επιστραφούν από 1 έως 24. Η προεπιλογή είναι 8. |
# Drive 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)
Σημείωση: Η επιστρεφόμενη πλειάδα μπορεί να ταξινομηθεί με βάση οποιαδήποτε ιδιότητα, όχι μόνο με βάση το πλάτος, χρησιμοποιώντας τη συνάρτηση sorted της Python. Για παράδειγμα, ταξινόμηση με βάση το AprilTag ID:
# 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)
Ταξινομήσεις Τεχνητής Νοημοσύνης#
Ο αισθητήρας όρασης AI μπορεί να ανιχνεύσει διαφορετικά αντικείμενα βάσει ορισμένων ταξινομήσεων AI. Ανάλογα με το μοντέλο ταξινόμησης AI που επιλέχθηκε κατά τη διαμόρφωση του αισθητήρα όρασης AI στο παράθυρο Συσκευές, θα ανιχνευθούν διαφορετικά αντικείμενα. Τα μοντέλα που διατίθενται αυτήν τη στιγμή είναι:
Στοιχεία τάξης
Αριθμός Ταυτότητας |
Ταξινόμηση Τεχνητής Νοημοσύνης |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Διαγωνισμός Ρομποτικής VEX V5 με Υψηλά Στοιχήματα
Αριθμός Ταυτότητας |
Ταξινόμηση Τεχνητής Νοημοσύνης |
|---|---|
0 |
|
1 |
|
2 |
|
Αντιμετώπιση του Διαγωνισμού Ρομποτικής VEX V5
Αριθμός Ταυτότητας |
Ταξινόμηση Τεχνητής Νοημοσύνης |
|---|---|
0 |
|
1 |
|
Παράκαμψη Διαγωνισμού Ρομποτικής VEX V5
Αριθμός Ταυτότητας |
Ταξινόμηση Τεχνητής Νοημοσύνης |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Χρωματικές υπογραφές#
Μια Χρωματική Υπογραφή είναι ένα μοναδικό χρώμα που μπορεί να αναγνωρίσει ο Αισθητήρας Όρασης AI. Αυτές οι υπογραφές επιτρέπουν στον Αισθητήρα Όρασης 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)
Κωδικοί Χρώματος#
Ένας Χρωματικός Κώδικας είναι ένα δομημένο μοτίβο που αποτελείται από χρωματικές υπογραφές που είναι διατεταγμένες σε μια συγκεκριμένη σειρά. Αυτοί οι κωδικοί επιτρέπουν στον Αισθητήρα Όρασης 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 επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο αισθητήρας AI Vision Sensor είναι συνδεδεμένος αυτήν τη στιγμή στον εγκέφαλο EXP.
True– Ο αισθητήρας όρασης AI είναι συνδεδεμένος στον εγκέφαλο EXP.False– Ο αισθητήρας όρασης AI δεν είναι συνδεδεμένος στον εγκέφαλο EXP.
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.
Όλες οι τιμές ιδιοτήτων εκτός από .id και .score περιγράφουν τη θέση και το μέγεθος του ανιχνευμένου αντικειμένου στην προβολή του αισθητήρα AI Vision Sensor τη στιγμή που χρησιμοποιήθηκε take_snapshot Αυτές οι τιμές μετριούνται σε pixel, με βάση την ανάλυση 320 επί 240 pixel του αισθητήρα.
.exists#
.exists επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο δείκτης υπάρχει στην πλειάδα ή όχι.
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 επιστρέφει το πλάτος του ανιχνευμένου αντικειμένου σε pixel, το οποίο είναι ένας ακέραιος αριθμός μεταξύ 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 επιστρέφει το ύψος του ανιχνευμένου αντικειμένου σε pixel, το οποίο είναι ένας ακέραιος αριθμός μεταξύ 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 του κέντρου του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 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 του κέντρου του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 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 επιστρέφει τον προσανατολισμό του ανιχνευμένου Χρωματικού Κωδικού ή του AprilTag ID σε μοίρες, ο οποίος είναι ένας ακέραιος αριθμός μεταξύ 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 της επάνω αριστερής γωνίας του πλαισίου οριοθέτησης του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 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 της επάνω αριστερής γωνίας του πλαισίου οριοθέτησης του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 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 της ανιχνευμένης ταξινόμησης AI ή του ID AprilTag ως ακέραιο αριθμό.
Για ένα AprilTag ID, η ιδιότητα .id αντιπροσωπεύει τον ανιχνευμένο αριθμό AprilTag ID στην περιοχή από 0 έως 36. Για μια Ταξινόμηση AI, η ιδιότητα .id αντιστοιχεί στο προκαθορισμένο ID στην ενότητα Ταξινομήσεις AI.
# 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 επιστρέφει τη βαθμολογία εμπιστοσύνης της ανιχνευμένης ταξινόμησης AI ως ακέραιο αριθμό μεταξύ 1 και 100.
Μια χαμηλότερη βαθμολογία σημαίνει ότι ο αισθητήρας είναι λιγότερο σίγουρος για το ανιχνευμένο αντικείμενο, ενώ μια υψηλότερη βαθμολογία σημαίνει ότι ο αισθητήρας είναι πιο σίγουρος.
Κατασκευαστές#
Οι κατασκευαστές χρησιμοποιούνται για τη χειροκίνητη δημιουργία αντικειμένων AiVision, Colordescκαι Codedesc , τα οποία είναι απαραίτητα για τη διαμόρφωση του αισθητήρα AI Vision Sensor εκτός του VEXcode.
AiVision#
AiVision δημιουργεί έναν αισθητήρα όρασης με τεχνητή νοημοσύνη.
Χρήση
Vision(smartport, sigs)
Παράμετροι |
Περιγραφή |
|---|---|
|
Η Έξυπνη Θύρα στην οποία είναι συνδεδεμένος ο Αισθητήρας Όρασης AI, γράφεται ως |
|
Προαιρετικό. Το όνομα μίας ή περισσότερων υπογραφών, διαχωρισμένα με κόμματα (
|
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)
Colordesc#
Colordesc δημιουργεί μια Χρωματική Υπογραφή. Έως και επτά διαφορετικές Χρωματικές Υπογραφές μπορούν να αποθηκευτούν ταυτόχρονα σε έναν Αισθητήρα Όρασης AI.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
Παράμετρος |
Περιγραφή |
|---|---|
|
Ο δείκτης του αντικειμένου |
|
Η τιμή του κόκκινου χρώματος κυμαίνεται από 0 έως 255. |
|
Η τιμή του πράσινου χρώματος κυμαίνεται από 0 έως 255. |
|
Η μπλε τιμή του χρώματος από 0 έως 255. |
|
Η επιτρεπόμενη διακύμανση απόχρωσης ως εύρος μοιρών στον χρωματικό κύκλο (1–40). Υψηλότερες τιμές επιτρέπουν μεγαλύτερη περιστροφική απόκλιση από την βασική απόχρωση. |
|
Η επιτρεπόμενη απόκλιση κορεσμού, από 0,10 έως 1,00. Αυτή η τιμή αντιπροσωπεύει το κλάσμα του πλήρους εύρους κορεσμού εντός του οποίου μπορεί να μετατοπιστεί το χρώμα (π.χ., 0,10 = ±10% κορεσμός) |

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
Codedesc#
Codedesc δημιουργεί έναν Κώδικα Χρώματος. Απαιτεί τουλάχιστον δύο ήδη καθορισμένες Υπογραφές Χρώματος για να χρησιμοποιηθεί. Έως και οκτώ διαφορετικοί Κώδικες Χρώματος μπορούν να αποθηκευτούν σε έναν Αισθητήρα Οπτικής Μάθησης ταυτόχρονα.
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Παράμετρος |
Περιγραφή |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)
Tagdesc#
Tagdesc δημιουργεί ένα AprilTag ID. Μπορείτε να το χρησιμοποιήσετε για να ορίσετε αναγνωρίσιμα AprilTag ID, γεγονός που καθιστά τον κώδικά σας πιο σαφή και πιο ευανάγνωστο.
Usage:
Tagdesc(id)
Παράμετρος |
Περιγραφή |
|---|---|
|
Το αναγνωριστικό AprilTag που θα χρησιμοποιηθεί. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)