ระบบจดจำใบหน้า(Face Recognition)

ผู้เขียน นายปริตต์ ณะจันทร์ CoE#022

คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์

วิชา:04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566

1.ความเป็นมา

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

2.วัตถุประสงค์

1.เพื่อเพิ่มระบบความปลอดภัยแทนการใช้รหัส

2.เพื่อศึกษาภาษาและพัฒนาทักษะในการเขียนภาษาpython

3.เป็นต้นแบบในการพัฒนาไปสู่โปรแกรมขั้นสูง

4.เพื่อจำกัดสิทธิในการเข้าถึงข้อมูลต่างๆที่เป็นระดับของความปลอดภัยต่างๆ

3.ขอบเขต

1.ทำให้ผู้ใช้รู้สึกปลอดภัยมากกว่าเดิม เเทนที่การใส่รหัสเเบบเดิม

2.ทำให้ไม่มีรหัสเพื่อให้คนอื่นไม่สามารเข้าถึงได้

3.ทำให้เข้าถึงข้อมูลหรือการเข้าถึงต่างๆได้อย่างรวดเร็วโดยไม่ต้องเสียเวลาใส่รหัส

4.ประโยชน์ที่คาดว่าจะได้รับ

ความปลอดภัย: Face recognition สามารถนำมาใช้เพื่อเข้าถึงระบบหรือพื้นที่ที่มีความปลอดภัยสูง เช่น การปลดล็อกสมาร์ทโฟน, การเข้าถึงอาคารหรือพื้นที่ที่ต้องการความปลอดภัยสูง

การระบุตัวตน: Face recognition สามารถนำมาใช้ในการระบุตัวตนของบุคคล ทำให้เป็นเครื่องมือที่มีประสิทธิภาพในการจัดการเอกสารที่ต้องการการตรวจสอบตัวตน เช่น ในการเปิดบัญชีธนาคารหรือการทำธุรกรรมออนไลน์

ควบคุมการเข้าถึงทรัพยากร: ในธุรกิจหรือองค์กร สามารถใช้ Face recognition เพื่อควบคุมการเข้าถึงทรัพยากรต่าง ๆ เช่น การเข้าถึงคอมพิวเตอร์, ห้องประชุม, หรืออุปกรณ์ต่าง ๆ ที่ต้องการความปลอดภัย.

5.ความรู้ที่เกี่ยวข้อง

ปัญญาประดิษฐ์ (Artificial Intelligence – AI)

การทำความเข้าใจและการทำงานของแบบจำลองปัญญาประดิษฐ์ที่ใช้ใน Face Recognition.

การเรียนรู้ของเครื่อง (Machine Learning) และการเรียนรู้เชิงลึก (Deep Learning)

ความเชี่ยวชาญทางวิศวกรรม

การออกแบบและพัฒนาระบบ Face Recognition

การทดสอบและปรับปรุงประสิทธิภาพของระบบ

6.ผลการดำเนินการ

ในcodeส่วนเเรกจะใช้ทำการถ่ายภาพ100ภาพเพื่อเอาไว้สำหรับเปรียบเทียบ

import cv2
import os

video = cv2.VideoCapture(0)

facedetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

count = 0

nameID = str(input("Enter Your Name: ")).lower()

path = 'images_to_compare'  # กำหนดให้โฟลเดอร์เป็น 'images_to_compare'

isExist = os.path.exists(path)

if isExist:
    print("Name Already Taken")
    nameID = str(input("Enter Your Name Again: "))
else:
    os.makedirs(path)

while True:
    ret, frame = video.read()
    faces = facedetect.detectMultiScale(frame, 1.3, 5)
    for x, y, w, h in faces:
        count = count + 1
        name = './images_to_compare/' + nameID + '_' + str(count) + '.jpg'  # เพิ่มชื่อไฟล์ด้วย 'nameID'
        print("Creating Images........." + name)
        cv2.imwrite(name, frame[y:y+h, x:x+w])
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 3)
    cv2.imshow("WindowFrame", frame)
    cv2.waitKey(1)
    if count >= 100:
        break
video.release()
cv2.destroyAllWindows()

โดยเมื่อกดรันจะให้เราทำการใส่ชื่อของตัวเองไป โดยจะใส่ทั้งหมด2รอบ

เปิดรูปภาพ

เเล้วโปรเเกรมจะทำการถ่ายรูปของเราเองเป็นจำนวน100รูปเพื่อนนำไปใช้เปรียบเทียบ โดยจะเก็บรูปไว้ในโฟลเดอร์ที่สร้างขึ้นมา

import cv2
import os

# ขอชื่อจากผู้ใช้
nameID = input("Enter Your Name: ").lower()

# สร้างอ็อบเจ็กต์ CascadeClassifier เพื่อตรวจบุใบหน้า
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# เปิดกล้อง
cap = cv2.VideoCapture(0)  # 0 คือการเปิดกล้องใช้กล้องหลักของเครื่อง

# โฟลเดอร์ที่บรรจุรูปภาพที่ต้องการเทียบเคียง
image_folder = 'images_to_compare'

max_similarity = 0  # เก็บค่าความคล้ายสูงสุด
best_match_filename = ''  # เก็บชื่อไฟล์ที่เหมือนสูงสุด

while True:
    # อ่านภาพจากกล้อง
    ret, frame = cap.read()

    # แปลงภาพเป็นรูปภาพสีเทา
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # ตรวจจับใบหน้าในภาพ
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        face_roi = frame[y:y + h, x:x + w]  # รูปภาพใบหน้าที่ตรวจจับ

        for filename in os.listdir(image_folder):
            # ตรวจสอบนามสกุลไฟล์ที่เป็นรูปภาพ (สามารถปรับเปลี่ยนหากคุณต้องการรองรับนามสกุลไฟล์อื่น)
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
                # อ่านรูปภาพจากโฟลเดอร์
                image_to_compare = cv2.imread(os.path.join(image_folder, filename))

                # ทำการตรวจหาความเหมือนของใบหน้ากับรูปภาพ
                result = cv2.matchTemplate(face_roi, image_to_compare, cv2.TM_CCOEFF_NORMED)

                # ตั้งค่าค่าความคล้ายที่คุณต้องการ
                threshold = 0.8

                # คำนวณความเหมือนในรูปแบบเปอร์เซ็นต์
                similarity = (cv2.minMaxLoc(result)[1] * 100)

                # หากความคล้ายสูงสุดมากกว่าค่าที่มีอยู่ในขณะนี้
                if similarity > max_similarity:
                    max_similarity = similarity
                    best_match_filename = filename

        # วาดกรอบสีเขียวรอบใบหน้า
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

        # เพิ่มชื่อบุคคลลงบนรูปภาพ
        name = nameID if max_similarity > 0 else "No Match"
        cv2.putText(frame, name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

    # แสดงความคล้ายที่พบบนมุมซ้ายบนของหน้าต่าง
    cv2.putText(frame, f"Best Match: {best_match_filename} - {max_similarity:.2f}%", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

    # แสดงภาพที่ผ่านการตรวจหาใบหน้า
    cv2.imshow('Face Detection', frame)

    # หยุดการทำงานเมื่อกดปุ่ม 'q' หรือ 'Esc'
    key = cv2.waitKey(1)
    if key == ord('q') or key == 27:  # 27 คือรหัส ASCII ของปุ่ม "Esc"
        break

# ปิดกล้องและปิดหน้าต่าง
cap.release()
cv2.destroyAllWindows()


โดยเมื่อกดรันจะให้เราทำการใส่ชื่อของเราอีกครั้ง

หน้าต่างของโปรเเกรมจดจำใบหน้า

7. ข้อเสนอแนะ

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

8. ข้อมูลอ้างอิง

face recognition

https://github.com/ageitgey/face_recognition

https://github.com/medsriha/real-time-face-recognition?fbclid=IwAR2YccuWM2BCeY47aAe4DEguedDOfwb1OHGnH_RZBsKhE2fp3EoQuDi6tQI

https://github.com/Chando0185/face_recognition_and_door_lock

open cv

https://medium.com/@nnatchunn/opencv-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-8771e2a4c41

Video

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *