habulaj commited on
Commit
1596a90
·
verified ·
1 Parent(s): e584bce

Update routers/textclas.py

Browse files
Files changed (1) hide show
  1. routers/textclas.py +44 -19
routers/textclas.py CHANGED
@@ -1,19 +1,40 @@
1
  from fastapi import APIRouter, HTTPException, Query
2
  from fastapi.responses import JSONResponse
3
- from PIL import Image
 
4
  import requests
5
- import base64
6
  from io import BytesIO
 
7
 
8
  # Criação do roteador
9
  router = APIRouter()
10
 
11
- @router.get("/image/base64/")
12
- def get_image_as_base64(
13
- image_url: str = Query(..., description="URL da imagem para ser processada")
14
- ):
15
  """
16
- Recebe uma URL de imagem, converte para base64 e retorna no navegador.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  """
18
  try:
19
  # Baixar a imagem da URL
@@ -22,21 +43,25 @@ def get_image_as_base64(
22
  raise HTTPException(
23
  status_code=400, detail="Não foi possível baixar a imagem da URL fornecida."
24
  )
25
-
26
- # Abrir a imagem com Pillow
27
- image = Image.open(BytesIO(response.content))
28
-
29
- # Converter a imagem para base64
30
- buffered = BytesIO()
31
- image.save(buffered, format=image.format if image.format else "PNG")
32
- img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
33
-
34
- # Retornar a imagem em base64
 
 
 
 
35
  return JSONResponse(content={
36
  "image_url": image_url,
37
- "image_base64": f"data:image/{image.format.lower()};base64,{img_base64}"
38
  })
39
-
40
  except requests.exceptions.RequestException as e:
41
  raise HTTPException(status_code=400, detail=f"Erro ao acessar a URL: {str(e)}")
42
  except Exception as e:
 
1
  from fastapi import APIRouter, HTTPException, Query
2
  from fastapi.responses import JSONResponse
3
+ import cv2
4
+ import numpy as np
5
  import requests
6
+ from PIL import Image
7
  from io import BytesIO
8
+ import base64
9
 
10
  # Criação do roteador
11
  router = APIRouter()
12
 
13
+
14
+ def remove_handwritten_content(image: np.ndarray) -> np.ndarray:
 
 
15
  """
16
+ Remove conteúdo manuscrito de uma imagem usando técnicas do OpenCV.
17
+ """
18
+ # Converte a imagem para escala de cinza
19
+ gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
20
+
21
+ # Aplica threshold para detectar manuscritos
22
+ _, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY_INV)
23
+
24
+ # Aplica dilatação para conectar as partes manuscritas
25
+ kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
26
+ dilated = cv2.dilate(thresh, kernel, iterations=2)
27
+
28
+ # Aplica inpainting para remover manuscritos
29
+ result = cv2.inpaint(image, dilated, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
30
+
31
+ return result
32
+
33
+
34
+ @router.get("/image/remove-handwriting/")
35
+ def process_image(image_url: str = Query(..., description="URL da imagem para ser processada")):
36
+ """
37
+ Recebe uma URL de imagem, remove conteúdo manuscrito e retorna em base64.
38
  """
39
  try:
40
  # Baixar a imagem da URL
 
43
  raise HTTPException(
44
  status_code=400, detail="Não foi possível baixar a imagem da URL fornecida."
45
  )
46
+
47
+ # Carregar imagem com OpenCV
48
+ image_array = np.asarray(bytearray(response.content), dtype=np.uint8)
49
+ image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
50
+ if image is None:
51
+ raise HTTPException(status_code=400, detail="A URL não contém uma imagem válida.")
52
+
53
+ # Remover manuscrito
54
+ processed_image = remove_handwritten_content(image)
55
+
56
+ # Converter imagem processada para base64
57
+ _, buffer = cv2.imencode('.png', processed_image)
58
+ img_base64 = base64.b64encode(buffer).decode('utf-8')
59
+
60
  return JSONResponse(content={
61
  "image_url": image_url,
62
+ "processed_image_base64": f"data:image/png;base64,{img_base64}"
63
  })
64
+
65
  except requests.exceptions.RequestException as e:
66
  raise HTTPException(status_code=400, detail=f"Erro ao acessar a URL: {str(e)}")
67
  except Exception as e: