MedicineOCR2 / app.py
shukdevdatta123's picture
Create app.py
67c0817 verified
import gradio as gr
import base64
from groq import Groq
import tempfile
import os
def encode_image(image_path):
"""Convert an image to base64 encoding"""
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def extract_medicines(image, api_key):
"""Extract medicine names from prescription image using Groq API"""
if not api_key:
return "Please provide a Groq API key"
if image is None:
return "Please upload a prescription image"
try:
# Save the uploaded image to a temporary file
with tempfile.NamedTemporaryFile(suffix='.jpg', delete=False) as temp_image:
image_path = temp_image.name
image.save(image_path)
# Encode the image to base64
base64_image = encode_image(image_path)
# Clean up the temporary file
os.unlink(image_path)
# Initialize Groq client with the provided API key
client = Groq(api_key=api_key)
# Create the prompt specifically asking for medicine names only
prompt = "This is an image of a medical prescription. Extract and list ONLY the names of medicines/drugs/medications from this prescription. Do not include dosages, frequencies, or other information. Return just a simple list of medicine names, one per line."
# Make the API call
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
},
},
],
}
],
model="meta-llama/llama-4-scout-17b-16e-instruct",
)
# Return the extracted medicine names
return chat_completion.choices[0].message.content
except Exception as e:
return f"An error occurred: {str(e)}"
# Create the Gradio interface
with gr.Blocks(title="Prescription Medicine Extractor") as app:
gr.Markdown("# Medicine Name Extractor from Prescriptions")
gr.Markdown("Upload a prescription image and enter your Groq API key to extract medicine names")
with gr.Row():
with gr.Column():
api_key_input = gr.Textbox(
label="Groq API Key",
placeholder="Enter your Groq API key here",
type="password"
)
image_input = gr.Image(label="Upload Prescription Image", type="pil")
extract_button = gr.Button("Extract Medicine Names")
with gr.Column():
output = gr.Textbox(label="Extracted Medicine Names", lines=10)
extract_button.click(
fn=extract_medicines,
inputs=[image_input, api_key_input],
outputs=output
)
gr.Markdown("""
## Instructions
1. Enter your Groq API key
2. Upload a clear image of a medical prescription
3. Click "Extract Medicine Names"
4. The application will return only the names of medicines from the prescription
**Note:** Your API key is not stored and is only used for making requests to the Groq API.
""")
if __name__ == "__main__":
app.launch()