Sensor Penglihatan AI#
Perkenalan#
Sensor Penglihatan IQ 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.
Untuk contoh-contoh di bawah ini, Sensor Visi IQ AI yang dikonfigurasi akan diberi nama ai_vision_1, dan objek Tanda Warna yang dikonfigurasi, seperti RED_BOX, akan digunakan di semua contoh selanjutnya di seluruh dokumentasi API ini ketika merujuk ke metode kelas AiVision.
Berikut adalah daftar semua metode:
Pengambil Data — Mengambil data dari Sensor Penglihatan IQ AI.
take_snapshot— Mengambil data untuk tanda tangan tertentu.installed— Apakah Sensor Penglihatan IQ AI terhubung ke IQ (generasi ke-2) Brain.
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 atau ID AprilTag..originX— Posisi X dari sudut kiri atas objek..originY— Posisi Y dari sudut kiri atas objek..id— Klasifikasi atau ID tag objek..score— Skor kepercayaan untuk Klasifikasi AI.
Konstruktor — Inisialisasi dan konfigurasikan sensor secara manual.
Pencari#
take_snapshot#
take_snapshot menyaring data dari frame IQ 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 |
|---|---|
|
Memfilter dataset agar hanya menyertakan data dari tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:
|
|
Opsional. Mengatur jumlah maksimum objek yang dapat dikembalikan dari 1 hingga 24 (default: 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)
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 IQ 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:
Benda-Benda di Kelas
Nomor ID |
Klasifikasi AI |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Kompetisi Robotika VEX IQ Mix & Match
Nomor ID |
Klasifikasi AI |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
Tingkat Lanjut Kompetisi Robotika VEX IQ
Nomor ID |
Klasifikasi AI |
|---|---|
0 |
|
1 |
|
2 |
|
Tanda Warna#
Tanda Warna adalah warna unik yang dapat dikenali oleh Sensor Penglihatan IQ AI. Tanda warna ini memungkinkan Sensor Penglihatan IQ 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 IQ 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 IQ AI Vision Sensor saat ini terhubung ke IQ Brain (generasi ke-2).
True— Sensor Penglihatan IQ AI terhubung ke IQ Brain (generasi ke-2).False— Sensor Penglihatan IQ AI tidak terhubung ke IQ Brain (generasi ke-2).
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 IQ AI Vision Sensor 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 dari Klasifikasi AI atau ID AprilTag yang terdeteksi sebagai bilangan bulat. Klasifikasi AI bergantung pada model yang dikonfigurasi di Utilitas Visi AI.
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.
# 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)
Konstruktor#
Konstruktor digunakan untuk membuat objek AiVision, Colordesc, dan Codedesc secara manual, yang diperlukan untuk mengkonfigurasi Sensor Visi AI IQ di luar VEXcode.
AI Vision Sensor#
AiVision menciptakan Sensor Penglihatan AI IQ.
Penggunaan
Vision(port, sigs)
Parameter |
Keterangan |
|---|---|
|
Port pintar mana yang terhubung ke Sensor Penglihatan IQ AI, dari 1 hingga 12. |
|
Opsional. Nama satu atau lebih tanda tangan:
|
Contoh
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 membuat Tanda Warna. Hingga tujuh Tanda Warna berbeda dapat disimpan pada Sensor Visi IQ AI sekaligus.
Penggunaan:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parameter |
Keterangan |
|---|---|
|
Indeks objek |
|
Nilai dari |
|
Nilai dari |
|
Nilai |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
Untuk mendapatkan nilai-nilai untuk membuat Tanda Warna, buka Utilitas Visi. Setelah Tanda Warna dikonfigurasi, salin nilai parameter dari jendela Konfigurasi.
Contoh
# 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 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.
Penggunaan:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Parameter |
Keterangan |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
Contoh
# 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)