Spaces:
Build error
Build error
| 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() | |