Skip to content

Commit 355f368

Browse files
committed
Allow images to be resized to specific resolution
1 parent 984da28 commit 355f368

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

src/guidellm/core/request.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import uuid
2-
from typing import Any, Dict, List, Optional
2+
from typing import Any, Dict, List, Optional, Tuple
33

44
from pydantic import Field
55

@@ -41,6 +41,14 @@ def number_images(self) -> int:
4141
else:
4242
return len(self.images)
4343

44+
@property
45+
def image_resolution(self) -> Tuple[int]:
46+
if self.images is None:
47+
return None
48+
else:
49+
return [im.size for im in self.images]
50+
51+
4452
def __str__(self) -> str:
4553
prompt_short = (
4654
self.prompt[:32] + "..."
@@ -53,5 +61,5 @@ def __str__(self) -> str:
5361
f"prompt={prompt_short}, prompt_token_count={self.prompt_token_count}, "
5462
f"output_token_count={self.output_token_count}, "
5563
f"params={self.params})"
56-
f"images={self.number_images}"
64+
f"image_resolution={self.image_resolution}"
5765
)

src/guidellm/request/emulated.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class EmulatedConfig:
3030
generated_tokens_variance (Optional[int]): Variance for generated tokens.
3131
generated_tokens_min (Optional[int]): Minimum number of generated tokens.
3232
generated_tokens_max (Optional[int]): Maximum number of generated tokens.
33-
images (Optional[int]): Number of input images.
33+
images (Optional[int]): Number of images.
34+
image_resultion (Optional[List[int]]): Resolution of images.
3435
"""
3536

3637
@staticmethod
@@ -107,6 +108,11 @@ def create_config(config: Optional[Union[str, Path, Dict]]) -> "EmulatedConfig":
107108
generated_tokens_max: Optional[int] = None
108109

109110
images: int = 0
111+
image_resolution = None
112+
113+
def __post_init__(self):
114+
if self.images is not None and self.image_resultion is not None and self.images > 0:
115+
assert len(self.image_resolution) == 2
110116

111117
@property
112118
def prompt_tokens_range(self) -> Tuple[int, int]:
@@ -331,7 +337,7 @@ def __init__(
331337
settings.emulated_data.filter_end,
332338
)
333339
if self._config.images > 0:
334-
self._images = load_images(settings.emulated_data.image_source)
340+
self._images = load_images(settings.emulated_data.image_source, self._config.image_resolution)
335341
self._rng = np.random.default_rng(random_seed)
336342

337343
# NOTE: Must be after all the parameters since the queue population

src/guidellm/utils/images.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ImageDescriptor(Serializable):
2727
)
2828

2929

30-
def load_images(data: str) -> List[ImageDescriptor]:
30+
def load_images(data: str, image_resolution: Optional[List[int]]) -> List[ImageDescriptor]:
3131
"""
3232
Load an HTML file from a path or URL
3333
@@ -56,6 +56,10 @@ def load_images(data: str) -> List[ImageDescriptor]:
5656
logger.debug("Loading image: {}", img_url)
5757
img_response = requests.get(img_url)
5858
img_response.raise_for_status()
59+
image = Image.open(BytesIO(img_response.content))
60+
61+
if image_resolution is not None:
62+
image = image.resize(image_resolution)
5963

6064
# Load image into Pillow
6165
images.append(

0 commit comments

Comments
 (0)