หน้าแรก ดูโปรเจกต์ทั้งหมด
Intermediate

โปรเจกต์ Automatic Face Ban: Solution การ Streaming ที่เน้น Privacy สำหรับ IoT

โปรเจกต์นี้สาธิตวิธีการเซ็นเซอร์ (ban) ใบหน้าแบบ Automatic ใน Live Video Stream เพื่อความปลอดภัยด้าน Privacy โดยใช้ Portenta H7 และ Portenta Vision Shield

โปรเจกต์ Automatic Face Ban: Solution การ Streaming ที่เน้น Privacy สำหรับ IoT
6,963 การดู
2 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

1x Portenta Vision Shield - LoRa®
-
1x Portenta H7
-
1x Portenta Vision Shield - Ethernet
-

แอปพลิเคชันและแพลตฟอร์ม

รายละเอียดและวิธีทำ

Automatic Face Ban: โซลูชันการสตรีมที่เน้นความเป็นส่วนตัวสำหรับ IoT

1. บทนำ:

โปรเจกต์นี้แสดงให้เห็นถึงการเซ็นเซอร์ใบหน้าอัตโนมัติ (Banning) ในวิดีโอสตรีมสดเพื่อรักษาความเป็นส่วนตัว โดยใช้ TensorFlow Lite FOMO (Fast Object Detection Model) บน Portenta H7 ที่จับคู่กับ Portenta Vision Shield (รุ่น Ethernet หรือ LoRa®) โดยจะมีการวางภาพ Overlay ขนาดใหญ่ทับลงไปเมื่อตรวจพบใบหน้าเพื่อปกปิดลักษณะเฉพาะตัว วิธีการนี้มีความสำคัญอย่างยิ่งสำหรับสภาพแวดล้อมที่มีข้อกำหนดด้านความเป็นส่วนตัวที่เข้มงวด เช่น โรงเรียน โรงพยาบาล และสถานที่สาธารณะ

โปรเจกต์นี้มีความสำคัญเนื่องจากประเด็นหลักดังต่อไปนี้:

  1. การปฏิบัติตามกฎระเบียบ (Compliance): กฎหมายความเป็นส่วนตัวมักกำหนดให้ใบหน้าต้องถูกทำให้ไม่ระบุตัวตนหรือเบลอ ก่อนที่จะสามารถบันทึกหรือสตรีมวิดีโอสู่สาธารณะได้
  2. การประมวลผลที่ Edge (Edge Processing): การตรวจจับและการเซ็นเซอร์ทั้งหมดเกิดขึ้นภายในตัว Portenta H7 ช่วยลดการส่งข้อมูลและลดความหน่วง (Latency) ซึ่งเหมาะสำหรับการปรับใช้ในงาน IoT
  3. ใช้พลังงานต่ำและมีขนาดกะทัดรัด: Portenta H7 พร้อม Portenta Vision Shield เป็นโซลูชันที่มีขนาดเล็ก เหมาะสำหรับแอปพลิเคชัน IoT ระดับมืออาชีพที่ทรัพยากรและการใช้พลังงานเป็นสิ่งสำคัญ

2. วัสดุและข้อกำหนด:

ฮาร์ดแวร์:

  1. Portenta H7 (1 ชิ้น) พร้อม Portenta Vision Shield (รุ่น Ethernet หรือ LoRa® ) (1 ชิ้น)
  2. เครือข่าย Wi-Fi® (จำเป็นสำหรับรุ่น LoRa®) หรือ Router/Access point (จำเป็นสำหรับรุ่น Ethernet) สำหรับการสตรีมวิดีโอ

ซอฟต์แวร์:

  1. OpenMV IDE (เวอร์ชันล่าสุด)
  2. OpenMV Firmware บนบอร์ด Portenta H7 (ตรวจสอบให้แน่ใจว่าเป็นเวอร์ชันล่าสุดที่รองรับ TensorFlow Lite FOMO)
  3. ไฟล์รูปภาพ Overlay (face.pbm) ซึ่งสามารถดาวน์โหลดได้ที่ส่วนท้ายของบทแนะนำนี้

ความรู้พื้นฐานที่จำเป็น:

  1. การเขียน Script ภาษา Python เบื้องต้น (สามารถแก้ไขตัวแปรและทำความเข้าใจ Code ได้)
  2. ความเข้าใจทั่วไปเกี่ยวกับหลักการ Computer Vision และ Object Detection
  3. แนวคิดพื้นฐานด้าน Networking เพื่อกำหนดค่า IP Address และทดสอบการสตรีมใน Web Browser

3. การตั้งค่าสภาพแวดล้อม:

3.1 การประกอบ Portenta H7 + Portenta Vision Shield:

  1. ต่อ Portenta Vision Shield เข้ากับ Portenta H7 โดยจัดตำแหน่งคอนเน็กเตอร์ High-Density ของทั้งบอร์ดและ Shield ให้ตรงกันตามที่แสดงในภาพเคลื่อนไหวด้านล่าง

  1. ยืนยันว่าโมดูล Camera หันออกด้านนอก และเสาอากาศ Wi-Fi® เชื่อมต่อกับ Shield อย่างแน่นหนาหากเป็นรุ่น LoRa®

3.2 การติดตั้ง/อัปเดต OpenMV Firmware:

  1. ดาวน์โหลดและติดตั้ง OpenMV IDE จากเว็บไซต์ทางการ
  2. เชื่อมต่อบอร์ด Portenta H7 เข้ากับคอมพิวเตอร์ของคุณโดยใช้สาย USB-C®
  3. ใน OpenMV IDE ไปที่ Tools > Run Bootloader (Load Firmware) และเลือก Firmware ล่าสุดที่เข้ากันได้สำหรับบอร์ด Portenta H7

3.3 การจัดระเบียบไฟล์โปรเจกต์

สำหรับโปรเจกต์นี้บน Portenta H7 คุณไม่จำเป็นต้องเพิ่มโมเดล TensorFlow Lite FOMO ด้วยตนเอง เนื่องจาก OpenMV Firmware สำหรับ Portenta มีโมเดลตรวจจับใบหน้าในตัวชื่อ " fomo_face_detection " มาให้แล้ว ดังนั้นการโหลดผ่าน ml.Model("fomo_face_detection") จะสามารถใช้งานได้ทันที

อย่างไรก็ตาม มีไฟล์ภายนอกหนึ่งไฟล์ที่คุณควรเพิ่มลงในระบบไฟล์ภายในของบอร์ด:

  1. รูปภาพ Overlay : นี่คือไฟล์ PBM แบบ 1-bit ที่มีรูปหน้ายิ้ม มีวัตถุประสงค์เพื่อปกปิดใบหน้ามนุษย์ที่ตรวจพบใน Camera Feed และทำให้ไม่สามารถระบุตัวตนได้ ให้คิดซะว่าเป็น "Sticker" สนุกๆ ที่ปรากฏขึ้นในตำแหน่งที่โมเดล FOMO ตรวจพบใบหน้า ตรวจสอบให้แน่ใจว่าไฟล์ชื่อ face.pbm และวางไว้ใน Root Directory ของ Internal Flash ของ Portenta H7 โดย Script ของโปรเจกต์จะเรียกใช้เส้นทางนี้เป็นค่าเริ่มต้น:

3.4 ข้อมูล Wi-Fi® (เฉพาะรุ่น Portenta Vision Shield LoRa ® ):

ในตัวอย่าง Script ที่ให้มาสำหรับ Portenta Vision Shield รุ่น LoRa® คุณต้องอัปเดตบรรทัดต่อไปนี้ให้ตรงกับเครือข่าย Wi-Fi® ของคุณก่อนรัน Script:

กำหนดค่า SSID และ KEY ของเครือข่าย Wi-Fi® ของคุณก่อนทำการทดสอบและรัน Script

4. คำอธิบาย Code

ในส่วนนี้ เราจะเน้นไปที่ Script เวอร์ชัน Wi-Fi® คือ portenta_faceban_streaming_wifi.py โดยจะแบ่งออกเป็นส่วนย่อยๆ เพื่ออธิบายว่าแต่ละส่วนช่วยในกระบวนการพรางใบหน้าอัตโนมัติได้อย่างไร หากคุณต้องการการเชื่อมต่อแบบใช้สาย สามารถใช้ Script เวอร์ชัน Ethernet คือ portenta_faceban_streaming_eth.py แทนได้ ซึ่งจะมีโครงสร้างเหมือนกันแต่เปลี่ยนการตั้งค่าเครือข่ายไร้สายเป็นอินเทอร์เฟซ Ethernet ( network.LAN() ) นอกเหนือจากการเริ่มต้นระบบเครือข่ายแล้ว ตรรกะสำหรับการตรวจจับใบหน้า การปรับขนาด Overlay และการสตรีม MJPEG จะยังคงเหมือนเดิมเกือบทั้งหมดในทั้งสอง Script

ด้านล่างนี้คือการตรวจสอบส่วนสำคัญของ Script เวอร์ชัน Wi-Fi® โดยแต่ละส่วนจะตามด้วยคำอธิบายบทบาทในการจับภาพเฟรม, การตรวจจับใบหน้า, การใช้ Overlay และการสตรีมผลลัพธ์สุดท้ายแบบ Real-time

4.1 การ Import และการตั้งค่า Global

ใน Code Snippet ต่อไปนี้ มีการ Import Module ต่างๆ เพื่อควบคุม Camera ( sensor ), ประมวลผล Image ( image ), ทำ Machine Learning Inference ( ml , NMS ) และจัดการ Networking ( network , socket ) จากนั้นจึงกำหนดค่า Wi-Fi® ( SSID และ KEY ) และกำหนดค่า TCP Server บน Port 8080

พารามิเตอร์การตรวจจับ MIN_CONFIDENCE , ENLARGEMENT_FACTOR และ HOLD_TIME_MS จะเป็นตัวกำหนดระดับความเชื่อมั่นที่ระบบต้องมีเพื่อระบุใบหน้า, ขนาดของ Overlay ที่ใช้ในการพรางตัว และระยะเวลาที่ Overlay จะยังคงปรากฏอยู่หลังจากตรวจไม่พบใบหน้าแล้ว

4.2 การเริ่มต้น Camera และ Model

ใน Code Snippet ต่อไปนี้ Camera จะถูกรีเซ็ตเพื่อจับภาพแบบ Grayscale ที่ความละเอียด QVGA จากนั้นจะถูก Crop เป็น 240×240 โดยใช้ฟังก์ชัน set_windowing เพื่อให้ตรงกับขนาด Input ที่โมเดล FOMO ต้องการ การหน่วงเวลาสั้นๆ ( skip_frames(time=2000) ) จะช่วยให้ Sensor ปรับเทียบค่าได้ จากนั้น Script จะโหลดโมเดลชื่อ " fomo_face_detection " และรูปภาพ Overlay ชื่อ " /face.pbm " โดยตัวแปร threshold_list จะแปลง MIN_CONFIDENCE เป็นช่วงตัวเลขเพื่อใช้กับการตรวจจับ Blob

4.3 การทำ Post-Processing แบบกำหนดเองสำหรับ FOMO

ในฟังก์ชัน fomo_post_process FOMO จะส่งออกชุดข้อมูล "Heatmaps" (หนึ่งรายการต่อคลาส) แต่ละรายการจะถูกปรับสเกลเป็น 0–255 และส่งผ่านฟังก์ชัน find_blobs() เพื่อระบุพื้นที่ที่อยู่เหนือเกณฑ์ที่กำหนด NMS (Non-Maximum Suppression) จะช่วยลดจำนวน Box ที่ซ้อนทับกันให้เหลือเพียงการตรวจจับเดียว ฟังก์ชันนี้จะส่งคืน Bounding Boxes พร้อมพิกัด (x1, y1, x2, y2) และคะแนนความเชื่อมั่น (Confidence Score)

4.4 การตั้งค่า Wi-Fi และ Socket

ใน Script เวอร์ชัน Wi-Fi® ที่แสดงด้านล่าง อินเทอร์เฟซ Station บนบอร์ด Portenta H7 จะถูกเปิดใช้งานโดยใช้ฟังก์ชัน network.WLAN(network.STA_IF) จากนั้นอุปกรณ์จะเชื่อมต่อกับเครือข่ายที่ระบุโดย SSID และ KEY โดยรอจนกว่าจะมีการเชื่อมต่อที่ถูกต้องและเสถียร เมื่อเชื่อมต่อแล้ว บอร์ดจะสร้าง TCP Socket โดยเชื่อมโยงกับ HOST (อินเทอร์เฟซใดๆ ที่พร้อมใช้งาน) และ PORT 8080 สำหรับการสตรีม MJPEG

สำหรับ เวอร์ชัน Ethernet จะใช้ตรรกะเดียวกัน ยกเว้นคุณต้องเปลี่ยนส่วนนี้เป็นการกำหนดค่าอินเทอร์เฟซแบบใช้สาย โดยทั่วไปจะใช้ eth = network.LAN() ตามด้วย eth.ifconfig('dhcp') หรือการตั้งค่า Static IP ส่วนที่เหลือของ Code สำหรับการสร้าง Socket และการรอรับข้อมูลบน Port 8080 จะยังคงเหมือนเดิมเกือบทั้งหมด ยกเว้นการอ้างอิงถึง eth.isconnected() แทน wlan.isconnected() คุณสามารถสลับระหว่างโซลูชัน Wi-Fi® และ Ethernet ได้อย่างราบรื่นโดยเปลี่ยนเฉพาะส่วนการเริ่มต้นเครือข่ายเท่านั้น

4.5 การติดตามการตรวจจับล่าสุดที่ทราบ

เพื่อใช้งานฟีเจอร์ "Hold Time" ซึ่ง Overlay จะยังคงอยู่ครู่หนึ่งแม้ว่าใบหน้าจะหายไป ตัวแปร Global สองตัวจะทำหน้าที่จัดเก็บ Bounding Boxes ล่าสุดและบันทึกเวลาล่าสุดที่มีการอัปเดต

4.6 ฟังก์ชันการสตรีมหลัก

ภายในฟังก์ชัน start_streaming(s) Script จะรับการเชื่อมต่อจาก Client ที่เข้ามา ส่ง HTTP Headers สำหรับ MJPEG Stream และเข้าสู่ Loop เพื่อจับภาพเฟรม หลังจากทำการตรวจจับใบหน้า ( model.predict() ) Bounding Box ของแต่ละใบหน้าที่ตรวจพบจะถูกขยายตาม ENLARGEMENT_FACTOR และวาง Overlay ทับลงบนรูปภาพต้นฉบับโดยใช้ฟังก์ชัน img.draw_image(face_image, x_new, y_new, ...) หากไม่ตรวจพบใบหน้าแล้ว Script จะตรวจสอบว่าเวลาที่กำหนด (Hold Time) ผ่านไปหรือยัง หากยังไม่ผ่าน จะยังคงวาด Bounding Boxes ก่อนหน้าต่อไปเพื่อป้องกันการกะพริบ

ในขั้นตอนสุดท้าย แต่ละเฟรมที่ประมวลผลแล้วจะถูกแปลงเป็น JPEG และส่งไปยัง Client พร้อมกับตัวระบุขอบเขต -openmv โดย Browser หรือโปรแกรมดูที่รองรับ MJPEG จะสามารถแสดงเฟรมวิดีโอแบบ Real-time ได้

5. การทดสอบและการใช้งานระบบ

หลังจากบันทึกหรือโหลด Code ลงในบอร์ด Portenta H7 ของคุณผ่าน OpenMV IDE แล้ว ให้คลิกปุ่ม Start ของ IDE เพื่อรัน Script

ตรวจสอบ Serial Terminal ของ IDE เพื่อดูว่าบอร์ดของคุณเชื่อมต่อกับเครือข่าย Wi-Fi® สำเร็จและแสดง IP Address หรือไม่

เมื่อเชื่อมต่อแล้ว ให้เปิด Web Browser บนอุปกรณ์ที่อยู่ในวงเครือข่าย (Subnet) เดียวกัน และไปที่ที่อยู่ http://<Portenta_IP>:8080 ในภาพที่แสดงด้านบน ที่อยู่จะเป็น http://192.168.204.10:8080 ตอนนี้คุณควรจะเห็นวิดีโอ Feed สีเทาที่มีความหน่วงต่ำ

ใบหน้าใดๆ ที่ปรากฏในเฟรมจะถูกพรางหรือทับด้วยรูปภาพ face.pbm ซึ่งจะถูกขยายขนาดตามตัวคูณที่คุณระบุไว้ใน Script

หากคุณต้องการปรับความแม่นยำในการตรวจจับ ให้ลองปรับตัวแปร MIN_CONFIDENCE ใน Script หากต้องการเปลี่ยนขนาดของ Overlay "Ban" ให้แก้ไขตัวแปร ENLARGEMENT_FACTOR ในทำนองเดียวกัน การเพิ่ม HOLD_TIME_MS จะช่วยให้ Overlay คงอยู่บนหน้าจอนานขึ้นหลังจากใบหน้าหายไป

6. การแก้ไขปัญหา

หากไม่มีวิดีโอปรากฏใน Browser ของคุณ ให้ตรวจสอบว่าการตั้งค่า Firewall อนุญาตให้ Traffic ผ่าน Port 8080 หรือไม่ และตรวจสอบว่าบอร์ด Portenta H7 ของคุณอยู่ในเครือข่ายเดียวกับอุปกรณ์ที่คุณใช้ดูวิดีโอหรือไม่

หาก Console แสดงว่า Wi-Fi® เชื่อมต่อแล้วแต่การตรวจจับไม่ทำงานและไม่มี Overlay ปรากฏขึ้น ให้ตรวจสอบว่าไฟล์ face.pbm อยู่ในเส้นทางที่ถูกต้อง (โดยปกติคือ Root Directory)

ปัญหาด้านประสิทธิภาพอาจเกิดขึ้นได้หากกล้องอยู่ในสภาพแสงน้อยหรือการเชื่อมต่อ Wi-Fi® อ่อน การลดคุณภาพ JPEG หรือลดขนาดเฟรมสามารถช่วยให้การตอบสนองดีขึ้นได้

7. บทสรุป

จากการผสมผสานการจัดการกล้องของ OpenMV, การทำ TensorFlow Lite FOMO Inference และ MJPEG Streaming Server ที่มีน้ำหนักเบา ตอนนี้คุณมีโซลูชันที่ใช้งานได้จริงสำหรับการทำให้ใบหน้าไม่สามารถระบุตัวตนได้โดยตรงบนอุปกรณ์ โปรเจกต์นี้ช่วยให้คุณปฏิบัติตามกฎระเบียบด้านความเป็นส่วนตัวโดยการเซ็นเซอร์ข้อมูลส่วนบุคคลและลักษณะที่ระบุตัวตนได้ก่อนที่วิดีโอ Feed จะออกจากบอร์ด Portenta H7 ไม่ว่าจะเป็นในสภาพแวดล้อมโรงเรียน สถานพยาบาล หรือบริบทอื่นๆ ที่ต้องการการปกป้องความเป็นส่วนตัว แนวทางนี้จะช่วยให้ข้อมูลที่ละเอียดอ่อนถูกเก็บไว้ในพื้นที่และอยู่ภายใต้การควบคุมโดยตรง

คุณสามารถสำรวจการปรับปรุงเพิ่มเติมได้ เช่น การรักษาความปลอดภัยของสตรีมด้วย TLS หรือ VPN หรือการรวม Sensor และตรรกะเพิ่มเติมเพื่อรองรับแอปพลิเคชันที่กว้างขึ้น (เช่น การตรวจจับวัตถุอื่นนอกเหนือจากใบหน้า) ด้วยสถาปัตยกรรมที่ยืดหยุ่นที่แสดงที่นี่ คุณสามารถพัฒนาโปรเจกต์ Automatic Face Ban ต่อไปเพื่อให้เหมาะกับความต้องการด้านความเป็นส่วนตัวและ IoT ที่เปลี่ยนแปลงไป

Code

🔒 ปลดล็อก Code

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

รหัสอ้างอิงโปรเจกต์: automatic-face-ban-a-privacy-focused-streaming-solution-for-iot-2e0664
4500 บาท
PromptPay QR Code

ประเมิน Project

อยากได้งานคล้ายโปรเจคนี้? กดไปหน้าประเมินราคา

เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า

รีวิวจากคนใช้งานจริง

รีวิวจากลูกค้าและคนที่เคยใช้งาน

ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย

กำลังโหลดรีวิว...