MCQ_Converter / app.py
FredOru's picture
bug
b799092
raw
history blame
2.62 kB
import gradio as gr
import base64
# Function to encode the image
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
from openai import OpenAI
client = OpenAI()
SINGLE_QCM_PROMPT = """
You are an assistant for a primary or secondary school teacher.
The attached image is a photo or screenshot of a multiple choice question found by the teacher in an exercise book.
Your job is to convert this image into a JSON file containing the question and proposed answers.
Let's proceed step by step:
1. Start by identifying the question. Note that the question may be numbered with a digit (such as “1.”) or a letter (such as “a.”). This numbering is not part of the question.
2. Identify all the proposed answers.
3. Write the question and answers in a JSON file following the given example format.
Example:
- Input MCQ : "What year was America discovered? Answers: 1400, 1492, 1587, 1321"
- Output JSON: {"Question": "What year was America discovered?", {"Answers": {"Answer":"1400"}, {"Answer":"1492"}, {"Answer":"1587"}, {"Answer":"1321"}}
Answer only with the JSON file, don’t comment. Do not generate output that isn’t in properly formatted JSON. Respect the JSON format and especially the JSON keys “Question”,”Answers”,”Answer”.
"""
def process(image_path):
try:
response = client.chat.completions.create(
model="gpt-4o",
# response_format={ "type": "json_object" }, # si nécessaire
messages=[
# {"role": "system", "content": "You are a helpful assistant designed to output JSON."},
{
"role": "user",
"content": [
{"type": "text", "text": SINGLE_QCM_PROMPT},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{encode_image(image_path)}"
},
},
],
}
],
temperature=0.2,
# max_tokens=256,
# top_p=1,
# frequency_penalty=0,
# presence_penalty=0
)
return response.choices[0].message.content
except Exception as e:
print(f"an error occurred : {e}")
return {"error": str(e)}
import gradio as gr
iface = gr.Interface(
fn=process,
inputs=gr.Image(type="filepath"),
outputs=gr.JSON(),
)
iface.launch()