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

مقدمة#

تُستخدم فئة aivision للتحكم في البيانات والوصول إليها من مستشعر الرؤية بالذكاء الاصطناعي V5. يستطيع مستشعر الرؤية بالذكاء الاصطناعي اكتشاف ما يلي:

  • تصنيفات الذكاء الاصطناعي (مثل عناصر اللعبة)

  • معرفات AprilTag

  • توقيعات بألوان مخصصة

  • رموز ألوان مخصصة

يوفر بيانات الكائن بما في ذلك الموقع والحجم والاتجاه ومعرف التصنيف ودرجة الثقة.

يعالج المستشعر المعلومات المرئية باستخدام نموذج ذكاء اصطناعي مدمج يتم اختياره من أداة رؤية الذكاء الاصطناعي في VEXcode. يحدد النموذج المُختار تصنيفات الذكاء الاصطناعي التي يمكن للمستشعر اكتشافها. عند استخدام VS Code، يجب أولاً تهيئة نموذج الذكاء الاصطناعي في VEXcode قبل استخدامه في برنامجك. تُعاد الكائنات المكتشفة عبر المصفوفة objects بعد استدعاء takeSnapshot.

مُنشئات الفئات#

aivision(
  int32_t index,
  Args&... sigs );

حدود#

المعلمة

يكتب

وصف

index

int32_t

المنفذ الذكي الذي يتصل به مستشعر الرؤية بالذكاء الاصطناعي، مكتوبًا على النحو التالي: PORTx، حيث x هو رقم المنفذ (على سبيل المثال، PORT1).

sigs

colordesc, codedesc, or AI constants

نوع واحد أو أكثر من أنواع الكشف المراد تسجيلها لدى المستشعر:

  • aivision::ALL_AIOBJS — جميع تصنيفات الذكاء الاصطناعي
  • aivision::ALL_TAGS — جميع معرّفات AprilTag
  • aivision::colordesc — توقيع لون مخصص
  • aivision::codedesc — رمز لون مخصص

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

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

عناصر الفصل الدراسي

رقم الهوية

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

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

مسابقة VEX V5 للروبوتات ذات الرهانات العالية

رقم الهوية

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

0

mobileGoal

1

redRing

2

blueRing

دفعة خلفية في مسابقة VEX V5 للروبوتات

رقم الهوية

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

0

blueBlock

1

redBlock

تجاوز مسابقة الروبوتات VEX V5

رقم الهوية

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

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

أمثلة#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

الدوال الأعضاء#

تتضمن فئة aivision الدوال الأعضاء التالية:

  • takeSnapshot — يلتقط البيانات لتوقيع لوني محدد، أو رمز لوني، أو مجموعة تصنيف الذكاء الاصطناعي، أو مجموعة معرف AprilTag.

  • installed — إرجاع ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً بـ V5 Brain.

للوصول إلى بيانات الكائن المكتشف بعد استدعاء takeSnapshot، استخدم Properties.

قبل استدعاء أي من الدوال الأعضاء aivision ، يجب إنشاء مثيل aivision ، كما هو موضح أدناه:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

يلتقط صورة من مستشعر الرؤية بالذكاء الاصطناعي، ويعالجها باستخدام نموذج الذكاء الاصطناعي المحدد أو التوقيعات اللونية المُكوّنة، ويُحدّث مصفوفة objects.

Each call refreshes the objects array with the most recent detection results. Objects are ordered from largest to smallest (by width), beginning at index 0. If no objects are detected objectCount will be 0 and objects[i].exists will be false.

1 — يأخذ لقطة باستخدام معرف الكائن ونوع الكائن.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — يلتقط لقطة باستخدام توقيع اللون.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — يلتقط لقطة باستخدام رمز اللون.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — يأخذ لقطة باستخدام معرف علامة أبريل.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — يأخذ لقطة باستخدام تصنيف الذكاء الاصطناعي.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — يأخذ لقطة باستخدام واصف الكائن.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

المعلمة

يكتب

وصف

id

uint32_t

معرّف الكائن المراد اكتشافه عند استخدام الدالة (id, type, count) يعتمد المعنى على type:

  • colorObject — فهرس واصف اللون (1-7)
  • codeObject — فهرس رمز اللون (1-8)
  • modelObject — معرّف تصنيف الذكاء الاصطناعي
  • tagObject — معرّف AprilTag (0-36)

ملاحظة: في VEXcode، يمكن استخدام أسماء تصنيف الذكاء الاصطناعي (مثل blueBall) مباشرةً. في VS Code، يجب استخدام المعرّف الرقمي.

type

objectType

يُحدد فئة الكائن المرتبط بالمعرف id:

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Descriptor used to detect a specific object. Passed directly to takeSnapshot, for example:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Predefined descriptor constants:
  • aivision::ALL_TAGS — Detects all AprilTag IDs
  • aivision::ALL_COLORS — Detects all configured Color Signatures
  • aivision::ALL_CODES — Detects all configured Color Codes
  • aivision::ALL_AIOBJS — Detects all AI Classifications
  • aivision::ALL_OBJECTS — Detects everything the sensor can recognize

count

uint32_t / int32_t

الحد الأقصى لعدد العناصر المخزنة من اللقطة. القيمة الافتراضية هي 8.

قيم الإرجاع

يُرجع int32_t يمثل عدد الكائنات المكتشفة التي تتطابق مع التوقيع المحدد أو نوع الكشف.

ملاحظات

  • يجب على مستشعر الرؤية بالذكاء الاصطناعي التقاط صورة قبل أن يتمكن من الوصول إلى بيانات الكائن.

  • يتم تحديث مصفوفة objects في كل استدعاء.

  • عند تحديد العدد count ، يتم تخزين أكبر الكائنات التي تم اكتشافها فقط (حتى الكمية المحددة).

تعتمد تصنيفات الذكاء الاصطناعي على النموذج المحدد في أداة رؤية الذكاء الاصطناعي في VEXcode.

أمثلة

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

يُرجع ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً بمعالج V5.

وظائف متاحة

bool installed();

معلمات

لا تأخذ هذه الدالة أي معلمات.

قيم الإرجاع

يُرجع قيمة منطقية تشير إلى ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً أم لا:

  • true — تم توصيل مستشعر الرؤية بالذكاء الاصطناعي.

  • false — مستشعر الرؤية بالذكاء الاصطناعي غير متصل.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

ملكيات#

يؤدي استدعاء takeSnapshot إلى تحديث نتائج الكشف لمستشعر الرؤية بالذكاء الاصطناعي. تُحدِّث كل لقطة مصفوفة objects ، التي تحتوي على الكائنات المكتشفة لتصنيف الذكاء الاصطناعي المطلوب، أو التوقيع اللوني، أو رمز اللون، أو معرّف AprilTag.

AI Vision data is accessed through properties of objects stored in AIVisionSensor.objects[index], where index begins at 0.

يتم ترتيب الأشياء من الأكبر إلى الأصغر (حسب المساحة).

تبلغ دقة صورة مستشعر الرؤية بالذكاء الاصطناعي × 240 بكسليتم الإبلاغ عن قيم موضع وحجم الكائن بوحدات البكسل بالنسبة إلى الرؤية الحالية للمستشعر.

تتوفر الخصائص التالية:

  • objectCount — تُرجع عدد الكائنات المكتشفة من أحدث لقطة.

  • largestObject — يحدد أكبر كائن تم اكتشافه من أحدث لقطة.

  • objects — مصفوفة تحتوي على الكائنات المكتشفة تم تحديثها بواسطة takeSnapshot.

  • .exists — ما إذا كان إدخال الكائن يحتوي على بيانات صالحة.

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

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

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

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

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

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

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

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

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

objectCount#

objectCount تُرجع عدد العناصر داخل مصفوفة objects كعدد صحيح.

Syntax
AIVisionSensor.objectCount

Components

عنصر

وصف

AIVisionSensor

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

أمثلة

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject يسترجع أكبر كائن تم اكتشافه من مصفوفة الكائنات objects.

يمكن استخدام هذه الطريقة للحصول دائمًا على أكبر عنصر من بين objects عنصر دون تحديد فهرس.

Syntax
AIVisionSensor.largestObject

Components

عنصر

وصف

AIVisionSensor

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

أمثلة

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

تُعيد الدالة objects مصفوفةً من خصائص الكائنات المكتشفة. استخدم هذه المصفوفة للوصول إلى قيم property الخاصة بكل كائن على حدة.

هناك عشر خصائص يتم تضمينها مع كل كائن مخزن في مصفوفة objects بعد استخدام takeSnapshot.

تصف جميع قيم الخصائص، باستثناء id و score موضع وحجم الكائن المكتشف في مجال رؤية مستشعر الرؤية بالذكاء الاصطناعي لحظة استخدام takeSnapshot . تُقاس هذه القيم بالبكسل، بناءً على دقة المستشعر البالغة 320 × 240 بكسل.

Syntax
AIVisionSensor.objects[index].property

Components

عنصر

وصف

AIVisionSensor

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

index

فهرس العنصر في المصفوفة. يبدأ الفهرس من 0.

property

One of the available object properties.

موجود#

.exists تُرجع ما إذا كان فهرس الكائن المحدد يحتوي على كائن صالح تم اكتشافه.

الوصول

SensorName.objects[index].exists

قيم الإرجاع

تُرجع قيمة منطقية تشير إلى ما إذا كان فهرس الكائن المحدد يحتوي على كائن صالح تم اكتشافه:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

أمثلة

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.عرض#

.width تُرجع عرض الكائن المكتشف.

الوصول

SensorName.objects[index].width

قيم الإرجاع

Returns an int16_t representing the width of the detected object in pixels. The value ranges from 1 to 320.

أمثلة

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.ارتفاع#

.height تُرجع ارتفاع الكائن المكتشف.

الوصول

SensorName.objects[index].height

قيم الإرجاع

Returns an int16_t representing the height of the detected object in pixels. The value ranges from 1 to 240.

أمثلة

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX تُرجع الإحداثي السيني لمركز الكائن المكتشف.

الوصول

SensorName.objects[index].centerX

قيم الإرجاع

Returns an int16_t representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 320.

أمثلة

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY تُرجع إحداثيات y لمركز الكائن المكتشف.

الوصول

SensorName.objects[index].centerY

قيم الإرجاع

Returns an int16_t representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 240.

أمثلة

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.زاوية#

.angle تُرجع اتجاه رمز اللون المكتشف أو معرف AprilTag.

الوصول

SensorName.objects[index].angle

قيم الإرجاع

تُرجع هذه الدالة قيمة float تمثل دوران رمز اللون أو مُعرّف AprilTag المُكتشف بالدرجات. تتراوح القيمة بين 0 إلى 359.9

أمثلة

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[0].angle < 330) {
      Drivetrain.turn(left);
    }
    else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.originX#

.originX تُرجع الإحداثي السيني للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف.

الوصول

SensorName.objects[index].originX

قيم الإرجاع

Returns an int16_t representing the x-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 320.

أمثلة

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.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 للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف.

الوصول

SensorName.objects[index].originY

قيم الإرجاع

Returns an int16_t representing the y-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 240.

أمثلة

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.بطاقة تعريف#

.id يُرجع معرف AprilTag المكتشف أو معرف تصنيف الذكاء الاصطناعي.

الوصول

SensorName.objects[index].id

قيم الإرجاع

يُرجع قيمة من نوع int32_t int32_t تمثل معرف الكائن المكتشف:

  • For AI Classifications, this corresponds to the ID defined by the selected AI model.

  • بالنسبة لمعرفات AprilTag، يمثل هذا رقم معرف AprilTag المكتشف (0-36).

أمثلة

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.نتيجة#

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

الوصول

SensorName.objects[index].score

قيم الإرجاع

يُرجع قيمة int16_t تشير إلى درجة الثقة لتصنيف الذكاء الاصطناعي المكتشف بين 1 و 100.

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

أمثلة

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}