MatteoScript commited on
Commit
d5a81fe
·
verified ·
1 Parent(s): 3e491e6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -57
app.py CHANGED
@@ -19,21 +19,71 @@ import fitz
19
  import re
20
  import io
21
  from collections import Counter
22
- from streamlit_google_auth import Authenticate
 
 
23
 
24
- secret_json_str = os.getenv("JSON_GOOGLE_SECRET")
25
- if secret_json_str:
26
- secret_data = json.loads(secret_json_str)
27
- with open("secret-account.json", "w") as f:
28
- f.write(secret_json_str)
29
 
30
  authenticator = Authenticate(
31
- secret_credentials_path = 'secret-account.json',
32
- cookie_name='my_cookie_name',
33
- cookie_key='this_is_secret',
34
- redirect_uri = 'https://matteoscript-importfattureai.hf.space',
35
  )
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  GENERATION_CONFIG = settings_ai.GENERATION_CONFIG
38
  SYSTEM_INSTRUCTION = settings_ai.SYSTEM_INSTRUCTION
39
  USER_MESSAGE = settings_ai.USER_MESSAGE
@@ -396,52 +446,5 @@ def main():
396
  os.remove(file_path)
397
 
398
  if __name__ == "__main__":
399
- st.title("Import Fatture AI ✨")
400
- with st.expander("Guida completa"):
401
- st.write("""Questa applicazione Python, basata su Streamlit, integra servizi di intelligenza artificiale di Gemini per automatizzare l'estrazione e la validazione dei dati dalle fatture. Il sistema gestisce documenti in vari formati (PDF, immagini) e li elabora in maniera modulare per facilitare la conversione e la verifica delle informazioni.
402
-
403
- ## Funzionalità Principali
404
-
405
- - **Caricamento e Gestione dei Documenti**
406
- - Supporta il caricamento di file PDF, JPG, JPEG e PNG tramite un’interfaccia Streamlit.
407
- - Se il file è un PDF con più pagine, viene suddiviso in sezioni (configurabile tramite uno slider) per una gestione più efficace. Più il numero è basso più il risultato è preciso.
408
-
409
- - **Conversione dei Dati**
410
- - **Upload e Inoltro a Gemini**: I file vengono caricati e inviati al rispettivo servizio AI.
411
- - **Estrazione dei Dati**: Il sistema invia il documento a un modello di generazione AI per ottenere una rappresentazione JSON contenente i dati (ad es. numero di documento, data, totale imponibile e articoli).
412
-
413
- - **Validazione e Verifica**
414
- - **Validazione JSON**: Utilizza Pydantic per verificare la correttezza della struttura e dei dati estratti. In caso di errori, il documento viene riprocessato fino a 3 volte per cercare di correggere le anomalie.
415
- - **Verifica Incrociata dei Contenuti**: Per i PDF, viene estratto il testo con PyPDF2 e confrontato con i codici articolo per assicurarsi che i dati siano effettivamente presenti nel documento.
416
- - **Filtraggio Articoli**: Vengono mantenuti solo gli articoli compatibili con i criteri specifici (codici articolo e importi non nulli).
417
-
418
- - **Visualizzazione e Highlighting**
419
- - I dati validati vengono mostrati in formato tabellare e in JSON.
420
- - Se il documento è un PDF, il sistema evidenzia graficamente (con rettangoli rossi) i testi relativi agli articoli compatibili, semplificando il controllo visivo.
421
-
422
- ## Avvertenze per l'Operatore
423
-
424
- - **Controllo Manuale Obbligatorio**:
425
- L'operatore **deve sempre verificare** i dati elaborati.
426
- Nonostante il riprocessamento automatico in caso di errori, è fondamentale controllare la correttezza dei dati estratti e la validità degli articoli.
427
-
428
- - **Validazione dei Dati**:
429
- L'operazione di validazione tramite Pydantic e la verifica incrociata sul contenuto del PDF sono cruciali.
430
- Assicurarsi che non vi siano discrepanze, specialmente nei casi in cui alcuni articoli risultino non verificati.
431
- """)
432
-
433
- st.write("📄 **Legge più PDF:** Carica più file PDF contemporaneamente")
434
- st.write("🤖 **Sfrutta l'AI di Gemini:** Per ogni documento, estrae i dati in formato JSON e in formato tabellare.")
435
- st.write("✅ **Mostra Articoli Compatibili:** Filtra e visualizza solo gli articoli che rispettano i criteri richiesti.")
436
- st.write("🔍 **Anteprima Documento:** Visualizza un'anteprima del documento evidenziando gli articoli compatibili.")
437
  st.divider()
438
  main()
439
- #authenticator.check_authentification()
440
- #authenticator.login()
441
- #if st.session_state['connected']:
442
- # st.divider()
443
- # main()
444
- #else:
445
- # with st.sidebar:
446
- # st.title("Login")
447
- # st.write("Seleziona l'account aziendale per accedere")
 
19
  import re
20
  import io
21
  from collections import Counter
22
+ import secrets
23
+
24
+ st.set_page_config(page_title="Import Fatture AI✨")
25
 
26
+ from streamlit_google_auth import Authenticate
27
+ google_auth_str = os.getenv("JSON_GOOGLE_SECRET")
28
+ google_auth_data = json.loads(google_auth_str)
29
+ with open("google_credentials.json", "w") as f:
30
+ json.dump(google_auth_data, f, indent=4)
31
 
32
  authenticator = Authenticate(
33
+ secret_credentials_path='google_credentials.json',
34
+ cookie_name=f"llm_pdf_digest_{secrets.token_hex(4)}",
35
+ cookie_key=secrets.token_hex(32),
36
+ redirect_uri=os.getenv("URL_REDIRECT"),
37
  )
38
 
39
+ st.title("Import Fatture AI ✨")
40
+ with st.expander("Guida completa"):
41
+ st.write("""Questa applicazione Python, basata su Streamlit, integra servizi di intelligenza artificiale di Gemini per automatizzare l'estrazione e la validazione dei dati dalle fatture. Il sistema gestisce documenti in vari formati (PDF, immagini) e li elabora in maniera modulare per facilitare la conversione e la verifica delle informazioni.
42
+
43
+ ## Funzionalità Principali
44
+
45
+ - **Caricamento e Gestione dei Documenti**
46
+ - Supporta il caricamento di file PDF, JPG, JPEG e PNG tramite un’interfaccia Streamlit.
47
+ - Se il file è un PDF con più pagine, viene suddiviso in sezioni (configurabile tramite uno slider) per una gestione più efficace. Più il numero è basso più il risultato è preciso.
48
+
49
+ - **Conversione dei Dati**
50
+ - **Upload e Inoltro a Gemini**: I file vengono caricati e inviati al rispettivo servizio AI.
51
+ - **Estrazione dei Dati**: Il sistema invia il documento a un modello di generazione AI per ottenere una rappresentazione JSON contenente i dati (ad es. numero di documento, data, totale imponibile e articoli).
52
+
53
+ - **Validazione e Verifica**
54
+ - **Validazione JSON**: Utilizza Pydantic per verificare la correttezza della struttura e dei dati estratti. In caso di errori, il documento viene riprocessato fino a 3 volte per cercare di correggere le anomalie.
55
+ - **Verifica Incrociata dei Contenuti**: Per i PDF, viene estratto il testo con PyPDF2 e confrontato con i codici articolo per assicurarsi che i dati siano effettivamente presenti nel documento.
56
+ - **Filtraggio Articoli**: Vengono mantenuti solo gli articoli compatibili con i criteri specifici (codici articolo e importi non nulli).
57
+
58
+ - **Visualizzazione e Highlighting**
59
+ - I dati validati vengono mostrati in formato tabellare e in JSON.
60
+ - Se il documento è un PDF, il sistema evidenzia graficamente (con rettangoli rossi) i testi relativi agli articoli compatibili, semplificando il controllo visivo.
61
+
62
+ ## Avvertenze per l'Operatore
63
+
64
+ - **Controllo Manuale Obbligatorio**:
65
+ L'operatore **deve sempre verificare** i dati elaborati.
66
+ Nonostante il riprocessamento automatico in caso di errori, è fondamentale controllare la correttezza dei dati estratti e la validità degli articoli.
67
+
68
+ - **Validazione dei Dati**:
69
+ L'operazione di validazione tramite Pydantic e la verifica incrociata sul contenuto del PDF sono cruciali.
70
+ Assicurarsi che non vi siano discrepanze, specialmente nei casi in cui alcuni articoli risultino non verificati.
71
+ """)
72
+
73
+ st.write("📄 **Legge più PDF:** Carica più file PDF contemporaneamente")
74
+ st.write("🤖 **Sfrutta l'AI di Gemini:** Per ogni documento, estrae i dati in formato JSON e in formato tabellare.")
75
+ st.write("✅ **Mostra Articoli Compatibili:** Filtra e visualizza solo gli articoli che rispettano i criteri richiesti.")
76
+ st.write("🔍 **Anteprima Documento:** Visualizza un'anteprima del documento evidenziando gli articoli compatibili.")
77
+
78
+ authenticator.check_authentification()
79
+ authenticator.login()
80
+
81
+ if not st.session_state.get('connected'):
82
+ with st.sidebar:
83
+ st.title("Login")
84
+ st.write("Seleziona l'account aziendale per accedere")
85
+ st.stop()
86
+
87
  GENERATION_CONFIG = settings_ai.GENERATION_CONFIG
88
  SYSTEM_INSTRUCTION = settings_ai.SYSTEM_INSTRUCTION
89
  USER_MESSAGE = settings_ai.USER_MESSAGE
 
446
  os.remove(file_path)
447
 
448
  if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  st.divider()
450
  main()