Dirbtinio intelekto regėjimo jutiklis#
Įvadas#
„IQ AI“ regos jutiklis gali aptikti ir sekti objektus, spalvas ir „AprilTag“ ID. Tai leidžia robotui analizuoti aplinką, sekti objektus ir reaguoti pagal aptiktus vaizdinius duomenis.
Toliau pateiktuose pavyzdžiuose sukonfigūruotas „IQ AI Vision“ jutiklis bus pavadintas ai_vision_1, o sukonfigūruoti spalvų parašo objektai, pvz., RED_BOX, bus naudojami visuose tolesniuose šios API dokumentacijos pavyzdžiuose, kai bus kalbama apie AiVision klasės metodus.
Žemiau pateikiamas visų metodų sąrašas:
Getteriai – gaukite duomenis iš IQ AI regėjimo jutiklio.
take_snapshot– fiksuoja konkretaus parašo duomenis.installed— Ar IQ AI regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.
Ypatybės – objekto duomenys, gauti iš take_snapshot.
.exists— Whether the object exists in the current detection..width— Aptikto objekto plotis..height— Aptikto objekto aukštis..centerX— X position of the object’s center..centerY— objekto centro Y padėtis..angle— Orientation of the Color Code or AprilTag ID..originX— objekto viršutinio kairiojo kampo X padėtis..originY— objekto viršutinio kairiojo kampo Y padėtis..id— Classification or tag ID of the object..score– DI klasifikacijų patikimumo balas.
Konstruktoriai – rankiniu būdu inicijuokite ir konfigūruokite jutiklius.
Getteriai#
take_snapshot#
take_snapshot filtruoja duomenis iš IQ AI regėjimo jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., iš anksto apmokytą objektą, „AprilTag“ ID arba sukonfigūruotą spalvos parašą arba spalvos kodą – ir grąžina tuple.
Prieš naudojant šį metodą, pirmiausia „Vision Utility“ programoje reikia sukonfigūruoti Spalvų parašus ir Spalvų kodus.
Šiame rinkinyje objektai saugomi surūšiuoti nuo didžiausio iki mažiausio pagal plotį, pradedant nuo indekso 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama atitinkamų objektų, grąžinama tuščia rinkinio reikšmė.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Parametrai |
Aprašymas |
|---|---|
|
Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:
|
|
Pasirinktinai. Nustato maksimalų grąžinamų objektų skaičių nuo 1 iki 24 (numatytasis: 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)
Pastaba: Grąžintą rinkinį galima rūšiuoti pagal bet kurią savybę, ne tik pagal plotį, naudojant Python funkciją sorted Pavyzdžiui, rūšiuojant pagal 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)
Arba rūšiuoti pagal ūgį:
# 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)
DI klasifikacijos#
„IQ AI“ regėjimo jutiklis gali aptikti skirtingus objektus pagal tam tikras DI klasifikacijas. Priklausomai nuo DI klasifikacijos modelio, pasirinkto konfigūruojant DI regėjimo jutiklį įrenginių lange, bus aptikti skirtingi objektai. Šiuo metu galimi modeliai:
Klasės objektai
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX IQ robotikos varžybų maišymas ir derinimas
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
VEX IQ robotikos varžybų lygis aukštyn
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
Spalvų parašai#
Spalvos parašas yra unikali spalva, kurią gali atpažinti „IQ AI“ regėjimo jutiklis. Šie parašai leidžia „IQ AI“ regėjimo jutikliui aptikti ir sekti objektus pagal jų spalvą. Sukonfigūravus spalvos parašą, jutiklis gali atpažinti objektus savo matymo lauke su ta konkrečia spalva. Spalvų parašai naudojami su take_snapshot, kad realiuoju laiku būtų galima apdoroti ir aptikti spalvotus objektus.
Norint projekte naudoti sukonfigūruotą spalvos parašą, jo pavadinimas turi būti jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos parašo pavadinimas. Pavyzdžiui: 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)
Spalvų kodai#
Spalvų kodas yra struktūrizuotas šablonas, sudarytas iš tam tikra tvarka išdėstytų spalvų parašų. Šie kodai leidžia „IQ AI“ regėjimo jutikliui atpažinti iš anksto nustatytus spalvų šablonus. Spalvų kodai naudingi norint identifikuoti sudėtingus objektus arba sukurti unikalius žymeklius autonominei navigacijai.
Norint projekte naudoti sukonfigūruotą spalvos kodą, jo pavadinimas turi būti jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos kodo pavadinimas. Pavyzdžiui: 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 grąžina loginę reikšmę, nurodančią, ar IQ AI regėjimo jutiklis šiuo metu prijungtas prie IQ (2-osios kartos) smegenų.
True— IQ AI regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.False— IQ AI regėjimo jutiklis neprijungtas prie IQ (2-osios kartos) smegenų.
Usage:
ai_vision_1.installed()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
Ypatybės#
Kiekvienam objektui, saugomam tuple, panaudojus take_snapshot, pridedamos dešimt savybių.
Visos ypatybių reikšmės, išskyrus .id ir .score apibūdina aptikto objekto padėtį ir dydį IQ AI regėjimo jutiklio rodinyje tuo metu, kai buvo naudojamas take_snapshot Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.
.exists#
.exists grąžina loginę reikšmę, nurodančią, ar indeksas egzistuoja rinkinyje, ar ne.
True— Indeksas yra.False— Indekso nėra.
# 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 grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto spalvos kodo arba „AprilTag“ ID orientaciją laipsniais, kuris yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 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 grąžina aptiktos AI klasifikacijos arba „AprilTag“ ID kaip sveikąjį skaičių. AI klasifikacijos priklauso nuo modelio, kuris konfigūruotas AI vizijos programoje.
„AprilTag“ ID atveju savybė .id nurodo aptiktą „AprilTag“ ID numerį intervale nuo 0 iki 36. AI klasifikacijos atveju savybė „ .id atitinka iš anksto apibrėžtą ID skyriuje AI klasifikacijos.
# 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 grąžina aptiktos dirbtinio intelekto klasifikacijos patikimumo balą kaip sveikąjį skaičių nuo 1 iki 100.
Mažesnis balas reiškia, kad jutiklis mažiau pasitiki aptiktu objektu, o didesnis balas – kad jutiklis labiau pasitiki.
# 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)
Konstruktoriai#
Konstruktoriai naudojami rankiniu būdu sukurti AiVision, Colordescir Codedesc objektus, kurie būtini norint konfigūruoti IQ AI regėjimo jutiklį ne naudojant VEXcode.
AI Vision Sensor#
AiVision sukuria IQ AI regėjimo jutiklį.
Naudojimas
Vision(port, sigs)
Parametrai |
Aprašymas |
|---|---|
|
Prie kurio išmaniojo prievado prijungtas IQ AI regėjimo jutiklis (nuo 1 iki 12). |
|
Pasirinktinai. Vieno ar kelių parašų pavadinimas:
|
Pavyzdys
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 sukuria spalvos parašą. IQ AI regėjimo jutiklyje vienu metu galima saugoti iki septynių skirtingų spalvų parašų.
Naudojimas:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parametras |
Aprašymas |
|---|---|
|
|
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
„Vision Utility“ programoje reikšmė nuo |
Norėdami gauti reikšmes, reikalingas spalvos parašui sukurti, eikite į Vision Utility. Sukonfigūravę spalvos parašą, nukopijuokite parametrų reikšmes iš konfigūracijos lango.
Pavyzdys
# 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 sukuria spalvos kodą. Kad būtų galima naudoti, reikia bent dviejų jau apibrėžtų spalvų parašų. Regėjimo jutiklyje vienu metu galima saugoti iki aštuonių skirtingų spalvų kodų.
Naudojimas:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Parametras |
Aprašymas |
|---|---|
|
Anksčiau sukurtas Spalvų parašas. |
|
Anksčiau sukurtas Spalvų parašas. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
Pavyzdys
# 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)