-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.py
103 lines (81 loc) · 3.34 KB
/
app.py
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import cv2, os
import numpy as np
import streamlit as st
import matplotlib.pyplot as plt
from PIL import Image, ImageEnhance
@st.cache
def load_image(img):
im = Image.open(img)
return im
FACE_CASCADE_PATH = './algos/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(FACE_CASCADE_PATH )
# eye_cascade = cv2.CascadeClassifier('algos/haarcascade_eye.xml')
# smile_cascade = cv2.CascadeClassifier('algos/haarcascade_smile.xml')
def detect_faces(uploaded_image):
new_img = np.array(uploaded_image.convert('RGB'))
temp_img = cv2.cvtColor(new_img, 1)
gray = cv2.cvtColor(temp_img, cv2.COLOR_BGR2GRAY)
# Detect Face
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# Draw Rectangle
for (x,y,w,h) in faces:
cv2.rectangle(temp_img, (x,y), (x+w, y+h), (255,0,0), 2)
return temp_img, faces
def main():
'''
Face Detection App
'''
st.title('Facebound')
st.text('by Fodé Diop')
options = ['Detection', 'About']
choice = st.sidebar.selectbox('Select Option', options)
if choice == 'Detection':
st.subheader('Face Detection')
image_file = st.file_uploader('Upload Image', type=['jpg', 'png', 'jpeg'])
if image_file is not None:
uploaded = Image.open(image_file)
# st.write(type(uploaded))
st.text('Original Image')
st.image(uploaded)
enhance_type = st.sidebar.radio('Enhance Type', ['Original', 'Grayscale', 'Contrast', 'Brightness', 'Blur'])
if enhance_type == 'Grayscale':
new_img = np.array(uploaded.convert('RGB'))
temp_img = cv2.cvtColor(new_img, 1)
gray = cv2.cvtColor(temp_img, cv2.COLOR_BGR2GRAY)
st.image(gray)
# Print on screen
st.write(gray)
st.write(new_img)
if enhance_type == 'Contrast':
contrast_rate = st.sidebar.slider('Contrtast', 0.5, 3.5)
enhancer = ImageEnhance.Contrast(uploaded)
img_output = enhancer.enhance(contrast_rate)
st.image(img_output)
if enhance_type == 'Brightness':
contrast_rate = st.sidebar.slider('Brigthness', 0.5, 3.5)
enhancer = ImageEnhance.Brightness(uploaded)
img_output = enhancer.enhance(contrast_rate)
st.image(img_output)
if enhance_type == 'Blur':
blur_rate = st.sidebar.slider('Blur', 0.5, 3.5)
new_img = np.array(uploaded.convert('RGB'))
temp_img = cv2.cvtColor(new_img, 1)
blurred = cv2.GaussianBlur(temp_img, (11,11), blur_rate)
st.image(blurred)
# else:
# st.image(uploaded)
# Face Detection
target = ['Faces', 'Smiles', 'Eyes']
feature_choice = st.sidebar.selectbox('Find Features', target)
if st.button('Detect Faces'):
if feature_choice == 'Faces':
result_img, result_faces = detect_faces(uploaded)
st.image(result_img)
st.success(f'Found {len(result_faces)} faces.')
elif choice == 'About':
st.subheader('About Facebound')
st.markdown("Built with Streamlit and OpenCV by [Fodé Diop](https://www.github.com/diop)")
st.text("© Copyright 2020 Fodé Diop - MIT")
st.success("Dakar Institute of Technology")
if __name__ == '__main__':
main()