AI látás#
Bevezetés#
Az AI Vision Sensor képes tárgyakat, színeket és AprilTag azonosítókat érzékelni és követni. Ez lehetővé teszi a robot számára, hogy elemezze a környezetét, kövesse a tárgyakat, és a detektált vizuális adatok alapján reagáljon.
Ez az oldal ai_vision_1, RED_BOXés BOX_CODE névsorokat használja példaként az AI Vision Sensor, Color Signature és Color Code nevekre. Szükség szerint cserélje le ezeket a saját konfigurált nevekkel.
Az alábbiakban felsoroljuk az összes módszert:
Getterek – Adatok lekérése a mesterséges intelligencia által biztosított vizuális érzékelőről.
take_snapshot– Egy adott aláírás adatait rögzíti.installed– Azt jelzi, hogy a mesterséges intelligencia által vezérelt látásérzékelő csatlakoztatva van-e a V5 agyhoz.
Tulajdonságok – A take_snapshot függvényből visszaadott objektumadatok.
.exists– Azt jelzi, hogy az objektum létezik-e az aktuális észlelésben..width– A detektált objektum szélessége..height– Az érzékelt objektum magassága..centerX– Az objektum középpontjának X pozíciója..centerY– Az objektum középpontjának Y pozíciója..angle– A színkód orientációja..originX– Az objektum bal felső sarkának X pozíciója..originY– Az objektum bal felső sarkának Y pozíciója..id– Az objektum osztályozása vagy címkeazonosítója..score– Az AI-osztályozások megbízhatósági pontszáma.
Konstruktorok – Manuálisan inicializálja és konfigurálja a mesterséges intelligencia által vezérelt vizuális érzékelőt és annak szignatúráit.
Getterek#
take_snapshot#
A take_snapshot függvény egyetlen aláírásra szűri az adatokat az AI Vision Sensor keretrendszeréből – egy mentett leírásra, ami egy olyan objektumról szól, amit az érzékelő felismer, például egy előre betanított objektum, egy AprilTag azonosító, vagy egy konfigurált színaláírás vagy színkód –, és egy tuple értéket ad vissza.
A Színaláírások és Színkódok beállításokat először a Vision Utility programban kell konfigurálni, mielőtt ezzel a módszerrel használhatók lennének.
A tuple a 0 indexszel kezdődően, szélesség szerint a legnagyobbtól a legkisebbig rendezve tárolja az objektumokat. Minden objektum properties tulajdonsága a hozzá tartozó index segítségével érhető el. Ha nem található egyező objektum, akkor egy üres tuple kerül visszaadásra.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Paraméterek |
Leírás |
|---|---|
|
Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások a következők:
|
|
Opcionális. Beállítja a visszaadható objektumok maximális számát 1 és 24 között. Az alapértelmezett érték 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)
Megjegyzés: A visszaadott tuple bármely property szerint rendezhető, nem csak szélesség szerint, a Python sorted függvényével. Például az AprilTag ID szerinti rendezés:
# 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)
Vagy inkább magasság szerinti rendezés:
# 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)
MI-besorolások#
Az AI Vision Sensor bizonyos AI-osztályozások alá tartozó objektumokat képes érzékelni. Az Eszközök ablakban az AI Vision Sensor konfigurálásakor kiválasztott AI-osztályozási modelltől függően különböző objektumok érzékelhetők. A jelenleg elérhető modellek a következők:
Tantermi elemek
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotikaverseny Nagy Téttel
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 Robotikaverseny visszaszorítása
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
VEX V5 Robotika Verseny Felülírás
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Színaláírások#
A színaláírás egy egyedi szín, amelyet a mesterséges intelligencia által létrehozott látásérzékelő felismer. Ezek az aláírások lehetővé teszik a mesterséges intelligencia által létrehozott látásérzékelő számára, hogy a színük alapján érzékelje és kövesse a tárgyakat. A színaláírás konfigurálása után az érzékelő képes azonosítani a látóterében található adott színű tárgyakat. A színaláírásokat a take_snapshot metódussal együtt használják a színes objektumok valós idejű feldolgozásához és érzékeléséhez.
Ahhoz, hogy egy konfigurált színazonosítót egy projektben használhassunk, a nevének a szenzor nevéből, két aláhúzásjelből, majd a színazonosító nevéből kell állnia. Például: 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)
Színkódok#
A színkód egy strukturált minta, amely meghatározott sorrendben elrendezett színaláírásokból áll. Ezek a kódok lehetővé teszik a mesterséges intelligencia által vezérelt vizuális érzékelő számára, hogy felismerje az előre meghatározott színmintákat. A színkódok hasznosak összetett objektumok azonosítására vagy egyedi jelölők létrehozására az autonóm navigációhoz.
Ahhoz, hogy egy konfigurált színkódot egy projektben használhassunk, a nevének a szenzor nevéből, két aláhúzásjelből, majd a színkód nevéből kell állnia. Például: 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 egy logikai értéket ad vissza, amely azt jelzi, hogy az AI Vision Sensor jelenleg csatlakoztatva van-e a V5 Brain-hez.
True– Az AI Vision Sensor csatlakozik a V5 Brain-hez.False– Az AI Vision Sensor nincs csatlakoztatva a V5 Brain-hez.
Usage:
ai_vision_1.installed()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
Tulajdonságok#
A take_snapshot metódus felhasználása után a tuple tuple-ben tárolt objektumokhoz tíz tulajdonság tartozik.
.id és .score kivételével az összes tulajdonságérték az érzékelt objektum pozícióját és méretét írja le az AI Vision Sensor nézetében a take_snapshot használatakor. Ezeket az értékeket pixelben mérik, az érzékelő 320 x 240 pixeles felbontása alapján.
.exists#
.exists függvény egy logikai értéket ad vissza, amely jelzi, hogy az index létezik-e a tuple-ben vagy sem.
True– Az index létezik.False– Az index nem létezik.
# 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 Visszaadja a detektált objektum szélességét pixelben, ami egy 1 és 320 közötti egész szám.
# 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 A detektált objektum magasságát adja vissza pixelben, ami egy 1 és 240 közötti egész szám.
# 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 Visszaadja a detektált objektum középpontjának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
# 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 Visszaadja a detektált objektum középpontjának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.
# 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 visszaadja a detektált színkód vagy AprilTag azonosító orientációját fokban, ami egy 0 és 359 közötti egész szám.
# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.
# 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 Az észlelt AI osztályozás vagy AprilTag azonosító azonosítóját adja vissza egész számként.
Egy AprilTag ID esetében a .id tulajdonság a detektált AprilTag azonosító számát jelöli 0 és 36 közötti tartományban. Egy AI osztályozás esetében a .id tulajdonság az AI osztályozások szakaszban előre definiált azonosítónak felel meg.
# 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 Az észlelt AI-osztályozás megbízhatósági pontszámát adja vissza 1 és 100 közötti egész számként.
Az alacsonyabb pontszám azt jelenti, hogy az érzékelő kevésbé bízik az észlelt tárggyal kapcsolatban, míg a magasabb pontszám azt jelenti, hogy az érzékelő nagyobb valószínűséggel észleli a hibát.
Konstruktorok#
A konstruktorok segítségével manuálisan hozhatunk létre AiVision, Colordescés Codedesc objektumot, amelyek az AI Vision Sensor VEXcode-on kívüli konfigurálásához szükségesek.
AiVision#
AiVision creates an AI Vision Sensor.
Használat
Vision(smartport, sigs)
Paraméterek |
Leírás |
|---|---|
|
Az az intelligens port, amelyhez az AI Vision Sensor csatlakozik, a következőképpen írva: |
|
Opcionális. Egy vagy több aláírás neve, vesszővel elválasztva (
|
# 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 színaláírást hoz létre. Egyszerre akár hét különböző színaláírás is tárolható egy AI látásérzékelőn.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
Paraméter |
Leírás |
|---|---|
|
A |
|
A szín vörös értéke 0 és 255 között. |
|
A szín zöld értéke 0 és 255 között. |
|
A szín kék értéke 0 és 255 között. |
|
A megengedett színárnyalat-variáció fokokban kifejezve a színkörön (1–40). A magasabb értékek szélesebb elfordulási eltérést tesznek lehetővé az alapszínárnyalattól. |
|
A megengedett telítettségi eltérés 0,10 és 1,00 között. Ez az érték a teljes telítettségi tartomány azon részét jelöli, amelyen belül a szín eltolódhat (pl. 0,10 = ±10% telítettség). |

"""
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 színkódot hoz létre. Használatához legalább két már definiált Color Signatures szükséges. Egyszerre akár nyolc különböző színkód is tárolható egy vizuális érzékelőn.
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Paraméter |
Leírás |
|---|---|
|
Egy korábban létrehozott Color Signature. |
|
Egy korábban létrehozott Color Signature. |
|
Opcionális. Egy korábban létrehozott Color Signature. |
|
Opcionális. Egy korábban létrehozott Color Signature. |
|
Opcionális. Egy korábban létrehozott 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 létrehoz egy AprilTag azonosítót. Használhatod azonosítható AprilTag azonosítók definiálására, ami áttekinthetőbbé és könnyebben olvashatóvá teszi a kódot.
Usage:
Tagdesc(id)
Paraméter |
Leírás |
|---|---|
|
A használandó AprilTag azonosító. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)