-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
68 lines (53 loc) · 1.84 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import os
from flask import Flask, request, jsonify
import cv2
import numpy as np
from paddleocr import PaddleOCR
app = Flask(__name__)
# Initialize the OCR model outside the route to avoid loading it multiple times
ocr_model = PaddleOCR(lang='en')
@app.route('/')
def hello_world():
return 'Hello svima!'
@app.route('/1')
def hello_world1():
return 'Hello World1!'
@app.route('/greet', methods=['POST'])
def greet():
data = request.get_json()
name = data.get('name', 'Guest')
greeting = f'Hello, {name}!'
return jsonify({'message': greeting})
@app.route('/extract-text', methods=['POST'])
def extract_text_from_image():
if 'file' not in request.files:
return jsonify({'error': 'no file provided'}), 400
file = request.files['file']
# Convert the uploaded file to a numpy array
nparr = np.fromstring(file.read(), np.uint8)
image = cv2.imdecode(nparr, cv2.IMREAD_UNCHANGED)
# Use tempfile to create a temporary image file
# This step is required as PaddleOCR's `ocr` method expects a file path
import tempfile
temp_filepath = tempfile.mktemp(suffix=".png")
cv2.imwrite(temp_filepath, image)
# Process the image using PaddleOCR
result = ocr_model.ocr(temp_filepath)
print(result)
text_results = []
for item in result:
for line in item:
# Extract the text part from the line
text_part = line[1][0]
if isinstance(text_part, str):
text_results.append(text_part)
elif isinstance(text_part, list):
# Join the list into a single string
text_results.append(' '.join(text_part))
full_text = ' '.join(text_results)
print(full_text)
# Clean up the temporary file
os.remove(temp_filepath)
return jsonify({'text': full_text})
if __name__ == '__main__':
app.run()