Spaces:
Starting
Starting
import logging | |
import os | |
from langchain_core.tools import StructuredTool | |
from pydantic import BaseModel, Field | |
import easyocr | |
logger = logging.getLogger(__name__) | |
class ImageParserInput(BaseModel): | |
task_id: str = Field(description="Task identifier") | |
file_path: str = Field(description="Path to the image file") | |
async def image_parser_func(task_id: str, file_path: str) -> str: | |
""" | |
Parse text from an image file using OCR. | |
Args: | |
task_id (str): Task identifier. | |
file_path (str): Path to the image file. | |
Returns: | |
str: Extracted text or error message. | |
""" | |
try: | |
if not os.path.exists(file_path): | |
logger.warning(f"Image file not found: {file_path}") | |
return "Image file not found" | |
logger.info(f"Parsing image: {file_path} for task {task_id}") | |
reader = easyocr.Reader(['en'], model_storage_directory='./cache') | |
result = reader.readtext(file_path, detail=0) | |
text = " ".join(result).strip() | |
return text if text else "No text extracted from image" | |
except Exception as e: | |
logger.error(f"Error parsing image for task {task_id}: {e}") | |
return f"Error: {str(e)}" | |
image_parser_tool = StructuredTool.from_function( | |
func=image_parser_func, | |
name="image_parser_tool", | |
args_schema=ImageParserInput, | |
coroutine=image_parser_func | |
) |