pixtral-demo / app.py
alexandraroze's picture
updated app
b2136cd
raw
history blame
4.42 kB
import streamlit as st
from PIL import Image
import os
import torch
from uuid import uuid4
import fitz
import json
from src.pipelines import InvoiceGenerator
st.set_page_config(page_title="Invoice generator", layout="wide")
output_folder = "output"
data_folder = "data"
template = "template.tex"
device = "cuda" if torch.cuda.is_available() else "cpu"
with open(f"{data_folder}/car_parts.json", "r") as f:
car_parts = json.load(f)
# if "pipeline" not in st.session_state:
# st.session_state.pipeline = InvoiceGenerator(
# fais_index_path=f"{data_folder}/invoice_index.faiss",
# image_invoice_index_path=f"{data_folder}/image_invoice.csv",
# path_to_invoices=f"{data_folder}/invoices",
# path_to_images=f"{data_folder}/images",
# reranker_model="monovlm",
# device=device,
# gpu_memory_utilization=0.65
# )
# pipeline = st.session_state.pipeline
#
#
# def get_image_from_pdf(pdf_path):
# doc = fitz.open(pdf_path)
# page = doc[0]
# mat = fitz.Matrix(2, 2)
# pix = page.get_pixmap(matrix=mat)
# img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
# return img
#
#
# def display_invoice(image_path):
# output_pdf = "invoice_" + os.path.basename(image_path).split(".")[0] + ".pdf"
# path_to_output_pdf = f"{output_folder}/{output_pdf}"
# try:
# result = pipeline.generate_invoice(
# image_path=image_path, output_path=path_to_output_pdf, car_parts=car_parts
# )
# if result is None:
# st.write("Image is irrelevant, upload another one")
# st.session_state["status"] = "irrelevant"
# return
# print(f"Generated invoice: {path_to_output_pdf}")
# st.session_state["generated_pdf"] = path_to_output_pdf
# st.session_state["invoice_info"] = result["invoice_info"]
# st.session_state["invoice_path"] = f"{data_folder}/invoices/{result['invoice_path']}"
# st.session_state["similar_image"] = f"{data_folder}/images/{result['similar_image']}"
# st.session_state["damage_description"] = result["damage_description"]
# st.session_state["detailed_damage_description"] = result["detailed_damage_description"]
# return get_image_from_pdf(path_to_output_pdf)
# except Exception as e:
# st.write("Could not generate invoice, please try again")
# print(e)
# return None
#
#
# st.title("Upload FNOL photo")
#
# col1, col2, col3 = st.columns([4, 1, 4])
#
# with col1:
# uploaded_image = st.file_uploader("Upload photo", type=["jpg", "jpeg", "png"])
# if uploaded_image:
# try:
# image = Image.open(uploaded_image)
# image_path = f"{output_folder}/{str(uuid4())[:5]}.png"
# image.save(image_path)
# print(f"Image: {image_path}")
# st.image(image, caption="Uploaded photo", width=300)
# st.session_state["image"] = image_path
# except Exception as e:
# st.write(f"Coudn't load image: {e}")
#
# with col2:
# if st.session_state.get("image"):
# if st.button("Generate invoice"):
# with st.spinner("Generating..."):
# st.session_state["invoice"] = display_invoice(st.session_state["image"])
# if st.session_state["invoice"]:
# st.session_state["status"] = "loaded"
# else:
# st.button("Generate invoice", disabled=True)
# if st.session_state.get("generated_pdf"):
# with open(st.session_state["generated_pdf"], "rb") as f:
# file_data = f.read()
# st.download_button(
# label="Download invoice",
# data=file_data,
# file_name="generated_invoice.pdf",
# mime="application/pdf"
# )
#
# with col3:
# if st.session_state.get("status") == "loaded":
# st.image(st.session_state["invoice"], caption="Generated invoice", use_container_width=True)
# st.image(st.session_state["similar_image"], caption="Similar accident", width=300)
# st.write(f"Detailed damage description: {st.session_state['detailed_damage_description']}")
# st.write(f"Damage description: {st.session_state['damage_description']}")
# st.image(get_image_from_pdf(st.session_state["invoice_path"]), caption="Invoice of similar accident type", use_container_width=True)