สารบัญ:
- ขั้นตอนที่ 1: เจาะลึกมากขึ้น: ตรวจพบการเคลื่อนไหวของวัตถุในสตรีมภาพได้อย่างไร
- ขั้นตอนที่ 2: Binarization
- ขั้นตอนที่ 3: ขยายขนาด
- ขั้นตอนที่ 4: การค้นหา Contours (และ Centroids)
- ขั้นตอนที่ 5: การเคลื่อนที่และการนับวัตถุของ Centorid
วีดีโอ: การนับวัตถุ Raspberry Pi: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คอมพิวเตอร์วิทัศน์เป็นสิ่งที่น่าอัศจรรย์อย่างแน่นอน! เมื่อใช้สิ่งนี้ คอมพิวเตอร์จะได้รับความสามารถในการ "มองเห็น" และรับรู้สภาพแวดล้อมโดยรอบได้ดีขึ้น ซึ่งช่วยให้สามารถพัฒนาแอปพลิเคชันที่ซับซ้อน มีประโยชน์ และยอดเยี่ยมได้ แอปพลิเคชันต่างๆ เช่น การตรวจจับและจดจำใบหน้า การติดตามวัตถุ และการตรวจจับวัตถุมีมากขึ้นเรื่อยๆ ในกิจกรรมประจำวันของเรา ด้วยความก้าวหน้าในการมองเห็นด้วยคอมพิวเตอร์
เมื่อพิจารณาถึงความล้ำหน้าและเข้าถึงได้ของขอบข่ายงานคอมพิวเตอร์วิทัศน์และเครื่องมือ แอปพลิเคชันที่อธิบายในบทความนี้เหมาะสมอย่างยิ่ง: ใช้ Raspberry PI อย่างง่าย และเฟรมเวิร์กคอมพิวเตอร์วิทัศน์แบบโอเพนซอร์สที่เรียกว่า OpenCV ที่ไม่มีค่าใช้จ่ายเพื่อนับวัตถุที่กำลังเคลื่อนที่ วัตถุเข้าและออกจากโซนที่ถูกตรวจสอบ
ขั้นตอนที่ 1: เจาะลึกมากขึ้น: ตรวจพบการเคลื่อนไหวของวัตถุในสตรีมภาพได้อย่างไร
ตอนนี้ได้เวลาลงลึกในการประมวลผลภาพแล้ว:
วิธีรับภาพสตรีมเว็บแคมและตรวจพบว่ามีบางอย่างย้ายไปที่นั่น
ประกอบด้วยห้าขั้นตอน:
ขั้นตอนที่ 1: เพื่อเน้นวัตถุในการเคลื่อนไหว
ตามที่กำหนดไว้ในฟิสิกส์คลาสสิก การอ้างอิงเป็นสิ่งจำเป็นในการอนุมานว่ามีบางอย่างกำลังเคลื่อนไหวหรือถ้ามันหยุดนิ่ง ในการพิจารณาว่ามีบางอย่างเคลื่อนไหวแล้ว ค่อนข้างจะเหมือนกัน: ทุกเฟรมที่จับภาพสตรีมของเว็บแคมจะถูกนำไปเปรียบเทียบกับหน้าต่างอ้างอิง หากมีบางสิ่งที่แตกต่างออกไป บางสิ่งก็ถูกย้าย มันง่ายอย่างที่คิด
หน้าต่างอ้างอิงนี้ต้องอยู่ในสภาวะที่สมบูรณ์แบบที่สุด (เช่น ไม่มีอะไรเคลื่อนไหว) ในโลกของการประมวลผลภาพ การเปรียบเทียบระหว่างเฟรมที่จับภาพกับกรอบอ้างอิงนี้ประกอบด้วยเทคนิคที่เรียกว่าการลบพื้นหลัง การลบพื้นหลังประกอบด้วยการลบข้อมูลสีแบบพิกเซลต่อพิกเซลตามตัวอักษรจากเฟรมที่จับภาพและหน้าต่างอ้างอิง ดังนั้นภาพที่ได้มาจากกระบวนการนี้จะเน้น/แสดงรายละเอียดเพิ่มเติมเฉพาะสิ่งที่แตกต่างระหว่างสองเฟรมนี้ (หรือสิ่งที่เคลื่อนไหว/มีการเคลื่อนไหว) และส่วนอื่นๆ จะเป็นสีดำในภาพ (สีของค่าศูนย์บนสีเทา -ขนาดพิกเซล) ข้อสำคัญ: สภาพแสงและคุณภาพของภาพเว็บแคมที่ถ่าย (เนื่องจากคุณภาพของเซ็นเซอร์จับ) อาจแตกต่างกันเล็กน้อยในแต่ละเฟรม มันบอกเป็นนัยว่า "ส่วนที่เท่ากัน" จากหน้าต่างอ้างอิงและเฟรมอื่นจะไม่เป็นสีดำทั้งหมดหลังจากการลบพื้นหลัง แม้จะมีพฤติกรรมเช่นนี้ แต่ก็ไม่มีผลกระทบร้ายแรงในขั้นตอนต่อไป การประมวลผลภาพในโครงการนี้
เพื่อลดเวลาในการประมวลผลภาพ ก่อนที่จะทำการลบพื้นหลัง เฟรมที่จับภาพและกรอบอ้างอิงจะถูกแปลงเป็นภาพมาตราส่วนสีเทา แต่..ทำไม? เป็นปัญหาด้านประสิทธิภาพการประมวลผล: รูปภาพที่แสดงหลายสี (ภาพสี) มีสามข้อมูลต่อพิกเซล: ส่วนประกอบสีแดง สีน้ำเงิน และสีเขียว (มาตรฐาน RGB แบบเก่าแต่เป็นสีทอง) ดังนั้น โดยนัยแล้ว แต่ละพิกเซลสามารถกำหนดเป็นอาร์เรย์สามค่า โดยแต่ละพิกเซลเป็นตัวแทนขององค์ประกอบสี ดังนั้น เมื่อขยายไปถึงทั้งภาพ ภาพสุดท้ายจะเป็นการผสมผสานระหว่างองค์ประกอบภาพสามส่วน: ส่วนประกอบภาพสีแดง สีน้ำเงิน และสีเขียว
ในการประมวลผลต้องใช้งานจำนวนมาก! อย่างไรก็ตาม ในภาพระดับสีเทา แต่ละพิกเซลมีข้อมูลสีเพียงสีเดียว ดังนั้น การประมวลผลภาพสีจึงช้ากว่าในกรณีของภาพระดับสีเทา 3 เท่า (อย่างน้อย 3 เท่า ขึ้นอยู่กับเทคนิคที่เกี่ยวข้อง) และยังมีอีกมาก: สำหรับวัตถุประสงค์บางอย่าง (เช่น โครงการนี้) กระบวนการสีทั้งหมดไม่จำเป็นหรือสำคัญเลย ดังนั้นเราจึงได้ข้อสรุป: ขอแนะนำให้ใช้ภาพระดับสีเทาเพื่อการประมวลผลภาพ หลังจากลบพื้นหลังแล้ว จำเป็นต้องใช้ฟิลเตอร์ Gaussian Blur
ตัวกรอง Gaussian Blur ที่ใช้กับภาพที่ลบพื้นหลังจะทำให้เส้นขอบทั้งหมดของวัตถุที่ตรวจพบเคลื่อนไหวราบรื่นขึ้น แน่นอนว่าจะเป็นประโยชน์ในขั้นตอนต่อไปของการประมวลผลภาพ
ขั้นตอนที่ 2: Binarization
ในกรณีส่วนใหญ่ของการประมวลผลภาพ ไบนารีเกือบจะเป็นขั้นตอนบังคับหลังจากเน้นวัตถุ/ลักษณะเฉพาะในรูปภาพ เหตุผล: ในภาพไบนารี แต่ละสีพิกเซลสามารถสันนิษฐานได้สองค่าเท่านั้น: 0x00 (สีดำ) หรือ 0xFF (สีขาว) วิธีนี้ช่วยประมวลผลภาพได้มากเพื่อให้ต้องใช้ "พลังประมวลผล" น้อยลงเพื่อใช้เทคนิคการประมวลผลภาพในขั้นตอนต่อไป Binarization สามารถทำได้โดยเปรียบเทียบแต่ละสีพิกเซลของภาพระดับสีเทากับเกณฑ์ที่กำหนด หากค่าของสีพิกเซลมากกว่าเกณฑ์ สีพิกเซลนี้จะถือว่าค่าสีขาว (0xFF) และหากค่าของสีพิกเซลต่ำกว่าเกณฑ์ สีพิกเซลนี้จะถือว่าค่าสีดำ (0x00) น่าเสียดายที่ตัวเลือกของค่าขีดจำกัดนั้นสร้างได้ไม่ง่ายนัก ขึ้นอยู่กับปัจจัยแวดล้อม เช่น สภาพแสง การเลือกค่าเกณฑ์ที่ไม่ถูกต้องอาจทำให้ขั้นตอนทั้งหมดเสียหายได้ ดังนั้น เราขอแนะนำให้คุณปรับเกณฑ์ในโปรเจ็กต์สำหรับกรณีของคุณด้วยตนเองก่อนดำเนินการใดๆ เพิ่มเติม ค่าเกณฑ์นี้ต้องแน่ใจว่าวัตถุที่เคลื่อนไหวจะแสดงในรูปไบนารี ในกรณีของฉัน หลังจากตัวเลือกที่เพียงพอของธรณีประตูแล้ว ผลลัพธ์ในสิ่งที่คุณเห็นในรูปที่ 5
รูปที่ 5 - ภาพไบนารี
ขั้นตอนที่ 3: ขยายขนาด
จนถึงขณะนี้ เราสามารถตรวจจับวัตถุที่เคลื่อนไหว เน้นวัตถุ และใช้ไบนารี่ได้ ซึ่งส่งผลให้ภาพวัตถุเคลื่อนไหวค่อนข้างชัดเจน (= ภาพค่อนข้างชัดเจนของวัตถุเพื่อวัตถุประสงค์ในการประมวลผลภาพ) การเตรียมการสำหรับการนับวัตถุเกือบเสร็จแล้ว "เกือบ" ในที่นี้หมายความว่ามีการปรับเปลี่ยนบางอย่างก่อนที่จะดำเนินการต่อไป ณ จุดนี้ มีโอกาสจริงที่จะมี "รู" ในวัตถุ (มวลพิกเซลสีดำไปยังวัตถุที่เน้นสีขาว) รูเหล่านี้สามารถเป็นอะไรก็ได้ ตั้งแต่สภาพแสงโดยเฉพาะไปจนถึงบางส่วนของรูปร่างของวัตถุ เมื่อรูสามารถ "สร้าง" วัตถุปลอมภายในวัตถุจริงได้ (ขึ้นอยู่กับว่ามีขนาดใหญ่แค่ไหนและอยู่ที่ไหน) ผลที่ตามมาของการมีอยู่ของรูในภาพอาจเป็นหายนะต่อการนับวัตถุ วิธีกำจัดรูเหล่านี้คือการใช้เทคนิคการประมวลผลภาพที่เรียกว่า Dilate ใช้สิ่งนี้และรูจะหายไป
ขั้นตอนที่ 4: การค้นหา Contours (และ Centroids)
ณ จุดนี้ เรามีวัตถุที่ไฮไลต์ไว้ ไม่มีรูข้างในและพร้อมสำหรับขั้นตอนต่อไป: การค้นหารูปทรง (และเซนทรอยด์ของวัตถุ) มีทรัพยากรใน OpenCV เพื่อตรวจจับรูปทรงโดยอัตโนมัติ แต่ตัวนับที่ตรวจพบต้องได้รับการคัดเลือกอย่างชาญฉลาด (เพื่อเลือกวัตถุจริงหรือวัตถุเท่านั้น) ดังนั้น เกณฑ์ในการตรวจจับเส้นขอบคือพื้นที่ของวัตถุ ซึ่งวัดเป็นพิกเซล² ถ้าเส้นชั้นความสูงมีพื้นที่สูงกว่าขีดจำกัด (กำหนดค่าในซอฟต์แวร์) จึงต้องถือว่าเป็นวัตถุจริงที่จะนับ การเลือกขีดจำกัด/เกณฑ์พื้นที่นี้มีความสำคัญมาก และการเลือกที่ไม่ถูกต้องในที่นี้หมายถึงการนับที่ไม่ถูกต้อง คุณต้องลองใช้ค่าจำกัดค่าพื้นที่และตรวจสอบสิ่งที่เหมาะสมกับการใช้งานของคุณมากกว่า ไม่ต้องกังวล ขีดจำกัดเหล่านี้ไม่ยากที่จะค้นหา/ปรับ เมื่อเลือกวัตถุทั้งหมดในรูปภาพแล้ว ขั้นตอนต่อไปคือการวาดสี่เหลี่ยมทับบนวัตถุนั้น (การจัดเรียงใหม่นี้ต้องมีวัตถุที่ตรวจพบทั้งหมดอยู่ภายใน) และจุดศูนย์กลางของสี่เหลี่ยมนี้คือ…. วัตถุเซนทรอยด์! คุณอาจจะคิดว่า "อะไรคือเรื่องใหญ่กับเซนทรอยด์นี้" ใช่ไหม? นี่คือคำตอบของคุณ: ไม่ว่ารูปร่างของวัตถุจะใหญ่แค่ไหนหรือเป็นอย่างไร การเคลื่อนที่ของวัตถุนั้นเหมือนกันกับเซนทรอยด์ กล่าวอีกนัยหนึ่ง: จุดง่าย ๆ ที่เรียกว่าเซนทรอยด์นี้แสดงถึงการเคลื่อนที่ทั้งหมดของวัตถุ มันทำให้การนับเป็นเรื่องง่ายมากใช่ไหม ดูภาพด้านล่าง (รูปที่ 6) โดยที่จุดศูนย์กลางของวัตถุแสดงเป็นจุดสีดำ
ขั้นตอนที่ 5: การเคลื่อนที่และการนับวัตถุของ Centorid
ตอนจบที่ยิ่งใหญ่: เปรียบเทียบพิกัดเซนทรอยด์ของวัตถุกับพิกัดเส้นเข้าและออก และใช้อัลกอริทึมการนับที่อธิบายไว้ก่อนหน้านี้ และจะมีการนับวัตถุเคลื่อนที่!
ผลลัพธ์สุดท้ายดังที่แสดงในตอนต้นของโพสต์นี้ นี่คือโครงการที่กำลังดำเนินการอยู่:
แนะนำ:
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
LED กะพริบด้วย Raspberry Pi - วิธีใช้พิน GPIO บน Raspberry Pi: 4 ขั้นตอน
LED กะพริบด้วย Raspberry Pi | วิธีใช้ GPIO Pins บน Raspberry Pi: สวัสดีทุกคนในคำแนะนำนี้เราจะเรียนรู้วิธีใช้ GPIO ของ Raspberry pi หากคุณเคยใช้ Arduino คุณอาจรู้ว่าเราสามารถเชื่อมต่อสวิตช์ LED ฯลฯ เข้ากับหมุดของมันและทำให้มันทำงานได้ ทำให้ไฟ LED กะพริบหรือรับอินพุตจากสวิตช์ดังนั้น
อินเทอร์เฟซ ADXL335 Sensor บน Raspberry Pi 4B ใน 4 ขั้นตอน: 4 ขั้นตอน
อินเทอร์เฟซ ADXL335 Sensor บน Raspberry Pi 4B ใน 4 ขั้นตอน: ในคำแนะนำนี้ เราจะเชื่อมต่อเซ็นเซอร์ ADXL335 (accelerometer) บน Raspberry Pi 4 กับ Shunya O/S
การติดตั้ง Raspbian Buster บน Raspberry Pi 3 - เริ่มต้นใช้งาน Raspbian Buster ด้วย Raspberry Pi 3b / 3b+: 4 ขั้นตอน
การติดตั้ง Raspbian Buster บน Raspberry Pi 3 | เริ่มต้นใช้งาน Raspbian Buster ด้วย Raspberry Pi 3b / 3b+: สวัสดี องค์กร Raspberry pi ที่เพิ่งเปิดตัว Raspbian OS ใหม่ที่เรียกว่า Raspbian Buster เป็นเวอร์ชันใหม่ของ Raspbian สำหรับ Raspberry pi ดังนั้นวันนี้ในคำแนะนำนี้ เราจะได้เรียนรู้วิธีติดตั้ง Raspbian Buster OS บน Raspberry pi 3 ของคุณ
การติดตั้ง Raspbian ใน Raspberry Pi 3 B โดยไม่ต้องใช้ HDMI - เริ่มต้นใช้งาน Raspberry Pi 3B - การตั้งค่า Raspberry Pi ของคุณ 3: 6 ขั้นตอน
การติดตั้ง Raspbian ใน Raspberry Pi 3 B โดยไม่ต้องใช้ HDMI | เริ่มต้นใช้งาน Raspberry Pi 3B | การตั้งค่า Raspberry Pi ของคุณ 3: อย่างที่พวกคุณบางคนรู้ว่าคอมพิวเตอร์ Raspberry Pi นั้นยอดเยี่ยมมากและคุณสามารถรับคอมพิวเตอร์ทั้งหมดได้บนบอร์ดเล็ก ๆ ตัวเดียว Raspberry Pi 3 Model B มี ARM Cortex A53 แบบ 64 บิตแบบ quad-core โอเวอร์คล็อกที่ 1.2 GHz ทำให้ Pi 3 ประมาณ 50