โปรเจกต์ Smart Blind Stick
Smart Blind Stick ที่ขับเคลื่อนด้วย AI ซึ่งใช้ Computer Vision แบบ on-device และ Distance Sensing เพื่อให้ความช่วยเหลือด้าน Navigation ด้วยเสียงแบบ Real-time สำหรับผู้พิการทางสายตา
Smart Blind Stick ที่ขับเคลื่อนด้วย AI ซึ่งใช้ Computer Vision แบบ on-device และ Distance Sensing เพื่อให้ความช่วยเหลือด้าน Navigation ด้วยเสียงแบบ Real-time สำหรับผู้พิการทางสายตา
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
Project Supporter Team
โพสต์โดย
Smart Blind Stick เป็นอุปกรณ์ช่วยเหลือขั้นสูงที่ออกแบบมาเพื่อเพิ่มความคล่องตัวในการเดินทางอย่างอิสระสำหรับผู้พิการทางสายตา ด้วยการเชื่อมต่อการประมวลผลประสิทธิภาพสูงเข้ากับการควบคุม Hardware แบบ Real-time ระบบนี้จะทำหน้าที่เป็น "การมองเห็นด้วยเสียง" ให้กับผู้ใช้งาน
ด้วยการใช้งาน Arduino UNO Q ไม้เท้าสามารถระบุตัวบุคคลในสภาพแวดล้อมผ่านโมเดล AI Object Detection ภายในตัวเครื่อง พร้อมทั้งคำนวณระยะทางที่แม่นยำด้วย Sensor แบบ Time-of-Flight ไปพร้อมๆ กัน เมื่อตรวจพบคน อุปกรณ์จะใช้ Engine แบบ Text-to-Speech (TTS) เพื่อแจ้งเตือนการมีอยู่ของวัตถุและระยะห่างที่แน่นอนในหน่วยเซนติเมตร ซึ่งเป็นการสร้างแผนที่เสียงของสภาพแวดล้อมโดยรอบแบบ Real-time

Core Controller: Arduino UNO Q ที่มาพร้อมกับ Qualcomm Dragonwing™ QRB2210 MPU และ STM32U585 MCU
Vision Input: USB Camera เชื่อมต่อกับ MPU สำหรับการทำ Video Inference แบบ Real-time
Distance Sensor: Modulino Distance Sensor (Time-of-Flight) เชื่อมต่อผ่าน Interface แบบ I2C สำหรับการวัดระยะลึก
Feedback Output: ระบบลำโพงภายนอกเชื่อมต่อกับ TTS Server ภายในสำหรับประกาศเสียงแจ้งเตือน
Connectivity : รองรับ Wi-Fi และ Bluetooth ในตัว สำหรับการสื่อสารระหว่าง Board และ Voice Synthesis Server
อุปกรณ์นี้ใช้อินเทอร์เฟซที่ไม่ใช้การมองเห็น เพื่อให้มั่นใจว่าผู้ใช้งานจะสามารถเข้าถึงและใช้ประโยชน์ได้สูงสุด:
Auditory Feedback : นี่คือวิธีการโต้ตอบหลัก ระบบจะแปลง AI Metadata ทางเทคนิคและข้อมูลจาก Sensor ให้เป็นภาษาธรรมชาติผ่าน TTS (Text to Speech) โดยสามารถส่งเสียงแจ้งเตือนผ่านลำโพง (Bluetooth) หรือหูฟัง (แบบสาย)
Spatial Awareness : ระบบจะให้คำแนะนำด้วยเสียงที่เฉพาะเจาะจง เช่น "พบคนอยู่ที่ระยะ 120 เซนติเมตร" ช่วยให้ผู้ใช้งานสามารถประเมินระยะลึกและความใกล้ไกลได้ทันทีโดยไม่ต้องใช้การสัมผัสทางกายภาพด้วยตนเอง
ระบบเลือกใช้โมเดล Object Detection แบบ YOLOX-Nano ซึ่งรวมเข้าเป็นส่วนประกอบ Software แบบ Modular
Local Edge AI: การทำ AI Inference ทั้งหมดเกิดขึ้นภายในเครื่องบน MPU ที่ใช้ระบบปฏิบัติการ Debian เพื่อความเป็นส่วนตัวของผู้ใช้งานและการตอบสนองที่รวดเร็ว (Low-latency)
Information Prioritization: เพื่อให้แน่ใจว่าการแจ้งเตือนด้วยเสียงนั้นชัดเจนและใช้งานได้จริง ระบบจึงใช้ค่า Confidence Threshold ที่ 0.6 และกำหนดระยะเวลาหยุดพักการแจ้งเตือน (Alert Cooldown) 5 วินาที เพื่อป้องกันไม่ให้ผู้ใช้งานสับสนจากการแจ้งเตือนที่ซ้ำซ้อนหรือมีความแม่นยำต่ำ และมุ่งเน้นไปที่การเปลี่ยนแปลงที่สำคัญในสภาพแวดล้อมเท่านั้น
ตรรกะของแอปพลิเคชันถูกแยกส่วนการทำงานผ่านการตั้งค่าระบบคู่ (Dual-system) เพื่อให้มั่นใจในความเสถียร:
MCU : Microcontroller STM32 ทำงานบน Zephyr OS ทำหน้าที่จัดการ Modulino Distance Sensor และแจ้งเตือนหน่วยประมวลผลเมื่อมีการวัดค่าใหม่ทุกๆ 100ms ผ่าน RPC Bridge
MPU : หน่วยประมวลผล Qualcomm ทำงานบน Debian Linux และรันตรรกะแอปพลิเคชันด้วย Python โดยจะจัดการ Video Stream, ประมวลผลโมเดล Object Detection และประสานงานการสั่งงาน TTS
Communication : MCU และ MPU สื่อสารกันผ่าน Remote Procedure Calls (RPC) ช่วยให้ MCU สามารถสั่งงานฟังก์ชัน Python ได้เหมือนเป็นคำสั่งภายในเครื่อง
TTS Infrastructure: Python Flask Server สำรองจะรับข้อความผ่านเครือข่ายและสังเคราะห์เป็นเสียงพูดโดยใช้ Library pyttsx3
ในส่วนนี้ เราจะเน้นไปที่ลำดับการทำงานของการตรวจจับวัตถุและการสั่งงานเสียงแจ้งเตือน
The Processor: Detecting a Person
ในฝั่งหน่วยประมวลผล (main.py) ตรรกะการทำงานจะเป็นแบบ Event-driven เราใช้ Handler สำหรับรอรับการตรวจจับจาก Camera Stream เมื่อตรวจพบคนด้วยค่าความเชื่อมั่นสูง Script จะรวมข้อมูลนี้เข้ากับข้อมูลระยะทางล่าสุดและสั่งงาน Engine เสียง:
# Function to handle detections and trigger voice
def handle_detections(detections):
for key, value in detections.items():
if value.get("confidence") > 0.6:
# Construct message with the latest distance from the MCU
message = f"I see a {key} at {current_distance} millimeters"
speak_text(message) # Send to TTS Server
# Connect the callback to the detection stream
detection_stream.on_detect_all(handle_detections)
The MCU: Reading Distance
ในฝั่ง Microcontroller (sketch.ino) บอร์ดจะคอยอ่านค่าจาก Sensor อย่างต่อเนื่อง และส่งข้อมูลระยะทางดิบไปยังหน่วยประมวลผลโดยใช้ Bridge:
void loop() {
if (distanceSensor.available()) {
int measurement_mm = distanceSensor.get();
// Notify the Linux processor of the new distance
Bridge.notify("update_distance", measurement_mm);
}
}


สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้