Spaces:
Sleeping
Sleeping
import cv2 | |
import numpy as np | |
import google.generativeai as genai | |
from langchain_core.messages import HumanMessage | |
from langchain_google_genai import ChatGoogleGenerativeAI | |
import os | |
import streamlit as st | |
from PIL import Image | |
from streamlit_drawable_canvas import st_canvas | |
# Set up environment variables and configurations | |
genai.configure(api_key=os.environ['GOOGLE_API_KEY']) | |
def main(): | |
st.title("Virtual Math Calculator") | |
col1, col2 = st.columns([3, 1]) | |
with col1: | |
# Create a drawing canvas | |
st.write("**Draw your equation below:**") | |
canvas_result = st_canvas( | |
fill_color="rgb(255, 255, 255)", # Fill color for drawing | |
stroke_width=5, | |
stroke_color="rgb(0, 0, 0)", | |
background_color="rgb(255, 255, 255)", | |
height=300, | |
width=600, | |
drawing_mode="freedraw", | |
key="canvas", | |
) | |
if st.button("Submit"): | |
if canvas_result.image_data is not None: | |
# Convert to image | |
drawing_image = Image.fromarray(canvas_result.image_data.astype('uint8'), 'RGBA').convert('RGB') | |
drawing_image.save('drawing.png') | |
# Send the image to Gemini and get the response | |
response = send_to_gemini('drawing.png') | |
st.session_state.result = response | |
with col2: | |
st.header("Instructions") | |
st.write("1. Use the mouse pointer/finger to draw your equation.") | |
st.write("2. Click **Submit** to process the drawing.") | |
st.write("3. The result will be displayed below after submission.") | |
if 'result' in st.session_state: | |
st.write("**Result:**") | |
st.text_area("", value=st.session_state.result, height=300) | |
def send_to_gemini(drawing_path): | |
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest") | |
# with open(drawing_path, 'rb') as img_file: | |
# image_content = img_file.read() | |
message = HumanMessage( | |
content=[ | |
{ | |
"type": "text", | |
"text": "Give me the answer of any mathematical representation in the image with the complete solution, and does not say the image contains etc.", | |
}, | |
{"type": "image_url", "image_url": drawing_path}, | |
] | |
) | |
response = llm.invoke([message]).content | |
return response | |
if __name__ == "__main__": | |
main() | |