dmitrynovikov7211 commited on
Commit
6b144d5
·
verified ·
1 Parent(s): 7de8611

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -89
app.py CHANGED
@@ -6,6 +6,8 @@ from transformers import LayoutLMv3Processor, LayoutLMv3ForSequenceClassificatio
6
  import torch
7
  from PIL import Image
8
  import numpy as np
 
 
9
 
10
  # Copyright (c) Opendatalab. All rights reserved.
11
 
@@ -52,6 +54,10 @@ from magic_pdf.libs.hash_utils import compute_sha256
52
  from magic_pdf.tools.common import do_parse, prepare_env
53
  from loguru import logger
54
 
 
 
 
 
55
  def read_fn(path):
56
  disk_rw = FileBasedDataReader(os.path.dirname(path))
57
  return disk_rw.read(os.path.basename(path))
@@ -228,99 +234,106 @@ def to_pdf(file_path):
228
 
229
  @app.post("/process_document")
230
  async def process_document(
231
- file: UploadFile = File(...),
232
- end_pages: int = 10,
233
- is_ocr: bool = False,
234
- layout_mode: str = "doclayout_yolo",
235
- formula_enable: bool = True,
236
- table_enable: bool = False,
237
- language: str = "auto"
238
  ):
239
- try:
240
- print(f"\n=== НАЧАЛО ОБРАБОТКИ ДОКУМЕНТА ===")
241
- print(f"Имя файла: {file.filename}")
242
- print(f"Параметры: end_pages={end_pages}, is_ocr={is_ocr}, language={language}")
243
-
244
- temp_path = f"/tmp/{file.filename}"
245
- try:
246
- with open(temp_path, "wb") as buffer:
247
- content = await file.read()
248
- buffer.write(content)
249
- print(f"Файл сохранен: {temp_path}")
250
- except Exception as e:
251
- print(f"Ошибка при сохранении файла: {str(e)}")
252
- raise
253
-
254
- def extract_text_pymupdf(pdf_path):
255
- try:
256
- doc = fitz.open(pdf_path)
257
- print(f"Открыт PDF, всего страниц: {doc.page_count}")
258
-
259
- text = ""
260
- for page_num in range(min(end_pages, doc.page_count)):
261
- try:
262
- page = doc[page_num]
263
- blocks = page.get_text("blocks")
264
- blocks.sort(key=lambda b: (b[1], b[0]))
265
- for b in blocks:
266
- text += b[4] + "\n"
267
- print(f"Обработана страница {page_num + 1}")
268
- except Exception as page_error:
269
- print(f"Ошибка при обработке страницы {page_num + 1}: {str(page_error)}")
270
-
271
- doc.close()
272
- print(f"Извлечено {len(text)} символов текста")
273
- return text
274
- except Exception as e:
275
- print(f"Ошибка при извлечении текста: {str(e)}")
276
- return str(e)
277
-
278
- source_4 = extract_text_pymupdf(temp_path) or ""
279
- print(f"\nРазмер извлеченного текста: {len(source_4)} символов")
280
- print(f"Первые 200 символов:\n{source_4[:200]}")
281
-
282
- try:
283
- os.remove(temp_path)
284
- print("Временный файл удален")
285
- except Exception as e:
286
- print(f"Не удалось удалить временный файл: {str(e)}")
287
-
288
- if not source_4.strip():
289
- error_msg = "Не удалось извлечь текст из документа"
290
- print(error_msg)
291
- return JSONResponse(
292
- status_code=422,
293
- content={
294
- "error": error_msg,
295
- "details": "Извлеченный текст пуст"
296
- }
297
- )
298
-
299
- print("\n=== ВОЗВРАЩАЕМЫЙ JSON ===")
300
- response_json = {"text": source_4}
301
- print(json.dumps(response_json, indent=2, ensure_ascii=False)[:500] + "...")
302
- print("\n=== УСПЕШНОЕ ЗАВЕРШЕНИЕ ОБРАБОТКИ ===")
303
-
304
- return JSONResponse(response_json)
305
-
306
- except Exception as e:
307
- error_msg = f"Критическая ошибка при обработке документа: {str(e)}\nTraceback: {traceback.format_exc()}"
308
- print(error_msg)
309
- return JSONResponse(
310
- status_code=500,
311
- content={
312
- "error": error_msg,
313
- "details": {
314
- "error_type": type(e).__name__,
315
- "error_message": str(e),
316
- "file_name": file.filename if file else None
317
- }
318
- }
319
- )
320
 
321
  # Initialize models
322
  model_init = init_model()
323
  logger.info(f"model_init: {model_init}")
324
 
325
  if __name__ == "__main__":
326
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
 
 
 
 
 
 
6
  import torch
7
  from PIL import Image
8
  import numpy as np
9
+ import logging
10
+ from fastapi.logger import logger as fastapi_logger
11
 
12
  # Copyright (c) Opendatalab. All rights reserved.
13
 
 
54
  from magic_pdf.tools.common import do_parse, prepare_env
55
  from loguru import logger
56
 
57
+ # Настраиваем логирование
58
+ logging.basicConfig(level=logging.INFO)
59
+ logger = logging.getLogger("uvicorn")
60
+
61
  def read_fn(path):
62
  disk_rw = FileBasedDataReader(os.path.dirname(path))
63
  return disk_rw.read(os.path.basename(path))
 
234
 
235
  @app.post("/process_document")
236
  async def process_document(
237
+ file: UploadFile = File(...),
238
+ end_pages: int = 10,
239
+ is_ocr: bool = False,
240
+ layout_mode: str = "doclayout_yolo",
241
+ formula_enable: bool = True,
242
+ table_enable: bool = False,
243
+ language: str = "auto"
244
  ):
245
+ try:
246
+ logger.info("\n=== НАЧАЛО ОБРАБОТКИ ДОКУМЕНТА ===")
247
+ logger.info(f"Имя файла: {file.filename}")
248
+ logger.info(f"Параметры: end_pages={end_pages}, is_ocr={is_ocr}, language={language}")
249
+
250
+ temp_path = f"/tmp/{file.filename}"
251
+ try:
252
+ with open(temp_path, "wb") as buffer:
253
+ content = await file.read()
254
+ buffer.write(content)
255
+ logger.info(f"Файл сохранен: {temp_path}")
256
+ except Exception as e:
257
+ logger.error(f"Ошибка при сохранении файла: {str(e)}")
258
+ raise
259
+
260
+ def extract_text_pymupdf(pdf_path):
261
+ try:
262
+ doc = fitz.open(pdf_path)
263
+ logger.info(f"Открыт PDF, всего страниц: {doc.page_count}")
264
+
265
+ text = ""
266
+ for page_num in range(min(end_pages, doc.page_count)):
267
+ try:
268
+ page = doc[page_num]
269
+ blocks = page.get_text("blocks")
270
+ blocks.sort(key=lambda b: (b[1], b[0]))
271
+ for b in blocks:
272
+ text += b[4] + "\n"
273
+ logger.info(f"Обработана страница {page_num + 1}")
274
+ except Exception as page_error:
275
+ logger.error(f"Ошибка при обработке страницы {page_num + 1}: {str(page_error)}")
276
+
277
+ doc.close()
278
+ logger.info(f"Извлечено {len(text)} символов текста")
279
+ return text
280
+ except Exception as e:
281
+ logger.error(f"Ошибка при извлечении текста: {str(e)}")
282
+ return str(e)
283
+
284
+ source_4 = extract_text_pymupdf(temp_path) or ""
285
+ logger.info(f"\nРазмер извлеченного текста: {len(source_4)} символов")
286
+ logger.info(f"Первые 200 символов:\n{source_4[:200]}")
287
+
288
+ try:
289
+ os.remove(temp_path)
290
+ logger.info("Временный файл удален")
291
+ except Exception as e:
292
+ logger.warning(f"Не удалось удалить временный файл: {str(e)}")
293
+
294
+ if not source_4.strip():
295
+ error_msg = "Не удалось извлечь текст из документа"
296
+ logger.error(error_msg)
297
+ return JSONResponse(
298
+ status_code=422,
299
+ content={
300
+ "error": error_msg,
301
+ "details": "Извлеченный текст пуст"
302
+ }
303
+ )
304
+
305
+ logger.info("\n=== ВОЗВРАЩАЕМЫЙ JSON ===")
306
+ response_json = {"text": source_4}
307
+ logger.info(json.dumps(response_json, indent=2, ensure_ascii=False)[:500] + "...")
308
+ logger.info("\n=== УСПЕШНОЕ ЗАВЕРШЕНИЕ ОБРАБОТКИ ===")
309
+
310
+ return JSONResponse(response_json)
311
+
312
+ except Exception as e:
313
+ error_msg = f"Критическая ошибка при обработке документа: {str(e)}\nTraceback: {traceback.format_exc()}"
314
+ logger.error(error_msg)
315
+ return JSONResponse(
316
+ status_code=500,
317
+ content={
318
+ "error": error_msg,
319
+ "details": {
320
+ "error_type": type(e).__name__,
321
+ "error_message": str(e),
322
+ "file_name": file.filename if file else None
323
+ }
324
+ }
325
+ )
326
 
327
  # Initialize models
328
  model_init = init_model()
329
  logger.info(f"model_init: {model_init}")
330
 
331
  if __name__ == "__main__":
332
+ # Запускаем с включенным выводом логов
333
+ uvicorn.run(
334
+ app,
335
+ host="0.0.0.0",
336
+ port=7860,
337
+ log_level="info",
338
+ access_log=True
339
+ )