File size: 2,738 Bytes
9f2d980
 
a14afc2
f5dde97
9f2d980
 
 
 
cb84637
 
 
9f2d980
 
 
 
 
 
cb84637
 
 
9f2d980
cb84637
 
 
9f2d980
cb84637
 
 
 
 
 
 
 
 
 
 
 
 
 
a768701
9f2d980
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f0569d
 
9f2d980
4167f47
 
0ef30eb
9f2d980
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from PIL import Image
import numpy as np
import requests
import os
import cv2
import face_recognition
import streamlit as st

#p1 = "raavi.jpg"
#p2 = "jivan.jpeg"
# p3 = "sejal.jpeg"

st.title("Face Recognition")
Images = []
classnames = []

# Read images and train the face_recognition package
# img1 = cv2.imread(p1)
# Images.append(img1)
# classnames.append("Ravi")

# img2 = cv2.imread(p2)
# Images.append(img2)
# classnames.append("Sirwan sir")

# img3 = cv2.imread(p3)
# Images.append(img3)
# classnames.append("sejal")

directory = "facerecognition"
myList = os.listdir(directory)


for cls in myList:
    if os.path.splitext(cls)[1] in [".jpg", ".jpeg",".png"]:
        img_path = os.path.join(directory, cls)
        curImg = cv2.imread(img_path)
        Images.append(curImg)
        classnames.append(os.path.splitext(cls)[0])

# Load images for face recognition
encodeListknown = [face_recognition.face_encodings(img)[0] for img in Images]

# Take image from user
img_file_buffer = st.camera_input("Take a picture")

# Recognise the face in the uploaded image
if img_file_buffer is not None:
    test_image = Image.open(img_file_buffer)
    # Convert to NumPy array and create a writeable copy
    image = np.array(test_image)
    image = image.copy()  # Create a writeable copy of the image array

    imgS = cv2.resize(image, (0, 0), None, 0.25, 0.25)
    imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
    facesCurFrame = face_recognition.face_locations(imgS)
    encodesCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
    faceMatchedflag = 0

    # Loop to find match in encodeListknown
    for encodeFace, faceLoc in zip(encodesCurFrame, facesCurFrame):
        matches = face_recognition.compare_faces(encodeListknown, encodeFace)
        faceDis = face_recognition.face_distance(encodeListknown, encodeFace)
        matchIndex = np.argmin(faceDis)

        if matches[matchIndex]:
            name = classnames[matchIndex].upper()
            st.write(name)
            # Show the name on the image
            y1, x2, y2, x1 = faceLoc
            y1, x2, y2, x1 = y1 * 4, x2 * 4, y2 * 4, x1 * 4

            # Draw rectangle around the face
            cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
            # Optionally draw name label below face (commented out for now)
            cv2.rectangle(image , (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
            cv2.putText(image , name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
            faceMatchedflag = 1
    # Display image with the overlay
    st.image(image, use_column_width=True, output_format="PNG")
            
    if faceMatchedflag == 0:
        st.warning("No faces detected in the image.")