Spaces:
Sleeping
Sleeping
File size: 4,571 Bytes
9ebd40b cd004be 9ebd40b cd004be a4ed643 9ebd40b cd004be 9ebd40b a4ed643 cd004be 9ebd40b cd004be 9ebd40b cd004be 9ebd40b cd004be a4ed643 cd004be a4ed643 cd004be 9ebd40b cd004be 9ebd40b cd004be 9ebd40b cd004be 9ebd40b cd004be | 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | import streamlit as st
import tensorflow as tf
import numpy as np
from PIL import Image
import cv2
import openai
import os
import io
# Set up OpenAI API key
openai.api_key = "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"
# Load pre-trained model for face detection
face_detection_model = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
def detect_face(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_detection_model.detectMultiScale(gray, 1.3, 5)
if len(faces) > 0:
(x, y, w, h) = faces[0]
return image[y:y+h, x:x+w]
return None
def analyze_symmetry(face):
height, width = face.shape[:2]
left_half = face[:, :width//2]
right_half = cv2.flip(face[:, width//2:], 1)
diff = cv2.absdiff(left_half, right_half)
symmetry_score = 1 - (np.sum(diff) / (255 * height * (width//2)))
return symmetry_score
def analyze_aesthetic_quality(image):
# Convert the image to a byte stream
img_byte_arr = io.BytesIO()
Image.fromarray(image).save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
# Encode the image
encoded_image = base64.b64encode(img_byte_arr).decode('ascii')
prompt = f"Analyze the aesthetic quality of this image, focusing on lighting, composition, and overall visual appeal. Provide a brief description and a score out of 10."
response = openai.ChatCompletion.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}}
]
}
]
)
return response.choices[0].message.content
def compare_photos(image1, image2):
face1 = detect_face(image1)
face2 = detect_face(image2)
if face1 is None or face2 is None:
return "Error: Face not detected in one or both images."
symmetry1 = analyze_symmetry(face1)
symmetry2 = analyze_symmetry(face2)
aesthetic1 = analyze_aesthetic_quality(image1)
aesthetic2 = analyze_aesthetic_quality(image2)
return {
"Image 1": {
"Symmetry": symmetry1,
"Aesthetic Quality": aesthetic1
},
"Image 2": {
"Symmetry": symmetry2,
"Aesthetic Quality": aesthetic2
}
}
def main():
st.title("AttraVision")
st.write("Compare two photos based on attractiveness parameters")
uploaded_file1 = st.file_uploader("Choose the first image", type=["jpg", "jpeg", "png"])
uploaded_file2 = st.file_uploader("Choose the second image", type=["jpg", "jpeg", "png"])
if uploaded_file1 is not None and uploaded_file2 is not None:
image1 = Image.open(uploaded_file1)
image2 = Image.open(uploaded_file2)
col1, col2 = st.columns(2)
with col1:
st.image(image1, caption="Image 1", use_column_width=True)
with col2:
st.image(image2, caption="Image 2", use_column_width=True)
if st.button("Compare Photos"):
with st.spinner("Analyzing..."):
results = compare_photos(np.array(image1), np.array(image2))
st.subheader("Comparison Results")
col1, col2 = st.columns(2)
with col1:
st.write("Image 1")
st.write(f"Symmetry: {results['Image 1']['Symmetry']:.2f}")
st.write(f"Aesthetic Quality: {results['Image 1']['Aesthetic Quality']}")
with col2:
st.write("Image 2")
st.write(f"Symmetry: {results['Image 2']['Symmetry']:.2f}")
st.write(f"Aesthetic Quality: {results['Image 2']['Aesthetic Quality']}")
st.write("Note: Beauty is subjective, and this tool is for entertainment purposes only.")
st.sidebar.title("About AttraVision")
st.sidebar.info("AttraVision uses machine learning to analyze and compare photos based on predefined attractiveness parameters. This tool is designed for fun and should not be used for serious judgment.")
st.sidebar.warning("Privacy Notice: Your photos are processed securely and are not stored after analysis.")
if __name__ == "__main__":
main() |