مستشعر رؤية بالذكاء الاصطناعي#
مقدمة#
تُستخدم فئة aivision للتحكم في البيانات والوصول إليها من مستشعر الرؤية بالذكاء الاصطناعي EXP. يستطيع مستشعر الرؤية بالذكاء الاصطناعي اكتشاف ما يلي:
تصنيفات الذكاء الاصطناعي (مثل عناصر اللعبة)
معرفات AprilTag
توقيعات بألوان مخصصة
رموز ألوان مخصصة
يوفر بيانات الكائن بما في ذلك الموقع والحجم والاتجاه ومعرف التصنيف ودرجة الثقة.
يعالج المستشعر المعلومات المرئية باستخدام نموذج ذكاء اصطناعي مدمج يتم اختياره من أداة رؤية الذكاء الاصطناعي في VEXcode. يحدد النموذج المُختار تصنيفات الذكاء الاصطناعي التي يمكن للمستشعر اكتشافها. عند استخدام VS Code، يجب أولاً تهيئة نموذج الذكاء الاصطناعي في VEXcode قبل استخدامه في برنامجك. تُعاد الكائنات المكتشفة عبر المصفوفة objects بعد استدعاء takeSnapshot.
مُنشئات الفئات#
aivision(
int32_t index,
Args&... sigs );
حدود#
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
المنفذ الذكي الذي يتصل به مستشعر الرؤية بالذكاء الاصطناعي، مكتوبًا على النحو التالي: |
|
|
نوع واحد أو أكثر من أنواع الكشف المراد تسجيلها لدى المستشعر:
|
نماذج وتصنيفات الذكاء الاصطناعي#
يستطيع مستشعر الرؤية المدعوم بالذكاء الاصطناعي اكتشاف أجسام مختلفة باستخدام تصنيفات ذكاء اصطناعي محددة. ويختلف نوع الأجسام التي يمكن اكتشافها باختلاف نموذج تصنيف الذكاء الاصطناعي المُختار عند إعداد مستشعر الرؤية المدعوم بالذكاء الاصطناعي في نافذة الأجهزة. النماذج المتاحة حاليًا هي:
عناصر الفصل الدراسي
رقم الهوية |
تصنيف الذكاء الاصطناعي |
|---|---|
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 |
|
أمثلة#
// 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— إرجاع ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً بدماغ EXP.
للوصول إلى بيانات الكائن المكتشف بعد استدعاء 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 );
Parameters6 — يأخذ لقطة باستخدام واصف الكائن.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
معرّف الكائن المراد اكتشافه عند استخدام الدالة
ملاحظة: في VEXcode، يمكن استخدام أسماء تصنيف الذكاء الاصطناعي (مثل blueBall) مباشرةً. في VS Code، يجب استخدام المعرّف الرقمي. |
|
|
يُحدد فئة الكائن المرتبط بالمعرف
|
|
|
Descriptor used to detect a specific object. Passed directly to
|
|
|
الحد الأقصى لعدد العناصر المخزنة من اللقطة. القيمة الافتراضية هي 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#
يُرجع ما إذا كان مستشعر الرؤية بالذكاء الاصطناعي متصلاً بـ EXP Brain.
وظائف متاحة
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 كعدد صحيح.
AIVisionSensor.objectCount
عنصر |
وصف |
|---|---|
|
اسم مثيل مستشعر الرؤية بالذكاء الاصطناعي الخاص بك. |
أمثلة
// 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 عنصر دون تحديد فهرس.
AIVisionSensor.largestObject
عنصر |
وصف |
|---|---|
|
اسم مثيل مستشعر الرؤية بالذكاء الاصطناعي الخاص بك. |
أمثلة
// 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 بكسل.
AIVisionSensor.objects[index].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);
}
