|
import requests |
|
from typing import Optional, Dict, Any |
|
import os |
|
import rembg |
|
|
|
async def remove_background_from_url( |
|
image_url: str, |
|
output_path: str, |
|
model_name: str = "u2net" |
|
) -> Dict[str, Any]: |
|
""" |
|
Remove background from an image downloaded from a URL. |
|
|
|
Args: |
|
image_url: URL of the image to process |
|
output_path: Path where to save the processed image |
|
model_name: Background removal model to use |
|
|
|
Returns: |
|
Dictionary with result information |
|
""" |
|
|
|
try: |
|
|
|
response = requests.get(image_url, timeout=30) |
|
response.raise_for_status() |
|
|
|
|
|
session = rembg.new_session(model_name=model_name) |
|
output_data = rembg.remove(response.content, session=session) |
|
|
|
|
|
with open(output_path, 'wb') as output_file: |
|
output_file.write(output_data) |
|
|
|
output_size = os.path.getsize(output_path) |
|
|
|
return { |
|
"success": True, |
|
"message": f"Background removed from URL image using {model_name} model", |
|
"source_url": image_url, |
|
"output_path": output_path, |
|
"output_size_bytes": output_size, |
|
"model_used": model_name |
|
} |
|
|
|
except requests.RequestException as e: |
|
return { |
|
"success": False, |
|
"error": f"Failed to download image: {str(e)}", |
|
"output_path": None |
|
} |
|
except Exception as e: |
|
return { |
|
"success": False, |
|
"error": f"Failed to process image: {str(e)}", |
|
"output_path": None |
|
} |