مستشعر رؤية بالذكاء الاصطناعي#

مقدمة#

يستطيع مستشعر الرؤية بتقنية الذكاء الاصطناعي IQ اكتشاف وتتبع الأجسام والألوان ومعرفات AprilTag. وهذا يسمح للروبوت بتحليل محيطه، ومتابعة الأجسام، والتفاعل بناءً على البيانات المرئية المكتشفة.

بالنسبة للأمثلة أدناه، سيتم تسمية مستشعر الرؤية IQ AI المُكوّن ai_vision_1، وسيتم استخدام كائنات توقيع اللون المُكوّنة، مثل RED_BOX، في جميع الأمثلة اللاحقة في جميع أنحاء وثائق API هذه عند الإشارة إلى AiVision.

فيما يلي قائمة بجميع الطرق:

أجهزة جمع البيانات — الحصول على البيانات من مستشعر الرؤية IQ AI.

  • take_snapshot — يلتقط البيانات لتوقيع معين.

  • installed — ما إذا كان مستشعر الرؤية IQ AI متصلاً بدماغ IQ (الجيل الثاني).

الخصائص — بيانات الكائن المُعادة من take_snapshot.

  • .exists — ما إذا كان الكائن موجودًا في عملية الكشف الحالية.

  • .width — عرض الكائن المكتشف.

  • .height — ارتفاع الكائن المكتشف.

  • .centerX — موضع مركز الكائن على المحور X.

  • .centerY — موضع مركز الكائن على المحور Y.

  • .angle — اتجاه رمز اللون أو معرف AprilTag.

  • .originX — موضع X للزاوية العلوية اليسرى للكائن.

  • .originY — موضع Y للزاوية العلوية اليسرى للكائن.

  • .id — تصنيف أو معرف علامة الكائن.

  • .score — درجة الثقة لتصنيفات الذكاء الاصطناعي.

المنشئات — قم بتهيئة وتكوين المستشعرات يدويًا.

  • AiVision — إنشاء مستشعر رؤية الذكاء الاصطناعي IQ.

  • Colordesc — إنشاء توقيع لوني.

  • Codedesc — إنشاء رمز لوني.

المحصلون#

take_snapshot#

take_snapshot تقوم بتصفية البيانات من إطار مستشعر الرؤية IQ AI إلى توقيع واحد - وصف محفوظ لشيء يمكن للمستشعر التعرف عليه، مثل كائن مدرب مسبقًا، أو معرف 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)

حدود

وصف

SIGNATURE

Filters the dataset to only include data of the given signature. Available signatures are:

  • Color Signatures or Color Codes - The name of the IQ AI Vision Sensor, two underscores, and then the Color Signature’s or Color Code’s name. For example: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - All detected AI Classifications depending on the model configured in the AI Vision Utility.
  • AiVision.ALL_TAGS - All AprilTag IDs.

count

اختياري. يحدد الحد الأقصى لعدد العناصر التي يمكن إرجاعها من 1 إلى 24 (الافتراضي: 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)

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)

تصنيفات الذكاء الاصطناعي#

يستطيع مستشعر الرؤية بتقنية الذكاء الاصطناعي IQ اكتشاف أجسام مختلفة ضمن تصنيفات الذكاء الاصطناعي المحددة. ويختلف الجسم الذي يتم اكتشافه باختلاف نموذج تصنيف الذكاء الاصطناعي المُختار عند إعداد مستشعر الرؤية بتقنية الذكاء الاصطناعي في نافذة الأجهزة. النماذج المتاحة حاليًا هي:

أدوات الفصل الدراسي

رقم الهوية

تصنيف الذكاء الاصطناعي

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

مسابقة VEX IQ للروبوتات - مزيج وتنسيق

رقم الهوية

تصنيف الذكاء الاصطناعي

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

ارتقِ بمستوى مسابقات VEX IQ للروبوتات

رقم الهوية

تصنيف الذكاء الاصطناعي

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

التوقيعات اللونية#

التوقيع اللوني هو لون فريد يمكن لمستشعر الرؤية IQ AI التعرف عليه. تُمكّن هذه التوقيعات المستشعر من اكتشاف الأجسام وتتبعها بناءً على لونها. بمجرد إعداد التوقيع اللوني، يستطيع المستشعر تحديد الأجسام التي تحمل هذا اللون المحدد ضمن مجال رؤيته. تُستخدم التوقيعات اللونية مع 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)

رموز الألوان#

رمز اللون هو نمط منظم يتكون من رموز لونية مرتبة بترتيب محدد. تُمكّن هذه الرموز مستشعر الرؤية IQ AI من التعرف على أنماط الألوان المُحددة مسبقًا. تُعد رموز الألوان مفيدة لتحديد الأجسام المعقدة أو إنشاء علامات فريدة للملاحة الذاتية.

لاستخدام رمز لوني مُعدّ مسبقًا في مشروع، يجب أن يكون اسمه اسم المستشعر، متبوعًا بشرطتين سفليتين، ثم اسم الرمز اللوني. على سبيل المثال: 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 يعيد قيمة منطقية تشير إلى ما إذا كان مستشعر الرؤية IQ AI متصلًا حاليًا بدماغ IQ (الجيل الثاني).

  • True — مستشعر الرؤية IQ AI متصل بدماغ IQ (الجيل الثاني).

  • False — مستشعر الرؤية IQ AI غير متصل بدماغ IQ (الجيل الثاني).

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 returns the ID of the detected AI Classification or AprilTag ID as an integer. AI Classifications depend on the model that is configured in the AI Vision Utility.

بالنسبة لمعرف 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.

تشير الدرجة المنخفضة إلى أن المستشعر أقل ثقة بشأن الجسم المكتشف، بينما تشير الدرجة الأعلى إلى أن المستشعر أكثر ثقة.

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

المُنشئون#

Constructors are used to manually create AiVision, Colordesc, and Codedesc objects, which are necessary for configuring the IQ AI Vision Sensor outside of VEXcode.

AI Vision Sensor#

AiVision بإنشاء مستشعر رؤية ذكاء اصطناعي IQ.

طريقة الاستخدام

Vision(port, sigs)

حدود

وصف

port

ما هو المنفذ الذكي الذي يتصل به مستشعر الرؤية IQ AI، من 1 إلى 12.

sigs

اختياري. اسم توقيع واحد أو أكثر:

مثال

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 توقيعًا لونيًا. ويمكن تخزين ما يصل إلى سبعة توقيعات لونية مختلفة على مستشعر الرؤية IQ AI في وقت واحد.

طريقة الاستخدام:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

المعلمة

وصف

index

فهرس الكائن Colordesc ، من 1 إلى 7. ملاحظة: سيؤدي إنشاء كائنين Colordesc بنفس رقم الفهرس إلى استبدال الكائن الثاني بالكائن الأول.

uMin

القيمة من uMin في أداة الرؤية.

uMax

القيمة من uMax في أداة الرؤية.

uMean

القيمة من uMean في أداة الرؤية.

vMin

القيمة من vMin في أداة الرؤية.

vMax

القيمة من vMax في أداة الرؤية.

vMean

القيمة من vMean في أداة الرؤية.

rgb

القيمة من rgb في أداة الرؤية.

type

القيمة من type في أداة الرؤية.

للحصول على القيم اللازمة لإنشاء توقيع لوني، انتقل إلى أداة الرؤية. بعد تكوين التوقيع اللوني، انسخ قيم المعلمات من نافذة التكوين.

مثال

# 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 رمزًا لونيًا. ويتطلب ذلك وجود توقيعين لونيين مُعرّفين مسبقًا على الأقل لاستخدامه. ويمكن تخزين ما يصل إلى ثمانية رموز لونية مختلفة على مستشعر الرؤية في آنٍ واحد.

طريقة الاستخدام:

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

المعلمة

وصف

sig1

تم إنشاء توقيع اللون.

sig2

تم إنشاء توقيع اللون.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

مثال

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