Skander453 commited on
Commit
bd12f3a
ยท
verified ยท
1 Parent(s): 14d25ef

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +109 -0
app.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ importer gradio comme gr
2
+ importer easyocr
3
+ depuis les transformateurs importer pipeline
4
+ import numpy as np
5
+ depuis PIL importer Image
6
+
7
+ # Initialisation du lecteur EasyOCR (anglais par dรฉfaut, possibilitรฉ d'ajouter d'autres langues)
8
+ lecteur = easyocr.Reader([ 'en' ], gpu= False )
9
+
10
+ # Initialiser le pipeline de rรฉsumรฉ ร  partir de Hugging Face
11
+ rรฉsumรฉ = pipeline( "summarization" , modรจle= "facebook/bart-large-cnn" )
12
+
13
+ def extraire_et_rรฉsumer ( image ):
14
+ ""
15
+ Extraire le texte d'une image ร  l'aide d'EasyOCR et le rรฉsumer ร  l'aide de BART
16
+
17
+ Arguments :
18
+ image : image PIL ou tableau numpy
19
+
20
+ Retours :
21
+ tuple : (texte_extrait, rรฉsumรฉ)
22
+ ""
23
+ essayer :
24
+ # Convertir l'image PIL en tableau numpy si nรฉcessaire
25
+ si isinstance (image, Image.Image) :
26
+ image = np.array(image)
27
+
28
+ # Extraire du texte ร  l'aide d'EasyOCR
29
+ rรฉsultats = lecteur.liretexte(image)
30
+
31
+ # Combiner tout le texte extrait
32
+ texte_extrait = " " .join([rรฉsultat[ 1 ] pour rรฉsultat dans rรฉsultats])
33
+
34
+ si la mรฉthode `extracted_text.strip()` n'est pas appelรฉe :
35
+ Renvoie ยซ Aucun texte dรฉtectรฉ dans l'image. ยป , ยซ Aucun texte ร  rรฉsumer. ยป
36
+
37
+ # Vรฉrifier si le texte est suffisamment long pour รชtre rรฉsumรฉ
38
+ nombre_de_mots = longueur (texte_extrait.split())
39
+
40
+ si le nombre de mots est infรฉrieur ร  30 :
41
+ return extracted_text, "Le texte est trop court pour รชtre rรฉsumรฉ. Minimum 30 mots requis."
42
+
43
+ # Rรฉsumer le texte extrait
44
+ # Ajuster max_length et min_length en fonction de la longueur d'entrรฉe
45
+ longueur_max = min ( 150 , nombre_de_mots)
46
+ longueur_min = min ( 30 , nombre_de_mots // 2 )
47
+
48
+ rรฉsumรฉ = rรฉsumรฉ(
49
+ texte_extrait,
50
+ longueur_max=longueur_max,
51
+ longueur_min=longueur_min,
52
+ do_sample= Faux
53
+ )
54
+
55
+ texte_rรฉsumรฉ = rรฉsumรฉ[ 0 ][ 'texte_rรฉsumรฉ' ]
56
+
57
+ renvoyer le texte extrait, le texte rรฉcapitulatif
58
+
59
+ sauf Exception comme e :
60
+ return f"Erreur : { str (e)} " , "Impossible de gรฉnรฉrer le rรฉsumรฉ en raison d'une erreur."
61
+
62
+ # Crรฉer une interface Gradio
63
+ avec gr.Blocks(title= "OCR & Text Summarizer" ) comme dรฉmo :
64
+ gr.Markdown(
65
+ ""
66
+ # ๐Ÿ“ OCR et rรฉsumรฉ de texte
67
+ Tรฉlรฉchargez une image contenant du texte, et cette application va :
68
+ 1. Extraire le texte ร  l'aide d'EasyOCR
69
+ 2. Rรฉsumer le texte extrait ร  l'aide de l'IA (modรจle BART)
70
+
71
+ **Remarque :** Fonctionne mieux avec un texte clair et lisible. Un minimum de 30 mots est requis pour le rรฉsumรฉ.
72
+ ""
73
+ )
74
+
75
+ avec gr.Row() :
76
+ avec gr.Column() :
77
+ image_input = gr.Image(
78
+ type = "pile" ,
79
+ รฉtiquette= "Tรฉlรฉcharger une image"
80
+ )
81
+ submit_btn = gr.Button( "Extraire et rรฉsumer" , variant= "primaire" )
82
+
83
+ avec gr.Column() :
84
+ sortie_extraite = gr.Textbox(
85
+ รฉtiquette= "Texte extrait" ,
86
+ lignes= 10 ,
87
+ placeholder= "Le texte extrait apparaรฎtra ici..."
88
+ )
89
+ rรฉsultat_rรฉsumรฉ = gr.Textbox(
90
+ รฉtiquette= "Rรฉsumรฉ" ,
91
+ lignes= 5 ,
92
+ placeholder= "Le rรฉsumรฉ apparaรฎtra ici..."
93
+ )
94
+
95
+ gr.Exemples(
96
+ exemples=[],
97
+ entrรฉes=image_input,
98
+ label= "Images d'exemple (Ajoutez les vรดtres)"
99
+ )
100
+
101
+ soumettre_btn.cliquer(
102
+ fn=extraire_et_rรฉsumer,
103
+ entrรฉes=image_input,
104
+ sorties=[sortie_extraite, sortie_rรฉsumรฉe]
105
+ )
106
+
107
+ # Lancer l'application
108
+ si __name__ == "__main__" :
109
+ dรฉmo.lancer()