File size: 2,137 Bytes
d372282
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import cv2
import numpy as np
import imutils
import streamlit as st
import base64
def detect_face(input_img):
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    gray_image = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5)

    if len(faces) == 1:
        return faces[0]
    else:
        return None

def thug_life(input_img,angle,x,y):
    face_coords = detect_face(input_img)

    if face_coords is None:
        return input_img

    sunglass_img = cv2.imread('media/glasses.png', cv2.IMREAD_UNCHANGED)
    sunglass_img = imutils.rotate(sunglass_img, angle=angle)
    face_width, face_height = face_coords[2], face_coords[3]
    sunglass_img_resized = cv2.resize(sunglass_img, (face_width, face_height))

    # Check if the image has an alpha channel
    if sunglass_img_resized.shape[2] == 4:
        alpha_channel_resized = cv2.resize(sunglass_img_resized[:, :, 3], (face_width, face_height))
    else:
        # If no alpha channel, create a default one
        alpha_channel_resized = np.ones((face_height, face_width), dtype=np.uint8) * 255

    thug_glass = alpha_channel_resized / 255.0
    thug_glass = np.stack([thug_glass] * 3, axis=-1)
    offset_y = int(face_height * y)  # Adjust the offset based on your preference
    start_y = max(0, face_coords[1] - offset_y)
    offset_x = int(face_width * x)  # Adjust the offset based on your preference
    start_x = max(0, face_coords[1] - offset_x)
    roi = input_img[start_y: start_y + face_height, start_x:start_x + face_width]

    glass_bgr = sunglass_img_resized[:, :, :3]
    overlay = (1 - thug_glass) * roi + thug_glass * glass_bgr
    input_img[start_y: start_y + face_height, start_x:start_x + face_width] = overlay
    music_file = 'media/ThugLife.mp3'
    audio_bytes = open(music_file,'rb').read()
    audio_bytes = base64.b64encode(audio_bytes).decode()
    st.markdown(f'<audio autoplay controls><source src="data:audio/mp3;base64,{audio_bytes}" type="audio/mp3"></audio>', unsafe_allow_html=True)

    return input_img