gahanmakwana commited on
Commit
c53f752
·
1 Parent(s): 2804140

fix: add werkzeug dependency

Browse files
Files changed (1) hide show
  1. app.py +25 -31
app.py CHANGED
@@ -46,30 +46,29 @@
46
  # app.run(host='0.0.0.0', port=port)
47
 
48
  from flask import Flask, render_template, request, send_from_directory
49
- from paddleocr import PaddleOCR
50
  import os
51
  import time
52
- import logging
53
 
54
  app = Flask(__name__)
55
 
56
- # Configure minimal logging
57
- logging.basicConfig(level=logging.WARNING)
58
-
59
- # Upload folder
60
- UPLOAD_FOLDER = 'uploads'
61
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
62
 
63
- # Lightweight OCR initialization
64
  def get_ocr():
 
65
  return PaddleOCR(
66
  lang='en',
67
- use_angle_cls=False, # Disable angle classifier to save memory
68
  use_gpu=False,
69
- enable_mkldnn=True, # CPU optimization
70
- rec_batch_num=1, # Process one line at a time
71
- det_limit_side_len=480, # Smaller image size
72
- thread_num=1 # Critical for free tier
 
 
 
73
  )
74
 
75
  @app.route('/', methods=['GET', 'POST'])
@@ -77,40 +76,35 @@ def upload_file():
77
  if request.method == 'POST':
78
  file = request.files.get('file')
79
  if not file or file.filename == '':
80
- return render_template('index.html', error="No file selected")
81
 
82
  try:
83
- # Verify file size (<500KB)
84
- file.seek(0, os.SEEK_END)
85
- if file.tell() > 500000:
86
- return render_template('index.html', error="File too large (max 500KB)")
87
  file.seek(0)
88
 
89
- # Save with timestamp
90
- filename = f"{int(time.time())}_{file.filename}"
91
  filepath = os.path.join(UPLOAD_FOLDER, filename)
92
  file.save(filepath)
93
 
94
- # Initialize OCR per-request (avoids memory buildup)
95
  ocr = get_ocr()
96
-
97
- # Fast OCR with small image
98
- result = ocr.ocr(filepath, cls=False)[0] # [0] gets first batch
99
- text = ' '.join([word[1][0] for word in result if len(word) >= 2])
100
 
101
- return render_template('index.html', text=text, filename=filename)
 
 
102
 
103
  except Exception as e:
104
  if os.path.exists(filepath):
105
  os.remove(filepath)
106
- return render_template('index.html', error=f"Error: {str(e)}")
107
 
108
  return render_template('index.html')
109
 
110
- @app.route('/uploads/<filename>')
111
- def uploaded_file(filename):
112
- return send_from_directory(UPLOAD_FOLDER, filename)
113
-
114
  if __name__ == '__main__':
115
  port = int(os.environ.get('PORT', 5000))
116
  app.run(host='0.0.0.0', port=port, threaded=False)
 
46
  # app.run(host='0.0.0.0', port=port)
47
 
48
  from flask import Flask, render_template, request, send_from_directory
 
49
  import os
50
  import time
 
51
 
52
  app = Flask(__name__)
53
 
54
+ # Configure minimal setup
55
+ UPLOAD_FOLDER = 'tmp_uploads'
 
 
 
56
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
57
 
58
+ # Lazy-load OCR only when needed
59
  def get_ocr():
60
+ from paddleocr import PaddleOCR
61
  return PaddleOCR(
62
  lang='en',
63
+ use_angle_cls=False,
64
  use_gpu=False,
65
+ det_model_dir='en_PP-OCRv3_det_infer',
66
+ rec_model_dir='en_PP-OCRv3_rec_infer',
67
+ cls_model_dir='ch_ppocr_mobile_v2.0_cls_infer',
68
+ enable_mkldnn=True,
69
+ rec_batch_num=1,
70
+ det_limit_side_len=320,
71
+ thread_num=1
72
  )
73
 
74
  @app.route('/', methods=['GET', 'POST'])
 
76
  if request.method == 'POST':
77
  file = request.files.get('file')
78
  if not file or file.filename == '':
79
+ return render_template('index.html', error="Please select a file")
80
 
81
  try:
82
+ # 300KB file size limit
83
+ if len(file.read()) > 300000:
84
+ return render_template('index.html', error="Max 300KB file size")
 
85
  file.seek(0)
86
 
87
+ # Save file
88
+ filename = f"{int(time.time())}.jpg"
89
  filepath = os.path.join(UPLOAD_FOLDER, filename)
90
  file.save(filepath)
91
 
92
+ # Process with OCR
93
  ocr = get_ocr()
94
+ result = ocr.ocr(filepath, cls=False)
95
+ text = ' '.join([word[1][0] for line in result[0] for word in line if len(word) >= 2])
 
 
96
 
97
+ # Cleanup
98
+ os.remove(filepath)
99
+ return render_template('index.html', text=text)
100
 
101
  except Exception as e:
102
  if os.path.exists(filepath):
103
  os.remove(filepath)
104
+ return render_template('index.html', error="OCR processing failed")
105
 
106
  return render_template('index.html')
107
 
 
 
 
 
108
  if __name__ == '__main__':
109
  port = int(os.environ.get('PORT', 5000))
110
  app.run(host='0.0.0.0', port=port, threaded=False)