Tesseract / app.py
DIVY118's picture
Upload app.py
e3407c4 verified
raw
history blame
No virus
1.57 kB
from flask import Flask, request, jsonify
import pytesseract
from pytesseract import Output
import difflib
from PIL import Image
app = Flask(__name__)
def find_text_coordinates(image_file, search_text):
image = Image.open(image_file)
d = pytesseract.image_to_data(image, output_type=Output.DICT)
n_boxes = len(d['level'])
result = []
for i in range(n_boxes):
(x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
if d["text"][i]:
result.append(((x, y, w, h), d["text"][i]))
arr_of_words = [i[1].lower() for i in result]
closest_match = difflib.get_close_matches(search_text, arr_of_words, n=1)
if closest_match:
for i in result:
if i[1].lower() == closest_match[0].lower():
return {"text": closest_match[0], "coordinates": {"x": i[0][0], "y": i[0][1], "width": i[0][2], "height": i[0][3]}}
return None
@app.route('/ocr', methods=['POST'])
def ocr():
if 'image' not in request.files:
return jsonify({"error": "No image file provided"}), 400
if 'text' not in request.form:
return jsonify({"error": "No text provided"}), 400
image_file = request.files['image']
search_text = request.form['text'].lower()
# Find text coordinates directly from memory
result = find_text_coordinates(image_file, search_text)
if result:
return jsonify(result)
else:
return jsonify({"error": "Text not found"}), 404
if __name__ == '__main__':
app.run()