ความท้าทายด้านข้อมูลวิสัยทัศน์ - Python
กล่องเครื่องมือสำหรับครู
-
วัตถุประสงค์ของความท้าทายด้านข้อมูลวิสัยทัศน์
วัตถุประสงค์ของ Vision Data Challenge คือเพื่อให้แน่ใจว่านักเรียนเข้าใจข้อมูลที่รวบรวมจากสแน็ปช็อตของ Vision Sensor และวิธีการคำนวณค่า X และ Y ตรงกลาง นักเรียนของคุณควรทำแล็บนี้ให้เสร็จโดยทำความเข้าใจว่าข้อมูลนั้นอาจตีความได้อย่างไร (เช่น ค่า X ตรงกลางสามารถใช้เพื่อกำหนดว่าวัตถุอยู่ที่ตำแหน่งใดเมื่อเทียบกับจุดศูนย์กลางของหุ่นยนต์) และแนวทางปฏิบัติที่ดีที่สุดในการตั้งชื่อวัตถุเมื่อกำหนดค่า
ทำแบบทดสอบ Vision Data Challenge ให้เสร็จโดยตอบคำถามและกรอกข้อมูลที่ขาดหายไปในสมุดบันทึกวิศวกรรมของคุณ
- คำแนะนำใดต่อไปนี้ที่ใช้ในการถ่ายภาพสแน็ปช็อตด้านบน?
-
vision_5.take_snapshot(REDBOX)
-
vision_5.take_snapshot(YELLOWBOX)
-
-
กรอกค่าเหล่านี้:
- YELLOWBOX อยู่ทางซ้ายหรือทางขวาของจุดศูนย์กลางของหุ่นยนต์?
- YELLOWBOX อยู่เหนือหรือใต้จุดศูนย์กลางของหุ่นยนต์?
- YELLOWBOX คือ ไม่ใช่ เป็นชื่อที่ดีที่สุดที่จะใช้กับวัตถุนี้ หากคุณต้องการจดจำได้ง่ายว่าลายเซ็นสีไหนเป็นสีไหน ชื่อไหนดีกว่ากัน? ทำไม
- เกียร์สีเหลือง
- เยลโล่คิวบ์
กล่องเครื่องมือสำหรับครู
-
คำตอบ
คุณสามารถนำคำตอบของนักเรียนมาอภิปรายกันทั้งชั้นเรียน และ/หรือตรวจสอบสมุดบันทึกวิศวกรรมของนักเรียนเพื่อให้แน่ใจว่านักเรียนได้ทำกิจกรรมสำเร็จ
-
vision_5.take_snapshot(YELLOWBOX)
- กล่องสีเหลืองอยู่ทางด้านซ้ายของจุดกึ่งกลางของหุ่นยนต์เล็กน้อย แต่ต่างกันเพียง 16.5 พิกเซลเท่านั้น (กึ่งกลาง 157.5 - 141)
- YELLOWBOX ต่ำกว่าจุดศูนย์กลางของหุ่นยนต์เล็กน้อย แต่ต่างกันเพียง 5.5 พิกเซลเท่านั้น (111 - ศูนย์กลาง 105.5)
-
ก. เกียร์สีเหลือง
นี่เป็นชื่อที่ดีกว่าเนื่องจากอธิบายไม่เพียงแต่สีของวัตถุเท่านั้น แต่ยังรวมถึงประเภทของวัตถุด้วย มันคือเกียร์ ไม่ใช่ เป็นกล่องหรือลูกบาศก์
ขยายการเรียนรู้ของคุณ
-
ใช้คำแนะนำการตรวจจับภายในโครงการ
ตอนนี้ข้อมูลที่รายงานของเซ็นเซอร์วิชั่นบางส่วนได้รับการเข้าใจดีขึ้นแล้ว นักเรียนอาจต้องการใช้คำแนะนำการตรวจจับเหล่านี้ภายในโครงการ อนุญาตให้พวกเขาสำรวจการทำเช่นนั้น
def check_red_callback():
brain.screen.set_font(FontType.MONO40)
brain.screen.clear_row(3)
brain.screen.set_cursor(3, 1)
vision_5_objects = vision_5.take_snapshot(REDBOX)
if (vision_5_objects):
brain.screen.print("Red Object Found")
brain.screen.next_row()
brain.screen.print("Number of Objects Detected:", len(vision_5_objects))
brain.screen.next_row()
brain.screen.print("Center X:", vision_5.largest_object().centerX)
brain.screen.next_row()
brain.screen.print("Center Y:", vision_5.largest_object().centerY)
brain.screen.next_row()
brain.screen.print("Width:", vision_5.largest_object().width)
brain.screen.next_row()
brain.screen.print("Height:", vision_5.largest_object().height)
brain.screen.next_row()
else:
brain.screen.print("No Red Object")
นักเรียนที่มีทักษะขั้นสูงอาจใช้คำแนะนำเหล่านี้ภายในโครงการเพื่อใช้ในการตัดสินใจ
while True:
drivetrain.drive(FORWARD)
vision_5_objects = vision_5.take_snapshot(REDBOX)
if (vision_5_objects) and (vision_5.largest_object().centerX < 157.5):
drivetrain.turn_for(LEFT, 90, DEGREES)
else:
drivetrain.turn_for(RIGHT, 90, DEGREES)
wait(5, MSEC)