এআই ভিশন#
ভূমিকা#
এআই ভিশন সেন্সরটি বস্তু, রঙ এবং এপ্রিলট্যাগ আইডি শনাক্ত ও ট্র্যাক করতে পারে। এর ফলে রোবটটি তার চারপাশ বিশ্লেষণ করতে, বস্তু অনুসরণ করতে এবং শনাক্ত করা দৃশ্যমান তথ্যের ভিত্তিতে প্রতিক্রিয়া জানাতে পারে।
এই পৃষ্ঠায় উদাহরণস্বরূপ এআই ভিশন সেন্সর, কালার সিগনেচার এবং কালার কোডের নাম হিসেবে যথাক্রমে ai_vision_1, RED_BOX, এবং BOX_CODE ব্যবহার করা হয়েছে। প্রয়োজন অনুযায়ী এগুলিকে আপনার নিজস্ব কনফিগার করা নাম দিয়ে প্রতিস্থাপন করুন।
নিম্নে সকল পদ্ধতির একটি তালিকা দেওয়া হলো:
গেটার্স – এআই ভিশন সেন্সর থেকে ডেটা সংগ্রহ করে।
take_snapshot– একটি নির্দিষ্ট সিগনেচারের জন্য ডেটা ক্যাপচার করে।installed– এআই ভিশন সেন্সরটি V5 ব্রেইনের সাথে সংযুক্ত আছে কিনা।
বৈশিষ্ট্য – take_snapshot থেকে ফেরত আসা অবজেক্ট ডেটা।
.exists– বর্তমান সনাক্তকরণে বস্তুটি বিদ্যমান কিনা।.width– সনাক্ত করা বস্তুর প্রস্থ।.height– সনাক্ত করা বস্তুর উচ্চতা।.centerX– বস্তুটির কেন্দ্রের X অবস্থান।.centerY– বস্তুটির কেন্দ্রের Y অবস্থান।.angle– কালার কোডের অভিমুখ।.originX– বস্তুটির উপরের-বাম কোণার X অবস্থান।.originY– বস্তুটির উপরের-বাম কোণার Y অবস্থান।.id– বস্তুটির শ্রেণীবিভাগ বা ট্যাগ আইডি।.score– এআই শ্রেণীকরণের জন্য আত্মবিশ্বাস স্কোর।
কনস্ট্রাক্টর – এআই ভিশন সেন্সর এবং এর সিগনেচারগুলো ম্যানুয়ালি ইনিশিয়ালাইজ ও কনফিগার করুন।
গেটার্স#
take_snapshot#
take_snapshot AI ভিশন সেন্সরের ফ্রেম থেকে ডেটা ফিল্টার করে একটি একক সিগনেচারে নিয়ে আসে — যা হলো সেন্সর দ্বারা শনাক্তযোগ্য কোনো কিছুর একটি সংরক্ষিত বিবরণ, যেমন একটি প্রি-ট্রেইনড অবজেক্ট, একটি এপ্রিলট্যাগ আইডি, অথবা একটি কনফিগার করা কালার সিগনেচার বা কালার কোড — এবং একটি tuple রিটার্ন করে।
এই পদ্ধতিতে ব্যবহার করার আগে কালার সিগনেচার এবং কালার কোড প্রথমে ভিশন ইউটিলিটিতে কনফিগার করতে হবে।
টাপলটি অবজেক্টগুলিকে প্রস্থ অনুসারে বৃহত্তম থেকে ক্ষুদ্রতম ক্রমে সংরক্ষণ করে, যা সূচক 0 থেকে শুরু হয়। প্রতিটি অবজেক্টের বৈশিষ্ট্য তার সূচক ব্যবহার করে অ্যাক্সেস করা যেতে পারে। যদি কোনও মিলযুক্ত অবজেক্ট সনাক্ত করা না যায় তবে একটি খালি টাপল ফেরত দেওয়া হয়।
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
প্যারামিটার |
বর্ণনা |
|---|---|
|
প্রদত্ত সিগনেচারের ডেটা অন্তর্ভুক্ত করার জন্য ডেটাসেট ফিল্টার করে। উপলব্ধ সিগনেচারগুলো হলো:
|
|
ঐচ্ছিক। এর মাধ্যমে ১ থেকে ২৪ পর্যন্ত সর্বোচ্চ সংখ্যক অবজেক্ট ফেরত দেওয়া যাবে তা নির্ধারণ করা যায়। ডিফল্ট সংখ্যা হলো ৮। |
# 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)
দ্রষ্টব্য: ফেরত আসা টাপলটিকে পাইথনের 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)
এআই শ্রেণিবিন্যাস#
এআই ভিশন সেন্সর নির্দিষ্ট এআই ক্লাসিফিকেশনের অধীনে বিভিন্ন বস্তু শনাক্ত করতে পারে। ডিভাইসেস উইন্ডোতে এআই ভিশন সেন্সর কনফিগার করার সময় নির্বাচিত এআই ক্লাসিফিকেশন মডেলের উপর নির্ভর করে বিভিন্ন বস্তু শনাক্ত করা হবে। বর্তমানে উপলব্ধ মডেলগুলো হলো:
শ্রেণীকক্ষের উপাদানসমূহ
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
৩ |
|
৪ |
|
৫ |
|
৬ |
|
৭ |
|
৮ |
|
VEX V5 রোবোটিক্স প্রতিযোগিতা: উচ্চ ঝুঁকি
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
VEX V5 রোবোটিক্স প্রতিযোগিতা পিছিয়ে দেওয়া হলো
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
VEX V5 রোবোটিক্স প্রতিযোগিতা ওভাররাইড
আইডি নম্বর |
এআই শ্রেণিবিন্যাস |
|---|---|
০ |
|
১ |
|
২ |
|
৩ |
|
৪ |
|
রঙিন স্বাক্ষর#
কালার সিগনেচার হলো একটি অনন্য রঙ যা এআই ভিশন সেন্সর চিনতে পারে। এই সিগনেচারগুলো এআই ভিশন সেন্সরকে বস্তুর রঙের উপর ভিত্তি করে সেগুলোকে শনাক্ত ও ট্র্যাক করতে সাহায্য করে। একবার একটি কালার সিগনেচার কনফিগার করা হলে, সেন্সরটি তার দৃষ্টিসীমার মধ্যে সেই নির্দিষ্ট রঙের বস্তুগুলোকে শনাক্ত করতে পারে। কালার সিগনেচারগুলো 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 ব্রেইনের সাথে সংযুক্ত আছে কিনা।
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 ব্যবহৃত হওয়ার মুহূর্তে এআই ভিশন সেন্সরের ভিউতে শনাক্তকৃত অবজেক্টটির অবস্থান এবং আকার বর্ণনা করে। এই ভ্যালুগুলো সেন্সরের 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 শনাক্তকৃত এআই ক্লাসিফিকেশনের কনফিডেন্স স্কোরকে ১ থেকে ১০০-এর মধ্যে একটি পূর্ণসংখ্যা হিসেবে ফেরত দেয়।
কম স্কোরের অর্থ হলো সেন্সরটি শনাক্ত করা বস্তুটি সম্পর্কে কম আত্মবিশ্বাসী, অন্যদিকে বেশি স্কোরের অর্থ হলো সেন্সরটি বেশি আত্মবিশ্বাসী।
নির্মাণকারী#
VEXcode-এর বাইরে AI ভিশন সেন্সর কনফিগার করার জন্য প্রয়োজনীয় AiVision, Colordesc, এবং Codedesc অবজেক্টগুলো ম্যানুয়ালি তৈরি করতে কনস্ট্রাক্টর ব্যবহার করা হয়।
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)
প্যারামিটার |
বর্ণনা |
|---|---|
|
|
|
লাল রঙের মান ০ থেকে ২৫৫ পর্যন্ত। |
|
সবুজ রঙের মান ০ থেকে ২৫৫ পর্যন্ত। |
|
রঙটির নীল মান ০ থেকে ২৫৫ পর্যন্ত। |
|
কালার হুইলে (১-৪০) ডিগ্রির পরিসর হিসাবে অনুমোদিত রঙের তারতম্য। উচ্চতর মান মূল রঙ থেকে আরও বিস্তৃত ঘূর্ণন বিচ্যুতির অনুমতি দেয়। |
|
অনুমোদিত স্যাচুরেশন বিচ্যুতি, ০.১০ থেকে ১.০০ পর্যন্ত। এই মানটি সম্পূর্ণ স্যাচুরেশন পরিসরের সেই ভগ্নাংশকে বোঝায় যার মধ্যে রঙটি পরিবর্তিত হতে পারে (যেমন, ০.১০ = ±১০% স্যাচুরেশন)। |

"""
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 একটি কালার কোড তৈরি করে। এটি ব্যবহার করার জন্য কমপক্ষে দুটি আগে থেকে সংজ্ঞায়িত কালার সিগনেচার প্রয়োজন। একটি ভিশন সেন্সরে একবারে আটটি পর্যন্ত ভিন্ন কালার কোড সংরক্ষণ করা যেতে পারে।
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
প্যারামিটার |
বর্ণনা |
|---|---|
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
# 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 একটি এপ্রিলট্যাগ আইডি তৈরি করে। আপনি এটি ব্যবহার করে শনাক্তযোগ্য এপ্রিলট্যাগ আইডি নির্ধারণ করতে পারেন, যা আপনার কোডকে আরও স্পষ্ট এবং সহজে পাঠযোগ্য করে তোলে।
Usage:
Tagdesc(id)
প্যারামিটার |
বর্ণনা |
|---|---|
|
ব্যবহৃতব্য এপ্রিলট্যাগ আইডি। |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)