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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -61
app.py CHANGED
@@ -19,20 +19,63 @@ 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
@@ -396,52 +439,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
+ st.title("Import Fatture AI ✨")
27
+ login_placeholder = st.empty()
28
+
29
+ with login_placeholder.container():
30
+ container = st.container(border=True)
31
+ username = container.text_input('Username')
32
+ password = container.text_input('Passowrd')
33
+ login = container.button(' Login ', type='primary')
34
+
35
+ if not login or username != os.getenv("LOGIN_USER") or password != os.getenv("LOGIN_PASSWORD"):
36
+ if login:
37
+ st.error('Password Errata')
38
+ st.stop()
39
+ login_placeholder.empty()
40
+
41
+ with st.expander("Guida completa"):
42
+ 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.
43
+
44
+ ## Funzionalità Principali
45
+
46
+ - **Caricamento e Gestione dei Documenti**
47
+ - Supporta il caricamento di file PDF, JPG, JPEG e PNG tramite un’interfaccia Streamlit.
48
+ - 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.
49
+
50
+ - **Conversione dei Dati**
51
+ - **Upload e Inoltro a Gemini**: I file vengono caricati e inviati al rispettivo servizio AI.
52
+ - **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).
53
+
54
+ - **Validazione e Verifica**
55
+ - **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.
56
+ - **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.
57
+ - **Filtraggio Articoli**: Vengono mantenuti solo gli articoli compatibili con i criteri specifici (codici articolo e importi non nulli).
58
+
59
+ - **Visualizzazione e Highlighting**
60
+ - I dati validati vengono mostrati in formato tabellare e in JSON.
61
+ - Se il documento è un PDF, il sistema evidenzia graficamente (con rettangoli rossi) i testi relativi agli articoli compatibili, semplificando il controllo visivo.
62
+
63
+ ## Avvertenze per l'Operatore
64
+
65
+ - **Controllo Manuale Obbligatorio**:
66
+ L'operatore **deve sempre verificare** i dati elaborati.
67
+ Nonostante il riprocessamento automatico in caso di errori, è fondamentale controllare la correttezza dei dati estratti e la validità degli articoli.
68
+
69
+ - **Validazione dei Dati**:
70
+ L'operazione di validazione tramite Pydantic e la verifica incrociata sul contenuto del PDF sono cruciali.
71
+ Assicurarsi che non vi siano discrepanze, specialmente nei casi in cui alcuni articoli risultino non verificati.
72
+ """)
73
+
74
+ st.write("📄 **Legge più PDF:** Carica più file PDF contemporaneamente")
75
+ st.write("🤖 **Sfrutta l'AI di Gemini:** Per ogni documento, estrae i dati in formato JSON e in formato tabellare.")
76
+ st.write("✅ **Mostra Articoli Compatibili:** Filtra e visualizza solo gli articoli che rispettano i criteri richiesti.")
77
+ st.write("🔍 **Anteprima Documento:** Visualizza un'anteprima del documento evidenziando gli articoli compatibili.")
78
+
79
 
80
  GENERATION_CONFIG = settings_ai.GENERATION_CONFIG
81
  SYSTEM_INSTRUCTION = settings_ai.SYSTEM_INSTRUCTION
 
439
  os.remove(file_path)
440
 
441
  if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  st.divider()
443
  main()