Spaces:
Build error
Build error
| import requests | |
| from bs4 import BeautifulSoup | |
| from PIL import Image | |
| from io import BytesIO | |
| import json | |
| import os | |
| from langchain.tools import tool | |
| # Ensure that this tool returns the correct type (e.g., a string path or a list of strings) | |
| def image_search_tool(query: str, num_images: int = 5) -> list: | |
| """ | |
| A tool to search for images based on the given query and download them. | |
| Parameters: | |
| - query (str): The search query for finding images. | |
| - num_images (int): The number of images to retrieve (default is 5). | |
| Returns: | |
| - list: The paths where the downloaded images are saved. | |
| """ | |
| url = 'https://www.bing.com/images/search' | |
| headers = { | |
| 'User-Agent': 'Mozilla/5.0' | |
| } | |
| params = {'q': query, 'count': num_images} | |
| response = requests.get(url, headers=headers, params=params) | |
| if response.status_code != 200: | |
| return [f"Failed to retrieve results: {response.status_code}"] | |
| soup = BeautifulSoup(response.text, 'html.parser') | |
| results = [] | |
| for img_tag in soup.find_all('a', class_='iusc')[:num_images]: | |
| m = img_tag.get('m') | |
| m_json = json.loads(m) | |
| img_url = m_json.get('murl') | |
| results.append(img_url) | |
| image_paths = [] | |
| folder = 'images' | |
| if not os.path.exists(folder): | |
| os.makedirs(folder) | |
| for i, img_url in enumerate(results, 1): | |
| try: | |
| img_response = requests.get(img_url) | |
| img = Image.open(BytesIO(img_response.content)) | |
| img_path = os.path.join(folder, f"image_{i}.jpg") | |
| img.save(img_path) | |
| image_paths.append(img_path) | |
| except Exception as e: | |
| return [f"Failed to download {img_url}: {e}"] | |
| return image_paths | |