Αισθητήρας όρασης AI#

Εισαγωγή#

Ο αισθητήρας όρασης IQ AI μπορεί να ανιχνεύσει και να παρακολουθήσει αντικείμενα, χρώματα και αναγνωριστικά AprilTag. Αυτό επιτρέπει στο ρομπότ να αναλύει το περιβάλλον του, να ακολουθεί αντικείμενα και να αντιδρά με βάση τα ανιχνευμένα οπτικά δεδομένα.

Για τα παρακάτω παραδείγματα, ο διαμορφωμένος αισθητήρας όρασης IQ AI θα ονομάζεται ai_vision_1και τα διαμορφωμένα αντικείμενα Color Signature, όπως RED_BOX, θα χρησιμοποιηθούν σε όλα τα επόμενα παραδείγματα σε όλη αυτήν την τεκμηρίωση API κατά την αναφορά σε μεθόδους κλάσης AiVision.

Παρακάτω είναι μια λίστα με όλες τις μεθόδους:

Λήψη δεδομένων — Λήψη δεδομένων από τον αισθητήρα όρασης IQ AI.

  • take_snapshot — Καταγράφει δεδομένα για μια συγκεκριμένη υπογραφή.

  • installed — Εάν ο αισθητήρας όρασης IQ AI είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

Ιδιότητες — Δεδομένα αντικειμένου που επιστράφηκαν από take_snapshot.

  • .exists — Εάν το αντικείμενο υπάρχει στην τρέχουσα ανίχνευση.

  • .width — Πλάτος του ανιχνευμένου αντικειμένου.

  • .height — Ύψος του ανιχνευμένου αντικειμένου.

  • .centerX — X position of the object’s center.

  • .centerY — Θέση Y του κέντρου του αντικειμένου.

  • .angle — Προσανατολισμός του Χρωματικού Κώδικα ή του AprilTag ID.

  • .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 — Βαθμολογία εμπιστοσύνης για ταξινομήσεις τεχνητής νοημοσύνης.

Κατασκευαστές — Μη αυτόματη αρχικοποίηση και ρύθμιση παραμέτρων των αισθητήρων.

  • AiVision — Δημιουργεί έναν αισθητήρα όρασης IQ AI.

  • Colordesc — Δημιουργεί μια χρωματική υπογραφή.

  • Codedesc — Δημιουργεί έναν Κωδικό Χρώματος.

Αποκτητές#

take_snapshot#

take_snapshot φιλτράρει δεδομένα από το πλαίσιο του αισθητήρα όρασης IQ AI σε μία μόνο υπογραφή — μια αποθηκευμένη περιγραφή κάποιου πράγματος που μπορεί να αναγνωρίσει ο αισθητήρας, όπως ένα προ-εκπαιδευμένο αντικείμενο, ένα αναγνωριστικό AprilTag ή μια διαμορφωμένη υπογραφή χρώματος ή κωδικό χρώματος — και επιστρέφει ένα tuple.

Οι Υπογραφές Χρώματος και Κωδικοί Χρώματος πρέπει πρώτα να ρυθμιστούν στο Vision Utility πριν μπορέσουν να χρησιμοποιηθούν με αυτήν τη μέθοδο.

Η πλειάδα αποθηκεύει αντικείμενα ταξινομημένα από το μεγαλύτερο στο μικρότερο κατά πλάτος, ξεκινώντας από τον δείκτη 0. Η πρόσβαση στις ιδιότητες κάθε αντικειμένου είναι δυνατή χρησιμοποιώντας τον δείκτη του. Επιστρέφεται μια κενή πλειάδα εάν δεν εντοπιστούν αντικείμενα που να ταιριάζουν.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Παράμετροι

Περιγραφή

SIGNATURE

Φιλτράρει το σύνολο δεδομένων ώστε να περιλαμβάνει μόνο δεδομένα της δεδομένης υπογραφής. Οι διαθέσιμες υπογραφές είναι:

  • Υπογραφές Χρώματος ή Κωδικοί Χρώματος - Το όνομα του αισθητήρα όρασης IQ AI, δύο υπογραμμές και, στη συνέχεια, το όνομα της Υπογραφής Χρώματος ή του Κωδικού Χρώματος. Για παράδειγμα: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Όλες οι ανιχνευμένες Ταξινομήσεις AI ανάλογα με το μοντέλο που έχει διαμορφωθεί στο βοηθητικό πρόγραμμα AI Vision.
  • AiVision.ALL_TAGS - Όλα τα αναγνωριστικά AprilTag.

count

Προαιρετικό. Ορίζει τον μέγιστο αριθμό αντικειμένων που μπορούν να επιστραφούν από 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)

Σημείωση: Η επιστρεφόμενη πλειάδα μπορεί να ταξινομηθεί με βάση οποιαδήποτε ιδιότητα, όχι μόνο με βάση το πλάτος, χρησιμοποιώντας τη συνάρτηση 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)

Ταξινομήσεις Τεχνητής Νοημοσύνης#

Ο αισθητήρας όρασης IQ AI μπορεί να ανιχνεύσει διαφορετικά αντικείμενα βάσει ορισμένων ταξινομήσεων AI. Ανάλογα με το μοντέλο ταξινόμησης AI που επιλέγεται κατά τη διαμόρφωση του αισθητήρα όρασης AI στο παράθυρο Συσκευές, θα ανιχνεύονται διαφορετικά αντικείμενα. Τα διαθέσιμα μοντέλα είναι:

Αντικείμενα τάξης

Αριθμός Ταυτότητας

Ταξινόμηση Τεχνητής Νοημοσύνης

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

Διαγωνισμός Ρομποτικής VEX IQ Mix & Match

Αριθμός Ταυτότητας

Ταξινόμηση Τεχνητής Νοημοσύνης

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

Διαγωνισμός Ρομποτικής VEX IQ - Ανώτερο Επίπεδο

Αριθμός Ταυτότητας

Ταξινόμηση Τεχνητής Νοημοσύνης

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Χρωματικές υπογραφές#

Μια Χρωματική Υπογραφή είναι ένα μοναδικό χρώμα που μπορεί να αναγνωρίσει ο Αισθητήρας Όρασης 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 επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο αισθητήρας όρασης IQ AI είναι συνδεδεμένος αυτήν τη στιγμή στον εγκέφαλο IQ (2ης γενιάς).

  • True — Ο αισθητήρας όρασης IQ AI είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

  • False — Ο αισθητήρας όρασης IQ AI δεν είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

Usage:
ai_vision_1.installed()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Σκηνικά θέατρου#

Υπάρχουν δέκα ιδιότητες που περιλαμβάνονται σε κάθε αντικείμενο που αποθηκεύεται σε μια tuple μετά τη χρήση της take_snapshot.

Όλες οι τιμές ιδιοτήτων εκτός από .id και .score περιγράφουν τη θέση και το μέγεθος του ανιχνευμένου αντικειμένου στην προβολή του αισθητήρα όρασης IQ AI τη στιγμή που χρησιμοποιήθηκε 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 ή του AprilTag ID ως ακέραιο αριθμό. Οι ταξινομήσεις AI εξαρτώνται από το μοντέλο που έχει ρυθμιστεί στο AI Vision Utility.

Για ένα 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.

Μια χαμηλότερη βαθμολογία σημαίνει ότι ο αισθητήρας είναι λιγότερο σίγουρος για το ανιχνευμένο αντικείμενο, ενώ μια υψηλότερη βαθμολογία σημαίνει ότι ο αισθητήρας είναι πιο σίγουρος.

# 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 , τα οποία είναι απαραίτητα για τη διαμόρφωση του αισθητήρα όρασης IQ AI εκτός του VEXcode.

AI Vision Sensor#

AiVision δημιουργεί έναν αισθητήρα όρασης IQ AI.

Χρήση

Vision(port, sigs)

Παράμετροι

Περιγραφή

port

Σε ποια έξυπνη θύρα είναι συνδεδεμένος ο αισθητήρας όρασης IQ AI, από το 1 έως το 12.

sigs

Προαιρετικό. Το όνομα μίας ή περισσότερων υπογραφών:

Παράδειγμα

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)

Παράμετρος

Περιγραφή

index

Ο δείκτης του αντικειμένου Colordesc , από 1 έως 7. Σημείωση: Η δημιουργία δύο αντικειμένων Colordesc με τον ίδιο αριθμό δείκτη θα έχει ως αποτέλεσμα το δεύτερο αντικείμενο που δημιουργείται να παρακάμψει το πρώτο.

uMin

Η τιμή από uMin στο Vision Utility.

uMax

Η τιμή από uMax στο Vision Utility.

uMean

Η τιμή από uMean στο Vision Utility.

vMin

Η τιμή από vMin στο Vision Utility.

vMax

Η τιμή από vMax στο Vision Utility.

vMean

Η τιμή από vMean στο Vision Utility.

rgb

Η τιμή από rgb στο Vision Utility.

type

Η τιμή από το type στο Vision Utility.

Για να λάβετε τις τιμές για να δημιουργήσετε μια Υπογραφή Χρώματος, μεταβείτε στο Vision Utility. Μόλις ρυθμιστεί μια Υπογραφή Χρώματος, αντιγράψτε τις τιμές των παραμέτρων από το παράθυρο Διαμόρφωσης.

Παράδειγμα

# 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)

Παράμετρος

Περιγραφή

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

Παράδειγμα

# 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)