Spaces:
Sleeping
Sleeping
Add VSCode settings and update dependencies; refactor model prediction logic to include modality and targets
0a9ad49
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| from typing import Tuple | |
| from PIL import ImageDraw, ImageFont, Image | |
| import random | |
| class Model: | |
| def init(self): | |
| pass | |
| def predict( | |
| self, image: Image.Image, modality_type: str, targets: list[str] | |
| ) -> Tuple[Image.Image, str]: | |
| # Randomly split targets into found and not found | |
| targets_found = random.sample(targets, k=len(targets) // 2) | |
| targets_not_found = [t for t in targets if t not in targets_found] | |
| # Create a copy of the image to draw on | |
| image_with_text = image.copy() | |
| draw = ImageDraw.Draw(image_with_text) | |
| # Draw found targets on the image with larger font | |
| font_size = 36 | |
| try: | |
| font = ImageFont.truetype("DejaVuSans.ttf", font_size) | |
| except OSError: | |
| # Fallback to default font if DejaVuSans is not available | |
| font = ImageFont.load_default() | |
| # Calculate starting position from bottom | |
| line_height = 50 | |
| total_height = len(targets_found) * line_height | |
| padding = 20 | |
| # Start from bottom and work upwards | |
| y_position = image_with_text.height - total_height - padding | |
| for target in targets_found: | |
| draw.text((20, y_position), target, fill="red", font=font) | |
| y_position += line_height | |
| # Format targets_not_found as a string with one target per line | |
| targets_not_found_str = ( | |
| "\n".join(targets_not_found) | |
| if targets_not_found | |
| else "All targets were found!" | |
| ) | |
| return image_with_text, targets_not_found_str | |