ocr_backend / test_api.py
ashu-choudhury's picture
Add 18 files
06bd65a verified
Raw
History Blame Contribute Delete
3.76 kB
import sys
import io
import argparse
import requests
from PIL import Image, ImageDraw, ImageFont
def generate_test_image() -> bytes:
"""Generates a simple test image containing clear text in memory."""
print("Generating a test image in memory...")
# Create a 400x100 white image
img = Image.new("RGB", (400, 100), color="white")
d = ImageDraw.Draw(img)
# Write a simple English sentence on it
d.text((20, 40), "HELLO WORLD", fill="black")
d.text((20, 60), "PADDLEOCR TEST", fill="black")
# Save to a byte buffer as PNG
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format="PNG")
return img_byte_arr.getvalue()
def run_test(api_url: str, api_key: str, image_path: str = None, lang: str = "en"):
"""Sends an image to the PaddleOCR API and prints the response."""
# Build endpoint URL (ensure correct trailing slash structure)
endpoint = api_url.rstrip("/")
if not endpoint.endswith("/api/v1/image/extract-text"):
endpoint = f"{endpoint}/api/v1/image/extract-text"
print(f"Target Endpoint: {endpoint}")
# Get image bytes
if image_path:
print(f"Reading image from path: {image_path}")
with open(image_path, "rb") as f:
image_bytes = f.read()
filename = image_path
else:
# Dynamically generate test image if no path is provided
image_bytes = generate_test_image()
filename = "test_generated_image.png"
# Prepare multipart files and headers
files = {
"image": (filename, image_bytes, "image/png")
}
data = {
"lang": lang
}
headers = {
"x-api-key": api_key,
"Accept": "application/json"
}
try:
print("Sending POST request to API...")
response = requests.post(endpoint, files=files, data=data, headers=headers, timeout=30)
print(f"HTTP Status Code: {response.status_code}")
response_json = response.json()
print("\n--- API Response ---")
import json
print(json.dumps(response_json, indent=4))
print("--------------------\n")
if response.status_code == 200 and response_json.get("success"):
print("SUCCESS: OCR text extracted successfully!")
print("\n--- Plain Text ---")
print(response_json["data"]["result"])
print("\n--- Structured Markdown ---")
print(response_json["data"].get("markdown", "(no markdown field — redeploy the service)"))
else:
print(f"FAILED: API returned an error: {response_json.get('error', 'Unknown error')}")
except requests.exceptions.RequestException as re:
print(f"ERROR: Connection request failed: {re}")
except Exception as e:
print(f"ERROR: An unexpected error occurred: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Test script for PaddleOCR API server")
parser.add_argument("--url", default="https://ashu-choudhury-ocr-backend.hf.space", help="Base URL of your Hugging Face Space (e.g. https://username-space.hf.space)")
parser.add_argument("--key", default="BLINDbtcTECh2221", help="API key (defaults to standard project key)")
parser.add_argument("--image", default=None, help="Optional path to a local image file. If omitted, a test image is generated.")
parser.add_argument("--lang", default="en", help="Language code parameter (default: en)")
args = parser.parse_args()
run_test(
api_url=args.url,
api_key=args.key,
image_path=args.image,
lang=args.lang
)