Visi AI#

Perkenalan#

Sensor Penglihatan AI dapat mendeteksi dan melacak objek, warna, dan ID AprilTag. Hal ini memungkinkan robot untuk menganalisis lingkungan sekitarnya, mengikuti objek, dan bereaksi berdasarkan data visual yang terdeteksi.

Halaman ini menggunakan ai_vision_1, RED_BOX, dan BOX_CODE sebagai contoh nama Sensor Visi AI, Tanda Warna, dan Kode Warna. Ganti dengan nama yang Anda konfigurasi sendiri sesuai kebutuhan.

Berikut adalah daftar semua metode:

Pengambil Data – Mengambil data dari Sensor Penglihatan AI.

  • take_snapshot – Mengambil data untuk tanda tangan tertentu.

  • installed – Apakah Sensor Visi AI terhubung ke Otak V5.

Properti – Data objek yang dikembalikan dari take_snapshot.

  • .exists – Apakah objek tersebut ada dalam deteksi saat ini.

  • .width – Lebar objek yang terdeteksi.

  • .height – Tinggi objek yang terdeteksi.

  • .centerX – Posisi X dari pusat objek.

  • .centerY – Posisi Y dari pusat objek.

  • .angle – Orientasi Kode Warna.

  • .originX – Posisi X dari sudut kiri atas objek.

  • .originY – Posisi Y dari sudut kiri atas objek.

  • .id – Klasifikasi atau ID tag dari objek.

  • .score – Skor kepercayaan untuk Klasifikasi AI.

Konstruktor – Menginisialisasi dan mengkonfigurasi Sensor Penglihatan AI dan tanda tangannya secara manual.

Pencari#

take_snapshot#

take_snapshot menyaring data dari frame AI Vision Sensor ke tanda tangan tunggal — deskripsi tersimpan dari sesuatu yang dapat dikenali sensor, seperti objek yang telah dilatih sebelumnya, ID AprilTag, atau Tanda Tangan Warna atau Kode Warna yang dikonfigurasi — dan mengembalikan tuple.

Tanda Warna dan Kode Warna harus dikonfigurasi terlebih dahulu di Vision Utility sebelum dapat digunakan dengan metode ini.

Tuple menyimpan objek yang diurutkan dari yang terbesar hingga terkecil berdasarkan lebar, dimulai dari indeks 0. Properti setiap objek dapat diakses menggunakan indeksnya. Tuple kosong akan dikembalikan jika tidak ada objek yang cocok yang terdeteksi.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parameter

Keterangan

SIGNATURE

Memfilter dataset agar hanya menyertakan data dari tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:

  • Tanda Tangan Warna atau Kode Warna - Nama Sensor Visi AI, dua garis bawah, dan kemudian nama Tanda Tangan Warna atau Kode Warna. Misalnya: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Kubus, cincin, dan bola.
  • AiVision.ALL_TAGS - Semua ID AprilTag.

count

Opsional. Mengatur jumlah maksimum objek yang dapat dikembalikan dari 1 hingga 24. Nilai default adalah 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)

Catatan: Tuple yang dikembalikan dapat diurutkan berdasarkan properti apa pun, bukan hanya lebar, menggunakan fungsi sorted Python. Misalnya, mengurutkan berdasarkan ID AprilTag:

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

Atau mengurutkan berdasarkan tinggi badan:

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

Klasifikasi AI#

Sensor Penglihatan AI dapat mendeteksi berbagai objek berdasarkan Klasifikasi AI tertentu. Bergantung pada model Klasifikasi AI yang dipilih saat mengkonfigurasi Sensor Penglihatan AI di jendela Perangkat, objek yang berbeda akan terdeteksi. Model yang tersedia saat ini adalah:

Elemen-Elemen Kelas

Nomor ID

Klasifikasi AI

0

BLUE_BALL

1

GREEN_BALL

2

RED_BALL

3

BLUE_RING

4

GREEN_RING

5

RED_RING

6

BLUE_CUBE

7

GREEN_CUBE

8

RED_CUBE

Kompetisi Robotika VEX V5 dengan Taruhan Tinggi

Nomor ID

Klasifikasi AI

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

Kompetisi Robotika VEX V5 Dorong Mundur

Nomor ID

Klasifikasi AI

0

BLUE_BLOCK

1

RED_BLOCK

Penggantian Kompetisi Robotika VEX V5

Nomor ID

Klasifikasi AI

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Tanda Warna#

Tanda Warna adalah warna unik yang dapat dikenali oleh Sensor Penglihatan AI. Tanda warna ini memungkinkan Sensor Penglihatan AI untuk mendeteksi dan melacak objek berdasarkan warnanya. Setelah Tanda Warna dikonfigurasi, sensor dapat mengidentifikasi objek dengan warna spesifik tersebut dalam bidang pandangnya. Tanda warna digunakan dengan take_snapshot untuk memproses dan mendeteksi objek berwarna secara real-time.

Untuk menggunakan Color Signature yang telah dikonfigurasi dalam sebuah proyek, namanya harus berupa nama sensor, dua garis bawah, dan kemudian nama Color Signature tersebut. Contoh: 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)

Kode Warna#

Kode Warna adalah pola terstruktur yang terdiri dari tanda warna yang disusun dalam urutan tertentu. Kode-kode ini memungkinkan Sensor Penglihatan AI untuk mengenali pola warna yang telah ditentukan sebelumnya. Kode Warna berguna untuk mengidentifikasi objek kompleks atau membuat penanda unik untuk navigasi otonom.

Untuk menggunakan Kode Warna yang telah dikonfigurasi dalam sebuah proyek, namanya harus berupa nama sensor, dua garis bawah, dan kemudian nama Kode Warna tersebut. Contoh: 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 mengembalikan nilai Boolean yang menunjukkan apakah Sensor Penglihatan AI saat ini terhubung ke V5 Brain.

  • True – Sensor Penglihatan AI terhubung ke Otak V5.

  • False – Sensor Penglihatan AI tidak terhubung ke V5 Brain.

Usage:
ai_vision_1.installed()

Parameter

Keterangan

Metode ini tidak memiliki parameter.

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

Properti#

Ada sepuluh properti yang disertakan dengan setiap objek yang disimpan dalam tuple setelah take_snapshot digunakan.

Semua nilai properti kecuali .id dan .score menjelaskan posisi dan ukuran objek yang terdeteksi dalam tampilan Sensor Visi AI pada saat take_snapshot digunakan. Nilai-nilai ini diukur dalam piksel, berdasarkan resolusi sensor 320 x 240 piksel.

.exists#

.exists mengembalikan nilai Boolean yang menunjukkan apakah indeks tersebut ada dalam tuple atau tidak.

  • True – Indeks tersebut ada.

  • False – Indeks tidak ada.

# 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 mengembalikan lebar objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan tinggi objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan koordinat x dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan orientasi Kode Warna atau ID AprilTag yang terdeteksi dalam derajat, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan ID Klasifikasi AI yang terdeteksi atau ID AprilTag sebagai bilangan bulat.

Untuk ID AprilTag, properti .id mewakili nomor ID AprilTag yang terdeteksi dalam rentang 0 hingga 36. Untuk Klasifikasi AI, properti .id sesuai dengan ID yang telah ditentukan sebelumnya di bagian Klasifikasi 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 mengembalikan skor kepercayaan dari Klasifikasi AI yang terdeteksi sebagai bilangan bulat antara 1 dan 100.

Skor yang lebih rendah berarti sensor kurang yakin terhadap objek yang terdeteksi, sedangkan skor yang lebih tinggi berarti sensor lebih yakin.

Konstruktor#

Konstruktor digunakan untuk membuat objek AiVision, Colordesc, dan Codedesc secara manual, yang diperlukan untuk mengkonfigurasi Sensor Visi AI di luar VEXcode.

AiVision#

AiVision menciptakan Sensor Penglihatan AI.

Penggunaan

Vision(smartport, sigs)

Parameter

Keterangan

smartport

Port Pintar yang terhubung dengan Sensor Penglihatan AI, ditulis sebagai Ports.PORTx di mana x adalah nomor port.

sigs

Opsional. Nama satu atau lebih tanda tangan, dipisahkan oleh koma (,):

# 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 membuat Tanda Warna. Hingga tujuh Tanda Warna berbeda dapat disimpan pada Sensor Visi AI sekaligus.

Usage:
Colordesc(index, red, green, blue, hangle, hdsat)

Parameter

Keterangan

index

Indeks objek Colordesc , dari 1 - 7.
Catatan: Membuat dua objek Colordesc dengan nomor indeks yang sama akan menyebabkan objek kedua yang dibuat menimpa objek pertama.

red

Nilai merah dari warna tersebut berkisar dari 0 hingga 255.

green

Nilai hijau dari warna tersebut berkisar dari 0 hingga 255.

blue

Nilai biru dari warna tersebut berkisar dari 0 hingga 255.

hangle

Variasi rona yang diperbolehkan sebagai rentang derajat pada roda warna (1–40). Nilai yang lebih tinggi memungkinkan penyimpangan rotasi yang lebih luas dari rona dasar.

hdsat

Penyimpangan saturasi yang diperbolehkan, dari 0,10 hingga 1,00. Nilai ini mewakili fraksi dari rentang saturasi penuh di mana warna dapat bergeser (misalnya, 0,10 = ±10% saturasi).

Roda warna melingkar yang menampilkan spektrum warna lengkap yang diberi label dengan nilai derajat di sekelilingnya, meningkat dalam kelipatan 30 derajat dari 0° di atas hingga 360°.

"""
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 membuat Kode Warna. Kode ini membutuhkan setidaknya dua Tanda Tangan Warna yang sudah ditentukan agar dapat digunakan. Hingga delapan Kode Warna berbeda dapat disimpan pada Sensor Penglihatan sekaligus.

Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)

Parameter

Keterangan

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 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 membuat ID AprilTag. Anda dapat menggunakannya untuk mendefinisikan ID AprilTag yang mudah dikenali, yang membuat kode Anda lebih jelas dan mudah dibaca.

Usage:
Tagdesc(id)

Parameter

Keterangan

id

ID AprilTag yang akan digunakan.

# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)