สารบัญ:

หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4: 6 ขั้นตอน
หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4: 6 ขั้นตอน
วีดีโอ: โปรเจคหุ่นยนต์ Raspberry Pi ควบคุมด้วย เว็บเพจ 2024, พฤศจิกายน
Anonim
หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4
หุ่นยนต์จดจำป้ายจราจร Raspberry Pi 4

คำแนะนำนี้อิงจากโครงการมหาวิทยาลัยของฉัน จุดมุ่งหมายคือการสร้างระบบที่โครงข่ายประสาทเทียมวิเคราะห์ภาพจากนั้นตามการจดจำจะบอกให้หุ่นยนต์ Arduino เคลื่อนที่ผ่าน Ros

ตัวอย่างเช่น ถ้ารู้จักป้ายเลี้ยวขวา หุ่นยนต์จะเลี้ยวขวา ถ้ารู้จักป้ายเลี้ยวซ้าย หุ่นยนต์ก็จะเลี้ยวซ้าย ถ้าไม่มีใครรู้จัก หุ่นยนต์ก็จะเดินหน้าต่อไป ชุดข้อมูลที่จะใช้คือการจดจำสัญญาณจราจรอย่างเป็นทางการจาก INI (2019) (Institut Fur Neuroinformatik) ชุดข้อมูลนี้มี 43 คลาส แต่ต้องการเพียงสองคลาสเท่านั้น โฟลเดอร์ 00033 และ 00034 ในชุดข้อมูลเป็นสัญญาณไฟเลี้ยวซ้ายและขวา

ขั้นตอนที่ 1: ข้อกำหนด

ความต้องการ
ความต้องการ
ความต้องการ
ความต้องการ
ความต้องการ
ความต้องการ

ข้อกำหนดสำหรับโครงการนี้มีดังต่อไปนี้:

หุ่นยนต์ Arduino (โดยทั่วไปคือ Arduino uno ไดรเวอร์มอเตอร์และมอเตอร์) (ไม่จำเป็นหากคุณไม่ได้ใช้หุ่นยนต์)

ราสเบอร์รี่ pi 4

กล้องพาย

ซอฟต์แวร์ที่จำเป็น:

หลาม 3

โอเพ่นซีวี4

เทนเซอร์โฟลว์

arduino IDE (ไม่จำเป็นหากคุณไม่ได้ใช้หุ่นยนต์)

Ros (ไม่จำเป็นถ้าคุณไม่ได้ใช้หุ่นยนต์)

ไม่ว่า python ide ที่คุณชื่นชอบคืออะไร (ใน raspberry pi ฉันใช้ Thonny)

ในการตั้งค่า OpenCV และ Tensorflow ให้ทำตามคำแนะนำของ Adrian ลิงค์:

ฉันแนะนำให้ดูบทช่วยสอนของเขาให้มากที่สุดเท่าที่เป็นไปได้ มันน่าสนใจจริงๆ และมีประโยชน์ทั้งสำหรับผู้เริ่มต้นและคนกลาง

ขั้นตอนที่ 2: การฝึกอบรมข้อมูล

สคริปต์รถไฟออกแบบมาเพื่อเข้าถึงชุดข้อมูลที่รวบรวมรูปภาพประมาณ 50,000 ภาพจาก 43 คลาส สคริปต์เขียนด้วย python โดยใช้ไลบรารีต่างๆ: os - ใช้สำหรับเชื่อมโยงสคริปต์ python กับไดเร็กทอรีที่ถูกต้องซึ่งเป็นที่ตั้งของชุดข้อมูล Matplotlib – ใช้สำหรับแสดงข้อมูลจากแบบจำลองการฝึก Tensorflow และ keras – เป็นไลบรารี่ที่ใช้สร้างโมเดลโครงข่ายประสาทเทียม ใช้เพื่อออกแบบโมเดล Numpy – ไลบรารีนี้ใช้สำหรับเปลี่ยนรูปภาพให้เป็นอาร์เรย์ ซึ่งสามารถใส่ผ่านโมเดลเพื่อดึงข้อมูลการทำนาย

สคริปต์ที่แนบมาคือรหัสหลามสำหรับสร้างโมเดลจากชุดข้อมูล ประกอบด้วยคอนโวลูชั่น 2D ที่มีอินพุต (5, 5) และการเปิดใช้งาน relu จากนั้นจึงรวมเข้าด้วยกัน เมื่อเสร็จแล้วอินพุตจะผ่านการคอนโวลูชันอื่นด้วยอินพุต (3, 3) ที่มีการเปิดใช้งานและการรวมกันแบบเดียวกัน สิ่งนี้จะเกิดขึ้นเป็นครั้งสุดท้ายก่อนที่จะถูกทำให้แบน จากนั้นความหนาแน่นจะถูกนำไปใช้กับจำนวนคลาสที่มีอยู่ ในกรณีนี้คือ 43

ขั้นตอนต่อไปคือการรวบรวมแบบจำลอง นี่คือส่วนที่กำหนดเครื่องมือเพิ่มประสิทธิภาพ sgd เหมาะสมที่สุดเนื่องจากมีความคล้ายคลึงกับเครื่องมือเพิ่มประสิทธิภาพที่ใช้ในงานที่ 1 Sgd ย่อมาจาก Stochastic gradient descent นอกจากนี้ ภายในคอมไพเลอร์ยังต้องตั้งค่าการสูญเสีย การเลือกการสูญเสีย sparse_categorical_crossentropy เหมาะสมที่สุด เนื่องจากหมวดหมู่เป็นแบบจำนวนเต็ม และโมเดลจะแสดงผลการคาดการณ์สำหรับแต่ละคลาสเป็นจำนวนทศนิยมระหว่าง 0 ถึง 1 1 มีความแม่นยำ 100%

เมื่อคอมไพเลอร์เสร็จสิ้น จำเป็นต้องใช้ตัวสร้างสำหรับโมเดลเพื่อเริ่มประมวลผลอินพุตของรูปภาพ ตัวสร้างประกอบด้วยหลายส่วน: training_set – นี่คือลิงค์ไปยังชุดข้อมูลที่ใช้สำหรับการฝึกอบรม, steps_per_epoch – นี่คือจำนวนขั้นตอนต่อยุคที่จำเป็น, ยุค – นี่คือจำนวนครั้งที่โปรแกรมจะทำซ้ำผ่านชุดข้อมูลทั้งหมด, validation_data – นี่คือลิงค์ไปยังชุดข้อมูลที่ใช้สำหรับการตรวจสอบ, validation_steps – จำนวนขั้นตอนที่ใช้สำหรับการตรวจสอบ, การตรวจสอบความถูกต้องจะเกิดขึ้นเมื่อสิ้นสุดแต่ละยุค

โดยทั่วไป การล้างชุดข้อมูลทั้งหมดจะต้องทำให้สมบูรณ์ต่อยุค ตัวอย่างเช่น ชุดข้อมูล 1024 ภาพจะต้องใช้: ขนาดแบทช์ = 32, ขั้นตอนต่อยุค = 32, ยุค = 1 แต่ละขั้นตอนรวมถึงขนาดแบทช์ทั้งหมด ดังนั้นด้วยขนาดแบทช์ 32 ขั้นตอนจะเป็น 32 ในอีกด้านหนึ่ง ทางที่ดีควรมีขนาดแบทช์ที่ใหญ่กว่าจำนวนคลาส เนื่องจากหากขนาดแบทช์มีขนาดเล็กลง แต่ละขั้นตอนจะไม่สามารถรวมรูปภาพจากแต่ละคลาสได้

เมื่อตัวแบบเสร็จสิ้นการฝึก โดยใช้ matplotlib โปรแกรมจะสร้างกราฟของผลลัพธ์ ซึ่งจะแสดงประวัติของการฝึกตั้งแต่ต้นจนจบ กราฟประกอบด้วยความแม่นยำ ความแม่นยำในการตรวจสอบ การสูญเสีย และการสูญเสียจากการตรวจสอบ ซึ่งจะแบ่งตามยุคเพื่อแสดงว่าการฝึกอบรมดำเนินไปอย่างไร ขั้นตอนสุดท้ายคือการบันทึกโมเดลเป็นไฟล์.h5 ซึ่งสามารถเข้าถึงได้ในภายหลังสำหรับกระบวนการคาดการณ์ การบันทึกโมเดลหมายความว่าทุกครั้งที่รันโปรแกรมการคาดคะเน โปรแกรมการฝึกอบรมไม่จำเป็นต้องรันอีก โปรแกรมการฝึกอบรมอาจใช้เวลานานถึง 10 นาทีต่อยุคสำหรับราสเบอร์รี่ pi

แนบเป็นสคริปต์การฝึกอบรม:

ขั้นตอนที่ 3: การนำการคาดการณ์ของกล้อง Pi ไปใช้

โปรแกรมต่อไปคือการทำนายและสคริปต์ผู้เผยแพร่

ขั้นตอนแรกคือการโหลดโมเดลโดยใช้ model.load() ขั้นตอนที่สองคือการวนซ้ำเฟรมจากกล้อง pi โดยใช้ opencv จากนั้นปรับขนาดเฟรมเป็นขนาดเดียวกับขนาดอินพุตที่ใช้ในขั้นตอนการฝึกอบรม 32 x 32 พิกเซล เมื่อเสร็จแล้ว เฟรมที่ปรับขนาดใหม่จะถูกใส่ผ่านโมเดลโดยใช้ model.predict () ซึ่งส่งออกเมทริกซ์ แต่ละองค์ประกอบของเมทริกซ์จะลอยจาก 0 ถึง 1 ดัชนีองค์ประกอบจะเหมือนกับคลาสที่แสดง ดังนั้น องค์ประกอบแรกคือคลาส 1 และตัวเลขคือการคาดการณ์ความแน่นอนของภาพที่มาจากคลาสนั้น เช่น.

หมายเหตุ: หากคุณไม่ได้ใช้ฝั่งหุ่นยนต์ เพียงลบบรรทัด:

"นำเข้า rospy"

def talker (ทิศทาง):

ข้อความ = สตริง ()

pub = rospy. Publisher ('หุ่นยนต์', สตริง, คิว_ขนาด=10)

rospy.init_node('นักพูด' ไม่ระบุชื่อ=จริง)

ข้อความ = ทิศทาง

rospy.loginfo (ข้อความ)

pub.publish (ข้อความ)"

"ผู้พูด(ทิศทาง)"

สิ่งที่แนบมาคือสคริปต์กล้อง Pi

ขั้นตอนที่ 4: หุ่นยนต์ Arduino

ขั้นตอนสุดท้ายคือสคริปต์โปรแกรมหุ่นยนต์

สิ่งนี้เขียนด้วย C ++ และเป็นไฟล์. ino สำหรับ arduino uno โปรแกรมต้องการไลบรารี ros ซึ่งสามารถพบได้ในตัวจัดการไลบรารีภายใน ide เมื่อนำเข้าไฟล์นี้แล้ว จะมีไฟล์ตัวอย่าง ผมเลือกที่จะขยายไฟล์ไฟ led กะพริบ เนื่องจากจะทำวัตถุประสงค์เดียวกันกับสิ่งที่ต้องการ โปรแกรมยังคงวนซ้ำจนกว่าไฟจะถูกตัดการเชื่อมต่อ อย่างแรก มันฟังโรบ็อตหัวข้อ เมื่อจับคำสั่งจากหัวข้อนั้น มันจะมีคำสั่ง if เพื่อดูว่าคำสั่งนั้นพูดอะไร หากคำสั่งอยู่ทางซ้าย สคริปต์จะเรียกใช้วิธีเลี้ยวซ้าย หากคำสั่งถูกต้อง คำสั่งจะเรียกใช้วิธีเลี้ยวขวา มิฉะนั้นจะเรียกใช้วิธีการส่งต่อ ทั้งสามวิธีนี้คล้ายกันมากโดยบอกพินดิจิตอลเป็น LOW (กราวด์) หรือ 100 (PWM) นี้เพื่อให้หุ่นยนต์ไม่เร็วเกินไปโดยบอกคนขับมอเตอร์ให้ปล่อยเพียงเล็กน้อย แรงดันไฟฟ้าออก ลำดับของเอาต์พุตเหล่านี้คือสิ่งที่ทำให้หุ่นยนต์เลี้ยวซ้ายและขวาหรือไปข้างหน้า นี่เป็นเพราะการวางแนวของแรงดันไฟฟ้าที่ส่งไปยังมอเตอร์

สิ่งที่แนบมาคือสคริปต์.ino สำหรับ arduino

ขั้นตอนที่ 5: การทดสอบ

การทดสอบ
การทดสอบ
การทดสอบ
การทดสอบ
การทดสอบ
การทดสอบ

ภาพที่แนบมาเพื่อให้โครงการตั้งแต่ต้นจนจบ ภาพแรกแสดงขั้นตอนการฝึกอบรม เมื่อเสร็จแล้วจะมีการพิมพ์แบบจำลองที่ทำขึ้น ภาพที่ 3 แสดงการทำนายจากสคริปต์การฝึก นี่เป็นขั้นตอนสุดท้ายของสคริปต์การฝึกอบรม หากคุณดูในโฟลเดอร์ที่มีสคริปต์การฝึกอบรม แสดงว่ามีการสร้างกราฟและแบบจำลองแล้ว กราฟควรมีลักษณะเหมือนภาพที่ 4 ที่นี่ แสดงประวัติการฝึกตั้งแต่ต้นจนจบ

ภาพสุดท้ายคือขณะเรียกใช้สคริปต์กล้อง pi ซึ่งเป็นสตรีมแบบสดจากกล้อง pi มีการทำนายในแต่ละเฟรมและพิมพ์คำทำนายในเทอร์มินัล กรอบแสดงสิ่งที่กล้องเห็น

แนบเป็นรายงานมหาวิทยาลัยของฉันสำหรับโครงการนี้ โปรดอ่านรายละเอียดเพิ่มเติมของโครงการ

ขั้นตอนที่ 6: ไฟล์เพิ่มเติมทั้งหมด

ไฟล์เพิ่มเติมทั้งหมด
ไฟล์เพิ่มเติมทั้งหมด

ไฟล์เหล่านี้บางส่วนเป็นไฟล์ทดสอบที่ฉันสร้างขึ้นระหว่างทาง

แนะนำ: