Instantnewdesign commited on
Commit
538f2a9
·
verified ·
1 Parent(s): 112a8d7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -22
app.py CHANGED
@@ -1,34 +1,55 @@
1
  import gradio as gr
2
  from mineru_vl_utils.mineru_client import MinerUClient
3
  from PIL import Image
4
- import fitz # PyMuPDF pour lire les PDFs
5
  import os
 
6
 
7
- # Init client (⚠️ sans "device")
8
  model_path = "opendatalab/MinerU2.5-2509-1.2B"
 
 
9
  client = MinerUClient(backend="transformers", model_path=model_path)
10
 
11
  def extract_from_file(file):
12
- # Vérifier si PDF ou image
13
- ext = os.path.splitext(file.name)[-1].lower()
14
- images = []
15
-
16
- if ext == ".pdf":
17
- doc = fitz.open(file.name)
18
- for page in doc:
19
- pix = page.get_pixmap()
20
- img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
21
- images.append(img)
22
- else:
23
- images.append(Image.open(file.name))
24
-
25
- results = []
26
- for img in images:
27
- blocks = client.two_step_extract(img)
28
- text_blocks = [b.text for b in blocks if hasattr(b, "text")]
29
- results.append("\n".join(text_blocks))
30
-
31
- return "\n\n--- PAGE ---\n\n".join(results)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  demo = gr.Interface(
34
  fn=extract_from_file,
 
1
  import gradio as gr
2
  from mineru_vl_utils.mineru_client import MinerUClient
3
  from PIL import Image
4
+ import fitz # PyMuPDF
5
  import os
6
+ import torch
7
 
8
+ # Init client
9
  model_path = "opendatalab/MinerU2.5-2509-1.2B"
10
+ device = "cuda" if torch.cuda.is_available() else "cpu"
11
+ print(f"⚡ Loading MinerU on device: {device}")
12
  client = MinerUClient(backend="transformers", model_path=model_path)
13
 
14
  def extract_from_file(file):
15
+ try:
16
+ print(f"📄 Processing file: {file.name}")
17
+ ext = os.path.splitext(file.name)[-1].lower()
18
+ images = []
19
+
20
+ if ext == ".pdf":
21
+ doc = fitz.open(file.name)
22
+ for i, page in enumerate(doc):
23
+ pix = page.get_pixmap()
24
+ img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
25
+ images.append(img)
26
+ print(f"✅ Converted page {i+1} to image")
27
+ else:
28
+ images.append(Image.open(file.name))
29
+
30
+ results = []
31
+ for i, img in enumerate(images):
32
+ print(f"🔍 Extracting text from page {i+1}")
33
+ blocks = client.two_step_extract(img)
34
+ if not blocks:
35
+ print(f"⚠️ No blocks found on page {i+1}")
36
+ results.append("[EMPTY PAGE]")
37
+ continue
38
+
39
+ text_blocks = []
40
+ for b in blocks:
41
+ if hasattr(b, "text") and b.text:
42
+ text_blocks.append(b.text)
43
+
44
+ page_text = "\n".join(text_blocks) if text_blocks else "[NO TEXT FOUND]"
45
+ results.append(page_text)
46
+ print(f"✅ Page {i+1} extracted")
47
+
48
+ return "\n\n--- PAGE ---\n\n".join(results)
49
+
50
+ except Exception as e:
51
+ print(f"❌ ERROR: {e}")
52
+ return f"Error during extraction: {str(e)}"
53
 
54
  demo = gr.Interface(
55
  fn=extract_from_file,