এআই ভিশন সেন্সর#
ভূমিকা#
আইকিউ এআই ভিশন সেন্সরটি বস্তু, রঙ এবং এপ্রিলট্যাগ আইডি শনাক্ত ও অনুসরণ করতে পারে। এর ফলে রোবটটি তার চারপাশ বিশ্লেষণ করতে, বস্তু অনুসরণ করতে এবং শনাক্তকৃত দৃশ্যমান তথ্যের ভিত্তিতে প্রতিক্রিয়া জানাতে পারে।
নীচের উদাহরণগুলির জন্য, কনফিগার করা 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— কালার কোড বা এপ্রিলট্যাগ আইডির অভিমুখ।.originX— বস্তুটির উপরের-বাম কোণার X অবস্থান।.originY— বস্তুটির উপরের-বাম কোণার Y অবস্থান।.id— বস্তুটির শ্রেণীবিভাগ বা ট্যাগ আইডি।.score— এআই শ্রেণীকরণের জন্য আত্মবিশ্বাস স্কোর।
কনস্ট্রাক্টর — সেন্সরগুলো ম্যানুয়ালি ইনিশিয়ালাইজ এবং কনফিগার করুন।
গেটার্স#
take_snapshot#
take_snapshot IQ AI ভিশন সেন্সরের ফ্রেম থেকে ডেটা ফিল্টার করে একটি একক সিগনেচারে নিয়ে আসে — যা হলো সেন্সর দ্বারা শনাক্তযোগ্য কোনো কিছুর একটি সংরক্ষিত বিবরণ, যেমন একটি প্রি-ট্রেইনড অবজেক্ট, একটি এপ্রিলট্যাগ আইডি, অথবা একটি কনফিগার করা কালার সিগনেচার বা কালার কোড — এবং একটি tuple রিটার্ন করে।
এই পদ্ধতিতে ব্যবহার করার আগে কালার সিগনেচার এবং কালার কোড প্রথমে ভিশন ইউটিলিটিতে কনফিগার করতে হবে।
টাপলটি অবজেক্টগুলিকে প্রস্থ অনুসারে বৃহত্তম থেকে ক্ষুদ্রতম ক্রমে সংরক্ষণ করে, যা সূচক 0 থেকে শুরু হয়। প্রতিটি অবজেক্টের বৈশিষ্ট্য তার সূচক ব্যবহার করে অ্যাক্সেস করা যেতে পারে। যদি কোনও মিলে যাওয়া অবজেক্ট সনাক্ত করা না যায় তবে একটি খালি টাপল ফেরত দেওয়া হয়।
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
প্যারামিটার |
বর্ণনা |
|---|---|
|
প্রদত্ত সিগনেচারের ডেটা অন্তর্ভুক্ত করার জন্য ডেটাসেট ফিল্টার করে। উপলব্ধ সিগনেচারগুলি হল:
|
|
ঐচ্ছিক। ১ থেকে ২৪ পর্যন্ত ফেরতযোগ্য অবজেক্টের সর্বোচ্চ সংখ্যা নির্ধারণ করে (ডিফল্ট: ৮)। |
# 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)
দ্রষ্টব্য: ফেরত আসা টাপলটিকে পাইথনের sorted ফাংশন ব্যবহার করে শুধুমাত্র প্রস্থ (width) নয়, যেকোনো প্রপার্টি অনুসারে সাজানো যেতে পারে। উদাহরণস্বরূপ, এপ্রিলট্যাগ আইডি (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 AI ভিশন সেন্সর নির্দিষ্ট AI ক্লাসিফিকেশনের অধীনে বিভিন্ন বস্তু শনাক্ত করতে পারে। ডিভাইসেস উইন্ডোতে AI ভিশন সেন্সরটি কনফিগার করার সময় নির্বাচিত AI ক্লাসিফিকেশন মডেলের উপর নির্ভর করে বিভিন্ন বস্তু শনাক্ত করা হবে। বর্তমানে উপলব্ধ মডেলগুলো হলো:
শ্রেণীকক্ষের জিনিসপত্র
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
৩ |
|
৪ |
|
৫ |
|
৬ |
|
৭ |
|
৮ |
|
VEX IQ রোবোটিক্স প্রতিযোগিতা মিক্স অ্যান্ড ম্যাচ
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
৩ |
|
VEX IQ রোবোটিক্স প্রতিযোগিতার স্তর উন্নত হলো।
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
রঙিন স্বাক্ষর#
কালার সিগনেচার হলো একটি অনন্য রঙ যা IQ AI ভিশন সেন্সর চিনতে পারে। এই সিগনেচারগুলো 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— আইকিউ এআই ভিশন সেন্সরটি আইকিউ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত।False— আইকিউ এআই ভিশন সেন্সরটি আইকিউ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত নয়।
Usage:
ai_vision_1.installed()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
বৈশিষ্ট্য#
take_snapshot ব্যবহার করার পরে tuple তে সংরক্ষিত প্রতিটি অবজেক্টের সাথে দশটি বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
.id এবং .score .score take_snapshot ব্যবহৃত হওয়ার মুহূর্তে IQ AI Vision সেন্সরের ভিউতে শনাক্তকৃত অবজেক্টটির অবস্থান এবং আকার বর্ণনা করে। এই ভ্যালুগুলো সেন্সরটির 320 বাই 240 পিক্সেল রেজোলিউশনের উপর ভিত্তি করে পিক্সেলে পরিমাপ করা হয়।
.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 শনাক্ত করা অবজেক্টটির প্রস্থ পিক্সেলে ফেরত দেয়, যা ১ থেকে ৩২০-এর মধ্যে একটি পূর্ণসংখ্যা।
# 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 শনাক্ত করা বস্তুটির উচ্চতা পিক্সেলে ফেরত দেয়, যা ১ থেকে ২৪০-এর মধ্যে একটি পূর্ণসংখ্যা।
# 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 শনাক্তকৃত বস্তুর কেন্দ্রের x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 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 শনাক্তকৃত কালার কোড বা এপ্রিলট্যাগ আইডির অভিমুখ ডিগ্রিতে ফেরত দেয়, যা ০ থেকে ৩৫৯-এর মধ্যে একটি পূর্ণসংখ্যা।
# 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 শনাক্ত করা বস্তুর বাউন্ডিং বক্সের উপরের-বাম কোণার x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 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 ID-এর জন্য, .id প্রপার্টিটি 0 থেকে 36-এর মধ্যে সনাক্তকৃত AprilTag ID নম্বরকে বোঝায়। একটি AI Classification-এর জন্য, .id প্রপার্টিটি AI Classifications বিভাগে পূর্বনির্ধারিত 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 শনাক্তকৃত এআই ক্লাসিফিকেশনের কনফিডেন্স স্কোরকে ১ থেকে ১০০-এর মধ্যে একটি পূর্ণসংখ্যা হিসেবে ফেরত দেয়।
কম স্কোরের অর্থ হলো সেন্সরটি শনাক্ত করা বস্তুটি সম্পর্কে কম আত্মবিশ্বাসী, অন্যদিকে বেশি স্কোরের অর্থ হলো সেন্সরটি বেশি আত্মবিশ্বাসী।
# 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)
নির্মাণকারী#
কনস্ট্রাক্টর ব্যবহার করে ম্যানুয়ালি AiVision, Colordesc, এবং Codedesc অবজেক্টগুলো তৈরি করা হয়, যেগুলো VEXcode-এর বাইরে IQ AI Vision Sensor কনফিগার করার জন্য প্রয়োজনীয়।
AI Vision Sensor#
AiVision একটি IQ AI ভিশন সেন্সর তৈরি করে।
ব্যবহারবিধি
Vision(port, sigs)
প্যারামিটার |
বর্ণনা |
|---|---|
|
IQ AI ভিশন সেন্সরটি ১ থেকে ১২ এর মধ্যে কোন স্মার্ট পোর্টের সাথে সংযুক্ত আছে। |
|
ঐচ্ছিক। এক বা একাধিক স্বাক্ষরের নাম:
|
উদাহরণ
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)
প্যারামিটার |
বর্ণনা |
|---|---|
|
|
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে vMax-এর মান |
|
ভিশন ইউটিলিটিতে মান |
|
ভিশন ইউটিলিটিতে মানটি হলো |
|
ভিশন ইউটিলিটিতে মানটি |
কালার সিগনেচার তৈরি করার জন্য মানগুলি পেতে, ভিশন ইউটিলিটি-তে যান। একবার কালার সিগনেচার কনফিগার করা হয়ে গেলে, কনফিগারেশন উইন্ডো থেকে প্যারামিটার মানগুলি কপি করুন।
উদাহরণ
# 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)
প্যারামিটার |
বর্ণনা |
|---|---|
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
উদাহরণ
# 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)