สารบัญ:

โครงการพื้นฐานของ OpenCV: 5 ขั้นตอน
โครงการพื้นฐานของ OpenCV: 5 ขั้นตอน

วีดีโอ: โครงการพื้นฐานของ OpenCV: 5 ขั้นตอน

วีดีโอ: โครงการพื้นฐานของ OpenCV: 5 ขั้นตอน
วีดีโอ: เริ่มเขียน Machine Learning ใน 5 นาที | Python x Scikit-learn: 2024, พฤศจิกายน
Anonim
โครงการพื้นฐานของ OpenCV
โครงการพื้นฐานของ OpenCV

ในโปรเจ็กต์นี้ เราจะสำรวจฟังก์ชันพื้นฐานของ 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

ฟังก์ชัน VideoEdges
ฟังก์ชัน VideoEdges
ฟังก์ชัน VideoEdges
ฟังก์ชัน VideoEdges

ฟังก์ชันนี้จะส่งคืนสตรีมวิดีโอสดของเรา แต่ขอบที่ตรวจจับได้จะแสดงเป็นสีขาวในขณะที่ส่วนอื่นๆ ถูกปิดทับ สิ่งที่ทำให้ฟังก์ชันนี้แตกต่างจากฟังก์ชันอื่นๆ คือการแปลงวิดีโอต้นฉบับของเราจากรูปแบบ RBG เป็น HSV ซึ่งย่อมาจาก hue, saturation และ variety ซึ่งเป็นวิธีการประมวลผลแสงและสีที่แตกต่างจากวิดีโอ ด้วยวิธีนี้ เราสามารถแยกแยะโครงร่างในวิดีโอได้ง่ายขึ้นโดยใช้ตัวกรอง (red_low ถึง red_high)

Canny Edge Detection ใช้เพื่อตรวจจับขอบในภาพ ยอมรับภาพระดับสีเทาเป็นอินพุตและใช้อัลกอริธึมแบบหลายขั้นตอน

ขั้นตอนที่ 4: ฟังก์ชัน VideoBlur

ฟังก์ชั่น VideoBlur
ฟังก์ชั่น VideoBlur
ฟังก์ชั่น VideoBlur
ฟังก์ชั่น VideoBlur

ฟังก์ชันนี้ใช้เพื่อเพิ่มเอฟเฟกต์เบลอให้กับสตรีมวิดีโอของเรา ฟังก์ชัน simple เรียกฟังก์ชัน GaussianBlur cv2 ในเฟรมของเรา ข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน gaussianBlur สามารถพบได้ที่นี่:

opencv-python-tutroals.readthedocs.io/en/l…

ขั้นตอนที่ 5: การปรับปรุง

ฟังก์ชันที่ละเอียดอ่อนที่สุดในโครงการนี้คือฟังก์ชันการลบพื้นหลัง เนื่องจากต้องใช้กล้องที่ไม่มีฟังก์ชันการปรับแสง อาจมีชุดฟังก์ชันที่ดีกว่าภายในไลบรารี OpenCV ที่สามารถอธิบายการปรับแสงนี้และลบพื้นหลังออกได้อย่างราบรื่น (คล้ายกับหน้าจอสีเขียว)

เรายังสามารถใช้ฟังก์ชันการตรวจจับใบหน้าอื่นๆ ที่อาจสร้างวัตถุที่มีฟังก์ชันการทำงานมากกว่าแค่การส่งคืนพิกัด (x, y) บางทีโปรแกรมการจดจำใบหน้าที่มีความสามารถในการจดจำใบหน้าอาจทำได้ไม่ยากเกินไป

ฟังก์ชั่นเบลอสามารถปรับแต่งได้มากขึ้นผ่านการควบคุมที่ใช้งานง่ายโดยผู้ใช้ ตัวอย่างเช่น ผู้ใช้อาจต้องการปรับความเข้มของเอฟเฟกต์การเบลอหรือเลือกพื้นที่เฉพาะภายในเฟรมเพื่อเบลอ

แนะนำ: