ผู้เขียน นายปริตต์ ณะจันทร์ 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/Chando0185/face_recognition_and_door_lock
open cv
Video