GABRIELSZK commited on
Commit
9afb7d7
·
verified ·
1 Parent(s): f3bf590

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -60
app.py CHANGED
@@ -7,7 +7,7 @@ import pytesseract
7
  from PIL import Image, ImageEnhance, ImageFilter
8
  import io
9
 
10
- # 🎯 Faixas de referência (valores de referência mínimos e máximos)
11
  faixas = {
12
  "LEUCO": (4000, 11000),
13
  "B": (0, 1), "SS": (45, 59), "EOS": (1, 6), "LINF": (30, 50), "MONO": (1, 8),
@@ -41,79 +41,63 @@ def classificar(nome, valor):
41
  except:
42
  return valor
43
 
44
- # Ajustes para melhorar OCR
45
  def melhorar_imagem(img: Image.Image) -> Image.Image:
46
  img = img.convert("L")
47
  img = ImageEnhance.Contrast(img).enhance(2)
48
  return img.filter(ImageFilter.SHARPEN)
49
 
50
- # Extrai texto nativo + OCR
51
  def extrair_texto_pdf(pdf_input):
52
- if isinstance(pdf_input, dict):
53
- pdf_path = pdf_input.get("name") or pdf_input.get("file_path")
54
- elif hasattr(pdf_input, "name") and isinstance(pdf_input.name, str):
55
- pdf_path = pdf_input.name
56
- else:
57
- pdf_path = str(pdf_input)
58
 
59
- texto_nativo, ocr_imgs = [], []
60
- with fitz.open(pdf_path) as doc:
61
- for page in doc:
62
- texto_nativo.append(page.get_text())
63
- pix = page.get_pixmap(dpi=300)
64
- img = Image.open(io.BytesIO(pix.tobytes("png")))
65
- ocr_imgs.append(melhorar_imagem(img))
66
- tn = re.sub(r"\s+", " ", "".join(texto_nativo))
67
- tocr = re.sub(r"\s+", " ", " ".join(pytesseract.image_to_string(im) for im in ocr_imgs))
68
- return tn, tocr
69
-
70
- # Padrões de extração incluindo EAS completo
71
  exames = {
72
  # Hemograma
73
- "LEUCO": r"leuc[óo]citos.*?([\d.,]+)\s*/u?l",
74
- "B": r"bas[óo]filos.*?([\d.,]+)\s?%",
75
- "SS": r"segmentados.*?([\d.,]+)\s?%",
76
- "EOS": r"eosin[óo]filos.*?([\d.,]+)\s?%",
77
- "LINF": r"linf[oó]citos.*?([\d.,]+)\s?%",
78
- "MONO": r"mon[óo]citos.*?([\d.,]+)\s?%",
79
- "HB": r"hemoglobina.*?([\d.,]+)\s?g/dl",
80
- "HT": r"hemat[óo]crito.*?([\d.,]+)\s?%",
81
- "PLT": r"plaquetas.*?([\d.,]+).*?/u?l",
82
  # Bioquímica
83
- "AMIL": r"amilase.*?resultado[:\s]*([\d.,]+)\s?u/l",
84
- "BT": r"bilirrubina total.*?([\d.,]+)\s?mg/dl",
85
- "BD": r"bilirrubina direta.*?([\d.,]+)\s?mg/dl",
86
- "BI": r"bilirrubina indireta.*?([\d.,]+)\s?mg/dl",
87
- "CR": r"creatinina.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
88
- "UREIA":r"ureia.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
89
- "FAL": r"fosfatase alcalina.*?resultado[:\s]*([\d.,]+)\s?u/l",
90
- "GGT": r"ggt.*?resultado[:\s]*([\d.,]+)\s?u/l",
91
- "TGO": r"tgo.*?resultado[:\s]*([\d.,]+)\s?u/l",
92
- "TGP": r"tgp.*?resultado[:\s]*([\d.,]+)\s?u/l",
93
- "GLI": r"glicose(?! qualitativa).*?resultado[:\s]*([\d.,]+)\s?mg/dl",
94
- "LIP": r"lipase.*?resultado[:\s]*([\d.,]+)\s?u/l",
95
- "MG++": r"magn[eé]sio.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
96
  # Coagulação
97
- "TAP": r"tempo de protrombina.*?resultado[:\s]*([\d.,]+)",
98
- "INR": r"inr.*?([\d.,]+)",
99
- "TTP": r"ttpa.*?resultado[:\s]*([\d.,]+)",
100
- "DIMERO D": r"d[ií]mero d.*?resultado[:\s]*([\d.,]+)",
101
  # Inflamatório e Cardíacos
102
- "PCR": r"pcr.*?resultado[:\s]*([\d.,]+)",
103
- "CKMB": r"ck[- ]?mb.*?resultado[:\s]*([\d.,]+)",
104
- "CPK": r"cpk.*?resultado[:\s]*([\d.,]+)",
105
- "TROPONINA": r"troponina(?! qualitativa).*?resultado[:\s]*([>\d.,]+)",
106
  "TROPONINA QUAL": r"troponina qualitativa.*?resultado[:\s]*(positivo|negativo)",
107
  # EAS completo (Urina)
108
- "PROTEINA UR": r"prote[ií]na\s*(ausente|positivo|negativo)",
109
- "GLI UR": r"glicose\s*(ausente|positivo|negativo)",
110
- "CETONAS UR": r"corpos cet[oô]nicos.*?(ausente|positivo|negativo)",
111
- "SANGUE UR": r"sangue\s*(ausente|positivo|negativo)",
112
- "LEUC ESTERASE": r"leuc[óo]citos? esterase\s*[:\-]?\s*(ausente|positivo|negativo)",
113
- "NITRITO UR": r"nitrito\s*(ausente|positivo|negativo)",
114
- "LEUCO EAS": r"leuc[óo]citos?\s*([\d]+[-\/–][\d]+)",
115
- "HEMA EAS": r"hem[áa]cias?\s*([\d]+[-\/–][\d]+)",
116
- "BACTERIAS UR": r"bact[ée]rias?\s*(raras|ausentes|positivas|negativas)"
117
  }
118
 
119
  ordem = [
 
7
  from PIL import Image, ImageEnhance, ImageFilter
8
  import io
9
 
10
+ # 🎯 Faixas de referência
11
  faixas = {
12
  "LEUCO": (4000, 11000),
13
  "B": (0, 1), "SS": (45, 59), "EOS": (1, 6), "LINF": (30, 50), "MONO": (1, 8),
 
41
  except:
42
  return valor
43
 
 
44
  def melhorar_imagem(img: Image.Image) -> Image.Image:
45
  img = img.convert("L")
46
  img = ImageEnhance.Contrast(img).enhance(2)
47
  return img.filter(ImageFilter.SHARPEN)
48
 
 
49
  def extrair_texto_pdf(pdf_input):
50
+ # ... (mesma função de antes)
51
+ # retorna texto nativo e OCR como uma única linha, com espaços
52
+ ...
 
 
 
53
 
54
+ # Padrões de extração — agora com word‐boundaries e unidades obrigatórias
 
 
 
 
 
 
 
 
 
 
 
55
  exames = {
56
  # Hemograma
57
+ "LEUCO": r"\bleuc[óo]citos\b.*?([\d.,]+)\s*/u?l",
58
+ "B": r"\bbastonetes\b.*?([\d.,]+)\s?%",
59
+ "SS": r"\bsegmentados\b.*?([\d.,]+)\s?%",
60
+ "EOS": r"\beosin[óo]filos\b.*?([\d.,]+)\s?%",
61
+ "LINF": r"\blinf[oó]citos\b.*?([\d.,]+)\s?%",
62
+ "MONO": r"\bmon[óo]citos\b.*?([\d.,]+)\s?%",
63
+ "HB": r"\bhemoglobina\b.*?([\d.,]+)\s?g/dl",
64
+ "HT": r"\bhemat[óo]crito\b.*?([\d.,]+)\s?%",
65
+ "PLT": r"\bplaquetas\b.*?([\d.,]+)\s*/u?l",
66
  # Bioquímica
67
+ "AMIL": r"\bamilase\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
68
+ "BT": r"\bbilirrubina total\b.*?([\d.,]+)\s?mg/dl",
69
+ "BD": r"\bbilirrubina direta\b.*?([\d.,]+)\s?mg/dl",
70
+ "BI": r"\bbilirrubina indireta\b.*?([\d.,]+)\s?mg/dl",
71
+ "CR": r"\bcreatinina\b.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
72
+ "UREIA":r"\bureia\b.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
73
+ "FAL": r"\bfosfatase alcalina\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
74
+ "GGT": r"\bggt\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
75
+ "TGO": r"\btgo\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
76
+ "TGP": r"\btgp\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
77
+ "GLI": r"\bglicose\b(?! qualitativa).*?resultado[:\s]*([\d.,]+)\s?mg/dl",
78
+ "LIP": r"\blipase\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
79
+ "MG++": r"\bmagn[eé]sio\b.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
80
  # Coagulação
81
+ "TAP": r"\btempo de protrombina\b.*?resultado[:\s]*([\d.,]+)",
82
+ "INR": r"\binr\b.*?([\d.,]+)",
83
+ "TTP": r"\bttpa\b.*?resultado[:\s]*([\d.,]+)",
84
+ "DIMERO D": r"\bd[ií]mero d\b.*?resultado[:\s]*([\d.,]+)",
85
  # Inflamatório e Cardíacos
86
+ "PCR": r"\bpcr\b.*?resultado[:\s]*([\d.,]+)\s?mg/dl",
87
+ "CKMB": r"\bck[- ]?mb\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
88
+ "CPK": r"\bcpk\b.*?resultado[:\s]*([\d.,]+)\s?u/l",
89
+ "TROPONINA": r"troponina(?! qualitativa).*?resultado[:\s]*([><\d.,]+)(?=\s*ng\/?m[lL])",
90
  "TROPONINA QUAL": r"troponina qualitativa.*?resultado[:\s]*(positivo|negativo)",
91
  # EAS completo (Urina)
92
+ "PROTEINA UR": r"\bprote[ií]na\b.*?\b(ausente|positivo|negativo)",
93
+ "GLI UR": r"\bglicose\b.*?\b(ausente|positivo|negativo)",
94
+ "CETONAS UR": r"\bcorpos cet[oô]nicos\b.*?\b(ausente|positivo|negativo)",
95
+ "SANGUE UR": r"\bsangue\b.*?\b(ausente|positivo|negativo)",
96
+ "LEUC ESTERASE": r"\bleuc[óo]citos? esterase\b.*?\b(ausente|positivo|negativo)",
97
+ "NITRITO UR": r"\bnitrito\b.*?\b(ausente|positivo|negativo)",
98
+ "LEUCO EAS": r"\bleuc[óo]citos?\b\s*([\d]+[-\/–][\d]+)",
99
+ "HEMA EAS": r"\bhem[áa]cias?\b\s*([\d]+[-\/–][\d]+)",
100
+ "BACTERIAS UR": r"\bbact[ée]rias?\b.*?\b(raras|ausentes|positivas|negativas)"
101
  }
102
 
103
  ordem = [