ysharma HF staff commited on
Commit
aea3b22
1 Parent(s): e7d3e35

Update app_dialogue.py

Browse files
Files changed (1) hide show
  1. app_dialogue.py +77 -26
app_dialogue.py CHANGED
@@ -59,9 +59,16 @@ logger = logging.getLogger()
59
  SEED = 38
60
  set_seed(38)
61
 
62
- def convert_to_rgb(image):
63
- # `image.convert("RGB")` would only work for .jpg images, as it creates a wrong background
64
- # for transparent images. The call to `alpha_composite` handles this case
 
 
 
 
 
 
 
65
  if image.mode == "RGB":
66
  return image
67
 
@@ -69,27 +76,44 @@ def convert_to_rgb(image):
69
  background = Image.new("RGBA", image_rgba.size, (255, 255, 255))
70
  alpha_composite = Image.alpha_composite(background, image_rgba)
71
  alpha_composite = alpha_composite.convert("RGB")
72
- return alpha_composite
73
 
 
 
 
 
 
 
 
74
 
75
- # Conversion between PIL Image <-> base64 <-> Markdown utils
76
- def pil_to_base64(pil_image):
77
- """
78
- Convert an PIL image into base64 string representation
79
- """
80
- buffered = BytesIO()
81
- pil_image.save(buffered, format="JPEG") # You can change the format as per your image type
82
- encoded_image = base64.b64encode(buffered.getvalue()).decode("utf-8")
83
- return encoded_image
84
-
85
-
86
- def pil_to_markdown_im(image):
87
- """
88
- Convert a PIL image into markdown filled with the base64 string representation.
89
- """
90
- img_b64_str = pil_to_base64(image)
91
- img_str = f'<img src="data:image/png;base64,{img_b64_str}" />'
92
- return img_str
 
 
 
 
 
 
 
 
 
 
 
93
 
94
 
95
  def base64_to_pil(encoded_image):
@@ -159,17 +183,33 @@ def isolate_images_urls(prompt_list):
159
  ]
160
  ```
161
  """
 
 
 
162
  linearized_list = []
163
  for prompt in prompt_list:
 
164
  # Prompt can be either a string, or a PIL image
165
  if isinstance(prompt, PIL.Image.Image):
 
 
 
 
 
166
  linearized_list.append(prompt)
167
- elif isinstance(prompt, str):
 
 
168
  if "<fake_token_around_image>" not in prompt:
 
169
  linearized_list.append(prompt)
 
170
  else:
 
171
  prompt_splitted = prompt.split("<fake_token_around_image>")
 
172
  for ps in prompt_splitted:
 
173
  if ps == "":
174
  continue
175
  if ps.startswith("<image:"):
@@ -181,6 +221,7 @@ def isolate_images_urls(prompt_list):
181
  f"Unrecognized type for `prompt`. Got {type(type(prompt))}. Was expecting something in [`str`,"
182
  " `PIL.Image.Image`]"
183
  )
 
184
  return linearized_list
185
 
186
 
@@ -209,17 +250,27 @@ def user_prompt_list_to_markdown(user_prompt_list: List[Union[str, PIL.Image.Ima
209
  Convert a user prompt in the list format (i.e. elements are either a PIL image or a string) into
210
  the markdown format that is used for the chatbot history and rendering.
211
  """
 
 
212
  resulting_string = ""
213
  for elem in user_prompt_list:
214
- if isinstance(elem, str):
 
 
215
  resulting_string += elem
216
- elif isinstance(elem, PIL.Image.Image):
217
- resulting_string += pil_to_markdown_im(convert_to_rgb(elem))
 
 
 
 
 
218
  else:
219
  raise ValueError(
220
  "Unknown type for `user_prompt_list`. Expected an element of type `str` or `PIL.Image.Image` and got"
221
  f" `{type(elem)}`"
222
  )
 
223
  return resulting_string
224
 
225
 
 
59
  SEED = 38
60
  set_seed(38)
61
 
62
+ import requests
63
+ from io import BytesIO
64
+ import uuid
65
+
66
+ from PIL import Image
67
+
68
+ from PIL import Image
69
+ import tempfile
70
+
71
+ def convert_to_rgb_pil(image):
72
  if image.mode == "RGB":
73
  return image
74
 
 
76
  background = Image.new("RGBA", image_rgba.size, (255, 255, 255))
77
  alpha_composite = Image.alpha_composite(background, image_rgba)
78
  alpha_composite = alpha_composite.convert("RGB")
 
79
 
80
+ # Save the converted image to a temporary file
81
+ temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg")
82
+ temp_file_path = temp_file.name
83
+ alpha_composite.save(temp_file_path)
84
+ temp_file.close()
85
+ return temp_file_path # Return the path to the saved image
86
+
87
 
88
+ def convert_to_rgb(filepath_or_pilimg):
89
+ # `image.convert("RGB")` would only work for .jpg images, as it creates a wrong background
90
+ # for transparent images. The call to `alpha_composite` handles this case
91
+ if isinstance(filepath_or_pilimg, PIL.Image.Image):
92
+ return convert_to_rgb_pil(filepath_or_pilimg)
93
+ with Image.open(filepath_or_pilimg) as image:
94
+ # Check if the image is already in the RGB format
95
+ if image.mode == "RGB":
96
+ return filepath_or_pilimg # If already in RGB, return the original path
97
+
98
+ # Convert image to RGBA
99
+ image_rgba = image.convert("RGBA")
100
+
101
+ # Create a white background image of the same size
102
+ background = Image.new("RGBA", image_rgba.size, (255, 255, 255))
103
+
104
+ # Composite the original image over the white background
105
+ alpha_composite = Image.alpha_composite(background, image_rgba)
106
+
107
+ # Convert the composited image to RGB format
108
+ alpha_composite = alpha_composite.convert("RGB")
109
+
110
+ # Save the converted image to a temporary file
111
+ temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg")
112
+ temp_file_path = temp_file.name
113
+ alpha_composite.save(temp_file_path)
114
+ temp_file.close()
115
+
116
+ return temp_file_path # Return the path to the saved image
117
 
118
 
119
  def base64_to_pil(encoded_image):
 
183
  ]
184
  ```
185
  """
186
+ print(f"******* isolate_images_urls *******")
187
+ print(f"params: prompt_list is - {prompt_list}")
188
+
189
  linearized_list = []
190
  for prompt in prompt_list:
191
+ print(f"inside FOR loop: prompt in prompt_list is - {prompt}")
192
  # Prompt can be either a string, or a PIL image
193
  if isinstance(prompt, PIL.Image.Image):
194
+ print(f"inside first IF in FOR loop: prompt is of type PIL.Image.Image")
195
+ linearized_list.append(prompt)
196
+ print(f"linearized_list after append is - {linearized_list}")
197
+ elif isinstance(prompt, str) and "/tmp/gradio/" in prompt: #isinstance(prompt, PIL.Image.Image):
198
+ print(f"inside IF in FOR loop: prompt is a string and is a path for temporary file")
199
  linearized_list.append(prompt)
200
+ print(f"linearized_list after append is - {linearized_list}")
201
+ elif isinstance(prompt, str) and "/tmp/gradio/" not in prompt:
202
+ print(f"inside ELIF in FOR loop: prompt is a string and is NOT a path for temporary file")
203
  if "<fake_token_around_image>" not in prompt:
204
+ print(f"inside IF inside ELIF in FOR loop: '<fake_token_around_image>' is NOT in prompt")
205
  linearized_list.append(prompt)
206
+ print(f"linearized_list after append is - {linearized_list}")
207
  else:
208
+ print(f"inside ELSE inside ELIF in FOR loop: '<fake_token_around_image>' IS IN prompt")
209
  prompt_splitted = prompt.split("<fake_token_around_image>")
210
+ print(f"prompt_splitted is - {prompt_splitted}")
211
  for ps in prompt_splitted:
212
+ print(f"Inside FOR loop inside FOR loop: ps in prompt_split is {ps}")
213
  if ps == "":
214
  continue
215
  if ps.startswith("<image:"):
 
221
  f"Unrecognized type for `prompt`. Got {type(type(prompt))}. Was expecting something in [`str`,"
222
  " `PIL.Image.Image`]"
223
  )
224
+ print(f"linearized_list to be returned is - {linearized_list}")
225
  return linearized_list
226
 
227
 
 
250
  Convert a user prompt in the list format (i.e. elements are either a PIL image or a string) into
251
  the markdown format that is used for the chatbot history and rendering.
252
  """
253
+ print("********** user_prompt_list_to_markdown *********")
254
+ print(f" param : user_prompt_list is - {user_prompt_list}")
255
  resulting_string = ""
256
  for elem in user_prompt_list:
257
+ print(f"inside user_prompt_list_to_markdown, for loop on user_prompt_list")
258
+ print(f"elem is - {elem} ")
259
+ if isinstance(elem, str) and "/tmp/gradio/" not in elem:
260
  resulting_string += elem
261
+ print(f"inside IF - when elem is string and is not temp image filepath. resulting_string is - {resulting_string}")
262
+ #elif isinstance(elem, str) and "/tmp/gradio/" in elem:
263
+ # resulting_string += f"![](/file={convert_to_rgb(elem)})" #f"![](/file={image})"
264
+ # print(f"inside first ELIF - when elem is string and is the temp image filepath. resulting_string is - {resulting_string}")
265
+ elif isinstance(elem, PIL.Image.Image) or "/tmp/gradio/" in elem: #and "/tmp/gradio/" in elem:
266
+ resulting_string += f"![](/file={convert_to_rgb(elem)})" #pil_to_markdown_im(convert_to_rgb(elem))
267
+ print(f"inside the ELIF - when elem is an instance of PIL.Image.Image or has /temp/file/path. resulting_string after pil_to_markdown_im() operation is - {resulting_string}")
268
  else:
269
  raise ValueError(
270
  "Unknown type for `user_prompt_list`. Expected an element of type `str` or `PIL.Image.Image` and got"
271
  f" `{type(elem)}`"
272
  )
273
+ print(f" final resulting_string that will be returned is - {resulting_string}")
274
  return resulting_string
275
 
276