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) | |