""" Simple API test script that extracts the numerical score """ import requests import base64 import numpy as np import cv2 from PIL import Image import io import re def create_face_image(): """Create a simple face-like image""" img = np.zeros((100, 100), dtype=np.uint8) # Face outline cv2.ellipse(img, (50, 50), (40, 50), 0, 0, 360, 100, -1) # Eyes cv2.circle(img, (35, 40), 5, 200, -1) cv2.circle(img, (65, 40), 5, 200, -1) # Nose cv2.line(img, (50, 45), (50, 60), 150, 2) # Mouth cv2.ellipse(img, (50, 70), (15, 8), 0, 0, 180, 150, 2) # Convert to RGB img_rgb = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) return img_rgb def test_api(): """Test the API and extract the score""" url = "https://pavaniyerra-hackthon4.hf.space/predict_similarity/" print("Testing Face Similarity API") print("=" * 40) try: # Create two test face images face1 = create_face_image() face2 = create_face_image() # Convert to bytes def img_to_bytes(img): pil_img = Image.fromarray(img) buffer = io.BytesIO() pil_img.save(buffer, format='JPEG') return buffer.getvalue() face1_bytes = img_to_bytes(face1) face2_bytes = img_to_bytes(face2) # Prepare files for upload files = { 'file1': ('face1.jpg', face1_bytes, 'image/jpeg'), 'file2': ('face2.jpg', face2_bytes, 'image/jpeg') } print("Sending request to API...") response = requests.post(url, files=files, timeout=30) print(f"Status Code: {response.status_code}") if response.status_code == 200: print("SUCCESS! API is working") # Extract the dissimilarity score from HTML html_content = response.text # Look for the dissimilarity score in the HTML # Pattern: "Dissimilarity: X.X" pattern = r'Dissimilarity:\s*]*>\s*([0-9.]+)' match = re.search(pattern, html_content) if match: score = float(match.group(1)) print(f"Dissimilarity Score: {score}") # Convert dissimilarity to similarity (assuming 1.0 = completely different, 0.0 = identical) similarity = 1.0 - score print(f"Similarity Score: {similarity:.4f}") # Interpret the result if similarity > 0.8: print("Result: Very High Similarity (likely same person)") elif similarity > 0.6: print("Result: High Similarity (possibly same person)") elif similarity > 0.4: print("Result: Moderate Similarity (uncertain)") elif similarity > 0.2: print("Result: Low Similarity (likely different persons)") else: print("Result: Very Low Similarity (definitely different persons)") else: print("WARNING: Could not extract score from HTML response") print("HTML content preview:") print(html_content[:500] + "..." if len(html_content) > 500 else html_content) else: print(f"ERROR: {response.status_code}") print(f"Response: {response.text}") except Exception as e: print(f"ERROR: {e}") def test_multiple_times(): """Test the API multiple times to check consistency""" print("\n" + "=" * 40) print("Testing API Multiple Times") print("=" * 40) scores = [] for i in range(3): print(f"\nTest {i+1}/3:") try: face1 = create_face_image() face2 = create_face_image() def img_to_bytes(img): pil_img = Image.fromarray(img) buffer = io.BytesIO() pil_img.save(buffer, format='JPEG') return buffer.getvalue() files = { 'file1': ('face1.jpg', img_to_bytes(face1), 'image/jpeg'), 'file2': ('face2.jpg', img_to_bytes(face2), 'image/jpeg') } response = requests.post("https://pavaniyerra-hackthon4.hf.space/predict_similarity/", files=files, timeout=30) if response.status_code == 200: # Extract score pattern = r'Dissimilarity:\s*]*>\s*([0-9.]+)' match = re.search(pattern, response.text) if match: score = float(match.group(1)) scores.append(score) print(f" Score: {score}") else: print(" Could not extract score") else: print(f" Error: {response.status_code}") except Exception as e: print(f" Error: {e}") if scores: print(f"\nScore Statistics:") print(f" Average: {sum(scores)/len(scores):.4f}") print(f" Min: {min(scores):.4f}") print(f" Max: {max(scores):.4f}") print(f" Range: {max(scores) - min(scores):.4f}") if __name__ == "__main__": # Test the API test_api() # Test multiple times for consistency test_multiple_times() print("\n" + "=" * 50) print("API Testing Complete!") print("\nYour API is working correctly!") print("The API expects:") print("- Method: POST") print("- Format: multipart/form-data") print("- Parameters: file1, file2 (image files)") print("- Response: HTML with dissimilarity score")