OCR-Azur / app.py
pryanshusharma's picture
Create app.py
1feeb09 verified
import time
import requests
import gradio as gr
def read_image_from_stream(image_path, subscription_key, endpoint):
with open(image_path, 'rb') as image_file:
image_data = image_file.read()
headers = {
'Ocp-Apim-Subscription-Key': subscription_key,
'Content-Type': 'application/octet-stream'
}
response = requests.post(f"{endpoint}/vision/v3.2/read/analyze", headers=headers, data=image_data)
if response.status_code == 202:
read_response_headers = response.headers
operation_location = read_response_headers["Operation-Location"]
else:
raise Exception(f"Unexpected response status: {response.status_code}")
return operation_location
def get_read_result(operation_location, subscription_key):
headers = {
'Ocp-Apim-Subscription-Key': subscription_key
}
while True:
response = requests.get(operation_location, headers=headers)
if response.status_code == 200: # HTTP 200 indicates success
read_result = response.json()
status = read_result['status']
if status == 'succeeded':
break
elif status in ['failed', 'notStarted', 'running']:
time.sleep(1) # Wait before polling again
else:
raise Exception(f"Unexpected status: {status}")
else:
raise Exception(f"Unexpected response status: {response.status_code}")
return read_result
def process_image(image_path, subscription_key, endpoint):
operation_location = read_image_from_stream(image_path, subscription_key, endpoint)
operation_id = operation_location.split("/")[-1]
operation_location = f"{endpoint}/vision/v3.2/read/analyzeResults/{operation_id}"
read_result = get_read_result(operation_location, subscription_key)
if read_result['status'] == 'succeeded':
output = []
for text_result in read_result['analyzeResult']['readResults']:
for line in text_result['lines']:
output.append(line['text'])
return " ".join(output).replace("\n", " ") # Join lines and replace newlines with spaces
else:
return "Processing failed or did not succeed."
def main():
interface = gr.Interface(
fn=process_image,
inputs=[
gr.Image(type="filepath", label="Upload Image"),
gr.Textbox(label="Subscription Key"),
gr.Textbox(label="Endpoint URL")
],
outputs=gr.Textbox(),
title="Azure OCR with Gradio",
description="Upload an image, provide your Azure subscription key and endpoint URL to perform OCR and get the text."
)
interface.launch()
if __name__ == "__main__":
main()