สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ฟังก์ชันตรวจจับใบหน้า
- ขั้นตอนที่ 2: ฟังก์ชันลบพื้นหลัง
- ขั้นตอนที่ 3: ฟังก์ชัน VideoEdges
- ขั้นตอนที่ 4: ฟังก์ชัน VideoBlur
- ขั้นตอนที่ 5: การปรับปรุง
วีดีโอ: โครงการพื้นฐานของ OpenCV: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ในโปรเจ็กต์นี้ เราจะสำรวจฟังก์ชันพื้นฐานของ OpenCV ผ่านโปรเจ็กต์ง่ายๆ 4 โปรเจ็กต์ที่เกี่ยวข้องกับสตรีมวิดีโอสด สิ่งเหล่านี้คือการจดจำใบหน้า การลบพื้นหลัง การแสดงขอบภาพแบบพิเศษ และการใช้เอฟเฟกต์เบลอกับสตรีมวิดีโอสด จุดประสงค์หลักของฉันในการลองโครงการเหล่านี้คือเพียงแค่ทำให้เท้าของฉันเปียกด้วยอินเทอร์เฟซ OpenCV เนื่องจากฉันวางแผนที่จะเจาะลึกในด้านการมองเห็นคอมพิวเตอร์
เสบียง
- คอมพิวเตอร์ที่ใช้ Python
- เปิดไลบรารี CV, ไลบรารี Numpy, ไลบรารี tkinter, sys library
- กล้องสำหรับเชื่อมต่อกับคอมพิวเตอร์ (หากคอมพิวเตอร์ยังไม่มี)
- ไฟล์ python ของโปรแกรม (รวมอยู่ในคำแนะนำนี้)
- ไฟล์ haarcascade xml (รวมอยู่ในคำแนะนำนี้)
ขั้นตอนที่ 1: ฟังก์ชันตรวจจับใบหน้า
ฟังก์ชันนี้จะแสดงวิดีโอของกล้องด้วยสี่เหลี่ยมสีเขียวบนทุกด้านที่หยิบขึ้นมา ในโค้ดนี้ เราใช้ฟังก์ชัน cv2. VideoCapture() เพื่อจัดเก็บวิดีโอที่เรากำลังจับภาพในวัตถุที่ชื่อว่า "capture" CAPTURE_INDEX เป็นตัวเลขที่กำหนดโดยคอมพิวเตอร์ของคุณซึ่งสอดคล้องกับดัชนีของกล้องของคุณในรายการอินพุตวิดีโอของคอมพิวเตอร์ หากคุณไม่มีกล้องภายนอกที่เชื่อมต่อกับคอมพิวเตอร์ 0 หรือ 1 ควรใช้งานได้
ออบเจ็กต์ face_cascade ถูกเตรียมใช้งานโดยใช้ฟังก์ชัน cascadeClassifier และไฟล์ "haarcascade_frontalface_default.xml" ที่พบใน OpenCV github เราใช้วัตถุนี้เพื่อเก็บใบหน้าที่ตรวจพบในรายการ "ใบหน้า" เป็นรายการสี่ทางทูเพิลจับใบหน้า x พิกัด พิกัด y ความกว้างและความสูง จากนั้นเราวาดรูปสี่เหลี่ยมผืนผ้าที่ล้อมรอบใบหน้าอย่างสมบูรณ์โดยใช้ฟังก์ชัน cv2.rectangle
จากวิดีโอนี้ OpenCV จะจับภาพจำนวนมากใน while loop ของเราโดยใช้ capture.read() และจัดเก็บรูปภาพในเฟรมที่เราตั้งชื่อว่า "img" ภาพแต่ละภาพจะถูกตีความและแก้ไขตามที่เราต้องการ สำหรับ faceDetect เราทำให้รูปภาพเป็นสีเทาโดยใช้ฟังก์ชัน cvtColor ที่จะแปลงรูปภาพใดก็ตามที่ได้รับในพารามิเตอร์แรกเป็นสีของรูปภาพบางประเภทที่ระบุในพารามิเตอร์ที่สอง รายการค่าที่ยอมรับได้สำหรับพารามิเตอร์ที่สองสามารถดูได้ทางออนไลน์ จากนั้นเราแสดงรูปภาพในหน้าต่างชื่อ "การตรวจจับใบหน้า" โดยใช้ฟังก์ชัน imshow() ที่ใช้สตริงสำหรับชื่อหน้าต่างและกรอบรูปภาพที่จะแสดง
สุดท้าย เรารอให้ผู้ใช้ป้อนคีย์ q โดยใช้ฟังก์ชัน cv2.waitKey() หน้ากาก 0xFF ใช้เป็นแบบแผนสำหรับคอมพิวเตอร์ 64 บิต หลังจากที่ผู้ใช้สิ้นสุดการสตรีมวิดีโอแล้ว ฟังก์ชัน faceDetect จะปล่อยวัตถุที่จับภาพ จากนั้นจะทำลายหน้าต่างอื่นๆ ที่เปิดอยู่ภายใต้อินเทอร์เฟซ OpenCV ฟังก์ชันอื่นๆ ทั้งหมดเป็นไปตามโครงสร้างการออกแบบที่คล้ายคลึงกัน
ขั้นตอนที่ 2: ฟังก์ชันลบพื้นหลัง
ฟังก์ชันนี้พยายามลบส่วนพื้นหลังของวิดีโอของเราและปล่อยให้เหลือเพียงภาพเบื้องหน้า อาจใช้ไม่ได้กับกล้องบางรุ่น เนื่องจากกล้องใช้ฟังก์ชันการปรับแสงที่เปิดใช้งานเมื่อวัตถุ/จุดโฟกัสต่างๆ เข้ามาในเฟรม หากฟังก์ชั่น backgroundRemove ของคุณใช้งานไม่ได้ ไม่ต้องหงุดหงิด เพราะอาจเป็นแค่กล้องของคุณก็ได้!
หากต้องการใช้ฟังก์ชันนี้ ให้ถอยออกจากกรอบกล้องแล้วกดปุ่ม "d" เพื่อถ่ายภาพพื้นหลัง สิ่งสำคัญคือต้องไม่มีวัตถุเคลื่อนไหวในพื้นหลังที่คุณต้องการจับภาพ จากนั้นเราก็สามารถถอยกลับเข้าไปในกรอบของกล้องได้ หากฟังก์ชันทำงาน ผู้ใช้ควรเห็นตัวเองในสตรีมวิดีโอของฟังก์ชันเท่านั้น จุดรบกวน/จุดสีดำที่ภาพพื้นหน้าอาจเป็นผลมาจากการปรับแสงของกล้อง ในการจับภาพพื้นหลังอื่น ให้กดปุ่ม "r" เพื่อเริ่มต้นใหม่ จากนั้นกด "d" อีกครั้ง
ประเด็นสำคัญบางประการสำหรับฟังก์ชันนี้คือการใช้บูลีน "แฟล็ก" ที่ยกขึ้นทันทีที่ผู้ใช้กดปุ่ม d ซึ่งจะจับภาพพื้นหลังและทำให้เราสามารถลบออกจากวิดีโอที่สตรีมโดยฟังก์ชันได้ เราตั้งเป้าที่จะเก็บภาพพื้นหลังใน ref_img เพื่อที่เราจะได้แยกความแตกต่างจากภาพเบื้องหน้า ซึ่งจับภาพวัตถุที่เคลื่อนไหวได้ เราใช้ฟังก์ชัน cv2.subtract() เพื่อลบภาพพื้นหน้าออกจากภาพพื้นหลังและในทางกลับกัน จากนั้นตัดความแตกต่างเล็กน้อยในสองภาพหลังจากนั้นทันที พื้นหลังเป็นสีดำ
fgmask สร้างขึ้นโดยใช้ความแตกต่างระหว่างสองรูปภาพนี้ แล้วนำไปใช้กับฟังก์ชันวิดีโอสตรีมโดยใช้ฟังก์ชัน OpenCV cv2.bitwise_and()
ขั้นตอนที่ 3: ฟังก์ชัน VideoEdges
ฟังก์ชันนี้จะส่งคืนสตรีมวิดีโอสดของเรา แต่ขอบที่ตรวจจับได้จะแสดงเป็นสีขาวในขณะที่ส่วนอื่นๆ ถูกปิดทับ สิ่งที่ทำให้ฟังก์ชันนี้แตกต่างจากฟังก์ชันอื่นๆ คือการแปลงวิดีโอต้นฉบับของเราจากรูปแบบ RBG เป็น HSV ซึ่งย่อมาจาก hue, saturation และ variety ซึ่งเป็นวิธีการประมวลผลแสงและสีที่แตกต่างจากวิดีโอ ด้วยวิธีนี้ เราสามารถแยกแยะโครงร่างในวิดีโอได้ง่ายขึ้นโดยใช้ตัวกรอง (red_low ถึง red_high)
Canny Edge Detection ใช้เพื่อตรวจจับขอบในภาพ ยอมรับภาพระดับสีเทาเป็นอินพุตและใช้อัลกอริธึมแบบหลายขั้นตอน
ขั้นตอนที่ 4: ฟังก์ชัน VideoBlur
ฟังก์ชันนี้ใช้เพื่อเพิ่มเอฟเฟกต์เบลอให้กับสตรีมวิดีโอของเรา ฟังก์ชัน simple เรียกฟังก์ชัน GaussianBlur cv2 ในเฟรมของเรา ข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน gaussianBlur สามารถพบได้ที่นี่:
opencv-python-tutroals.readthedocs.io/en/l…
ขั้นตอนที่ 5: การปรับปรุง
ฟังก์ชันที่ละเอียดอ่อนที่สุดในโครงการนี้คือฟังก์ชันการลบพื้นหลัง เนื่องจากต้องใช้กล้องที่ไม่มีฟังก์ชันการปรับแสง อาจมีชุดฟังก์ชันที่ดีกว่าภายในไลบรารี OpenCV ที่สามารถอธิบายการปรับแสงนี้และลบพื้นหลังออกได้อย่างราบรื่น (คล้ายกับหน้าจอสีเขียว)
เรายังสามารถใช้ฟังก์ชันการตรวจจับใบหน้าอื่นๆ ที่อาจสร้างวัตถุที่มีฟังก์ชันการทำงานมากกว่าแค่การส่งคืนพิกัด (x, y) บางทีโปรแกรมการจดจำใบหน้าที่มีความสามารถในการจดจำใบหน้าอาจทำได้ไม่ยากเกินไป
ฟังก์ชั่นเบลอสามารถปรับแต่งได้มากขึ้นผ่านการควบคุมที่ใช้งานง่ายโดยผู้ใช้ ตัวอย่างเช่น ผู้ใช้อาจต้องการปรับความเข้มของเอฟเฟกต์การเบลอหรือเลือกพื้นที่เฉพาะภายในเฟรมเพื่อเบลอ
แนะนำ:
เครื่องสแกนโค้ด QR โดยใช้ OpenCV ใน Python: 7 ขั้นตอน
เครื่องสแกนรหัส QR การใช้ OpenCV ใน Python: ในโลกปัจจุบันนี้ เราเห็นรหัส QR และบาร์โค้ดถูกใช้เกือบทุกที่ตั้งแต่บรรจุภัณฑ์ของผลิตภัณฑ์ไปจนถึงการชำระเงินออนไลน์ และทุกวันนี้ เราเห็นรหัส QR แม้แต่ในร้านอาหารเพื่อดูเมนู ดังนั้นไม่ สงสัยว่าตอนนี้เป็นความคิดที่ยิ่งใหญ่ แต่เคยไหม
Rubik's Cube Blindfolded Solver แบบเรียลไทม์โดยใช้ Raspberry Pi และ OpenCV: 4 ขั้นตอน
Rubik's Cube Blindfolded Solver แบบเรียลไทม์โดยใช้ Raspberry Pi และ OpenCV: นี่เป็นเครื่องมือคิวบ์รูบิครุ่นที่ 2 ที่สร้างขึ้นสำหรับการแก้ผ้าปิดตา เวอร์ชันที่ 1 ได้รับการพัฒนาโดย javascript คุณสามารถเห็นโปรเจ็กต์ RubiksCubeBlindfolded1 ซึ่งต่างจากเวอร์ชันก่อนหน้า เวอร์ชันนี้ใช้ไลบรารี OpenCV เพื่อตรวจจับสีและเ
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 ขั้นตอน
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: DESCRIÇÃOO ใช้งานง่าย é ดาร์ autonomia para deficientes visuais se locomoverem em Ambientes ในร่ม como casas ou ศูนย์การค้า e aeroportos.A locomoço สภาพแวดล้อม j´ mapeados pode ou n&o s
Colec.te - Lixeira Inteligente Qualcomm Dragonboard 410c + OpenCV: 7 ขั้นตอน
Colec.te - Lixeira Inteligente Qualcomm Dragonboard 410c + OpenCV: ความอัจฉริยะของ Lixeira ประกอบด้วยการแยกส่วนอัตโนมัติ เว็บแคม Através de uma, ela identifica o tipo de lixo e o deposita no compartimento adequado para posteriormente ser reciclado
การประมวลผลภาพด้วย Raspberry Pi: การติดตั้ง OpenCV และการแยกสีของภาพ: 4 ขั้นตอน
การประมวลผลภาพด้วย Raspberry Pi: การติดตั้ง OpenCV และการแยกสีของภาพ: โพสต์นี้เป็นบทแนะนำเกี่ยวกับการประมวลผลภาพชุดแรกในหลายๆ บทที่จะตามมา เราพิจารณาพิกเซลที่ประกอบเป็นรูปภาพอย่างละเอียดยิ่งขึ้น เรียนรู้วิธีติดตั้ง OpenCV บน Raspberry Pi และเรายังเขียนสคริปต์ทดสอบเพื่อจับภาพและค