dschandra commited on
Commit
488b70a
1 Parent(s): 8ec8917

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -13
app.py CHANGED
@@ -2,11 +2,6 @@ import os
2
  import cv2
3
  import gradio as gr
4
  import numpy as np
5
- import random
6
- import base64
7
- import requests
8
- import json
9
- import time
10
  from transformers import DetrForObjectDetection, DetrImageProcessor
11
  import torch
12
 
@@ -25,7 +20,7 @@ def detect_face_and_neck(image):
25
  face_box = None
26
  for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
27
  if score > 0.7:
28
- if label == 1: # Person
29
  neck_box = box
30
  elif label == 2: # Face
31
  face_box = box
@@ -33,24 +28,37 @@ def detect_face_and_neck(image):
33
  return face_box, neck_box
34
 
35
  # Function to overlay jewelry on the detected regions
36
- def place_jewelry(image, jewelry_image, jewelry_type, position):
37
  x, y, w, h = position
38
- resized_jewelry = cv2.resize(jewelry_image, (w, h))
39
 
40
- image[y:y+h, x:x+w] = resized_jewelry
 
 
 
 
 
 
41
 
42
  return image
43
 
44
  # Try-on function for jewelry
45
  def tryon_jewelry(person_img, jewelry_img, jewelry_type):
 
 
 
 
 
46
  face_box, neck_box = detect_face_and_neck(person_img)
47
-
48
  if jewelry_type == "Necklace" and neck_box is not None:
49
- result_img = place_jewelry(person_img, jewelry_img, "Necklace", neck_box)
 
50
  elif jewelry_type == "Earrings" and face_box is not None:
51
- result_img = place_jewelry(person_img, jewelry_img, "Earrings", face_box)
 
52
  else:
53
- result_img = person_img # Return original image if no detection
54
 
55
  return result_img
56
 
 
2
  import cv2
3
  import gradio as gr
4
  import numpy as np
 
 
 
 
 
5
  from transformers import DetrForObjectDetection, DetrImageProcessor
6
  import torch
7
 
 
20
  face_box = None
21
  for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
22
  if score > 0.7:
23
+ if label == 1: # Person (this can include neck)
24
  neck_box = box
25
  elif label == 2: # Face
26
  face_box = box
 
28
  return face_box, neck_box
29
 
30
  # Function to overlay jewelry on the detected regions
31
+ def place_jewelry(image, jewelry_image, position):
32
  x, y, w, h = position
33
+ resized_jewelry = cv2.resize(jewelry_image, (int(w), int(h)))
34
 
35
+ # Ensure that the image has an alpha channel (RGBA) for blending
36
+ if resized_jewelry.shape[2] == 4:
37
+ # Blending using alpha transparency
38
+ for c in range(0, 3):
39
+ image[y:y+h, x:x+w, c] = resized_jewelry[:, :, c] * (resized_jewelry[:, :, 3] / 255.0) + image[y:y+h, x:x+w, c] * (1.0 - resized_jewelry[:, :, 3] / 255.0)
40
+ else:
41
+ image[y:y+h, x:x+w] = resized_jewelry
42
 
43
  return image
44
 
45
  # Try-on function for jewelry
46
  def tryon_jewelry(person_img, jewelry_img, jewelry_type):
47
+ # Ensure images are valid
48
+ if person_img is None or jewelry_img is None:
49
+ return None
50
+
51
+ # Detect face and neck using Hugging Face model
52
  face_box, neck_box = detect_face_and_neck(person_img)
53
+
54
  if jewelry_type == "Necklace" and neck_box is not None:
55
+ # Apply necklace on neck region
56
+ result_img = place_jewelry(person_img, jewelry_img, neck_box)
57
  elif jewelry_type == "Earrings" and face_box is not None:
58
+ # Assuming ears are part of the face box for simplicity
59
+ result_img = place_jewelry(person_img, jewelry_img, face_box)
60
  else:
61
+ result_img = person_img # If no detection, return original image
62
 
63
  return result_img
64