رؤية الذكاء الاصطناعي#
مقدمة#
يستطيع مستشعر الرؤية المدعوم بالذكاء الاصطناعي اكتشاف وتتبع الأجسام والألوان ومعرفات AprilTag. وهذا يسمح للروبوت بتحليل محيطه، ومتابعة الأجسام، والتفاعل بناءً على البيانات المرئية المكتشفة.
تستخدم هذه الصفحة الأسماء التالية كمثال على مستشعر الرؤية الذكية، وتوقيع اللون، ورمز اللون: ai_vision_1، RED_BOX، و BOX_CODE استبدلها بالأسماء التي قمت بتكوينها حسب الحاجة.
فيما يلي قائمة بجميع الطرق:
أجهزة جمع البيانات – الحصول على البيانات من مستشعر الرؤية المدعوم بالذكاء الاصطناعي.
take_snapshot– يلتقط البيانات لتوقيع معين.installed– ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً بـ V5 Brain.
الخصائص – بيانات الكائن المُعادة من take_snapshot.
.exists– ما إذا كان الكائن موجودًا في عملية الكشف الحالية..width– عرض الكائن المكتشف..height– ارتفاع الكائن المكتشف..centerX– موضع مركز الكائن على المحور X..centerY– موضع مركز الكائن على المحور Y..angle– اتجاه رمز اللون..originX– موضع X للزاوية العلوية اليسرى للكائن..originY– موضع Y للزاوية العلوية اليسرى للكائن..id– تصنيف أو معرف علامة الكائن..score– درجة الثقة لتصنيفات الذكاء الاصطناعي.
المنشئات – قم بتهيئة وتكوين مستشعر الرؤية بالذكاء الاصطناعي وتوقيعاته يدويًا.
المحصلون#
take_snapshot#
take_snapshot تقوم بتصفية البيانات من إطار مستشعر الرؤية بالذكاء الاصطناعي إلى توقيع واحد - وصف محفوظ لشيء يمكن للمستشعر التعرف عليه، مثل كائن مدرب مسبقًا، أو معرف AprilTag، أو توقيع لوني أو رمز لوني تم تكوينه - وتعيد tuple.
يجب أولاً تكوين توقيعات الألوان و رموز الألوان في أداة الرؤية قبل أن يتم استخدامها مع هذه الطريقة.
The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
حدود |
وصف |
|---|---|
|
يقوم هذا الإجراء بتصفية مجموعة البيانات بحيث لا تتضمن إلا البيانات التي تحمل التوقيع المحدد. التوقيعات المتاحة هي:
|
|
اختياري. يحدد الحد الأقصى لعدد العناصر التي يمكن إرجاعها من 1 إلى 24. القيمة الافتراضية هي 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)
Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by 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)
تصنيفات الذكاء الاصطناعي#
يستطيع مستشعر الرؤية المدعوم بالذكاء الاصطناعي اكتشاف أجسام مختلفة ضمن تصنيفات ذكاء اصطناعي محددة. ويختلف الجسم الذي يتم اكتشافه باختلاف نموذج تصنيف الذكاء الاصطناعي المُختار عند إعداد مستشعر الرؤية المدعوم بالذكاء الاصطناعي في نافذة الأجهزة. النماذج المتاحة حاليًا هي:
عناصر الفصل الدراسي
رقم الهوية |
تصنيف الذكاء الاصطناعي |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
مسابقة VEX V5 للروبوتات ذات الرهانات العالية
رقم الهوية |
تصنيف الذكاء الاصطناعي |
|---|---|
0 |
|
1 |
|
2 |
|
دفعة خلفية في مسابقة VEX V5 للروبوتات
رقم الهوية |
تصنيف الذكاء الاصطناعي |
|---|---|
0 |
|
1 |
|
تجاوز مسابقة الروبوتات VEX V5
رقم الهوية |
تصنيف الذكاء الاصطناعي |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
التوقيعات اللونية#
التوقيع اللوني هو لون فريد يمكن لمستشعر الرؤية المدعوم بالذكاء الاصطناعي التعرف عليه. تُمكّن هذه التوقيعات المستشعر من اكتشاف الأجسام وتتبعها بناءً على لونها. بمجرد إعداد التوقيع اللوني، يستطيع المستشعر تحديد الأجسام التي تحمل هذا اللون المحدد ضمن مجال رؤيته. تُستخدم التوقيعات اللونية مع 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)
رموز الألوان#
رمز اللون هو نمط منظم يتكون من رموز لونية مرتبة بترتيب محدد. تُمكّن هذه الرموز مستشعر الرؤية المدعوم بالذكاء الاصطناعي من التعرف على أنماط الألوان المُحددة مسبقًا. تُعد رموز اللون مفيدة لتحديد الأجسام المعقدة أو إنشاء علامات فريدة للملاحة الذاتية.
لاستخدام رمز لوني مُعدّ مسبقًا في مشروع، يجب أن يكون اسمه اسم المستشعر، متبوعًا بشرطتين سفليتين، ثم اسم الرمز اللوني. على سبيل المثال: 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 يعيد قيمة منطقية تشير إلى ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً حاليًا بـ V5 Brain.
True- مستشعر الرؤية بالذكاء الاصطناعي متصل بدماغ V5.False- مستشعر الرؤية بالذكاء الاصطناعي غير متصل بمعالج V5.
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 take_snapshot…
.exists#
.exists تُرجع قيمة منطقية تشير إلى ما إذا كان الفهرس موجودًا في المجموعة أم لا.
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 تُرجع عرض الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع ارتفاع الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع الإحداثي السيني لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 بالدرجات، وهو عدد صحيح بين 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 تُرجع الإحداثي السيني للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 للزاوية العلوية اليسرى للمربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع معرف تصنيف الذكاء الاصطناعي المكتشف أو معرف AprilTag كرقم صحيح.
بالنسبة لمعرف AprilTag، تمثل الخاصية .id رقم معرف AprilTag المكتشف في النطاق من 0 إلى 36. بالنسبة لتصنيف الذكاء الاصطناعي، تتوافق الخاصية .id مع المعرف المحدد مسبقًا في قسم تصنيفات الذكاء الاصطناعي.
# 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 تُرجع درجة الثقة لتصنيف الذكاء الاصطناعي المكتشف كعدد صحيح بين 1 و 100.
تشير الدرجة المنخفضة إلى أن المستشعر أقل ثقة بشأن الجسم المكتشف، بينما تشير الدرجة الأعلى إلى أن المستشعر أكثر ثقة.
المُنشئون#
Constructors are used to manually create AiVision, Colordesc, and Codedesc objects, which are necessary for configuring the AI Vision Sensor outside of VEXcode.
AiVision#
AiVision بإنشاء مستشعر رؤية يعمل بالذكاء الاصطناعي.
طريقة الاستخدام
Vision(smartport, sigs)
حدود |
وصف |
|---|---|
|
المنفذ الذكي الذي يتصل به مستشعر الرؤية بالذكاء الاصطناعي، مكتوبًا على النحو التالي: |
|
اختياري. اسم توقيع واحد أو أكثر، مفصول بفواصل (
|
# 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 توقيعًا لونيًا. ويمكن تخزين ما يصل إلى سبعة توقيعات لونية مختلفة على مستشعر الرؤية بالذكاء الاصطناعي في وقت واحد.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
المعلمة |
وصف |
|---|---|
|
|
|
قيمة اللون الأحمر من 0 إلى 255. |
|
تتراوح قيمة اللون الأخضر من 0 إلى 255. |
|
قيمة اللون الأزرق من 0 إلى 255. |
|
يُقاس تباين اللون المسموح به بنطاق من الدرجات على عجلة الألوان (من 1 إلى 40). تسمح القيم الأعلى بانحراف دوراني أكبر عن اللون الأساسي. |
|
الانحراف المسموح به في التشبع، من 0.10 إلى 1.00. تمثل هذه القيمة نسبة نطاق التشبع الكامل الذي قد يتغير اللون ضمنه (على سبيل المثال، 0.10 = ±10% تشبع). |

"""
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 creates a Color Code. It requires at least two already defined Color Signatures in order to be used. Up to eight different Color Codes can be stored on a Vision Sensor at once.
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
المعلمة |
وصف |
|---|---|
|
تم إنشاء توقيع اللون. |
|
تم إنشاء توقيع اللون. |
|
Optional. A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
|
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 معرّف AprilTag. يمكنك استخدامه لتحديد معرّفات AprilTag قابلة للتمييز، مما يجعل التعليمات البرمجية الخاصة بك أكثر وضوحًا وأسهل في القراءة.
Usage:
Tagdesc(id)
المعلمة |
وصف |
|---|---|
|
معرف AprilTag المراد استخدامه. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)