feat(ocr): make OCR functionality optional via configuration

The OCR feature can now be enabled or disabled using a new `OCR_ENABLED` configuration flag.

This allows for more flexible deployments where the OCR feature is not required, reducing the application's resource footprint and dependency overhead.

The backend now conditionally initializes the OCR engine and its associated route. The frontend UI for OCR uploads is also rendered conditionally based on this setting.
This commit is contained in:
Karl 2025-07-14 11:22:24 +01:00
parent 5a5692d8cc
commit bcab963b99
2 changed files with 24 additions and 19 deletions

41
app.py
View File

@ -26,7 +26,8 @@ else:
app.config.from_object(DevelopmentConfig)
cache = Cache(app, config={"CACHE_TYPE": "SimpleCache"})
ocr = PaddleOCR(use_angle_cls=True, lang='en') # Adjust language if needed
if app.config.get("OCR_ENABLED"):
ocr = PaddleOCR(use_angle_cls=True, lang='en') # Adjust language if needed
app.config["SESSION_COOKIE_SECURE"] = not app.config["DEBUG"]
app.config['SESSION_COOKIE_HTTPONLY'] = True # Prevent JavaScript access
@ -85,6 +86,7 @@ def home():
accounts=count,
current_month_accounts=current_month_accounts,
expired_accounts=expired_accounts,
ocr_enabled=app.config.get("OCR_ENABLED"),
)
return render_template("index.html")
@ -163,7 +165,7 @@ def add_account():
return redirect(url_for("user_accounts"))
return render_template("add_account.html")
return render_template("add_account.html")
return render_template("add_account.html", ocr_enabled=app.config.get("OCR_ENABLED"))
@app.route("/accounts/delete", methods=["POST"])
@ -187,23 +189,24 @@ def stream_names():
return jsonify(stream_names)
@app.route('/OCRupload', methods=['POST'])
def OCRupload():
if 'image' not in request.files:
return jsonify({"error": "No image file found"}), 400
# Get the uploaded file
file = request.files['image']
try:
image = Image.open(file.stream)
image_np = np.array(image)
result = ocr.ocr(image_np)
# Extract text
extracted_text = []
for line in result[0]:
extracted_text.append(line[1][0])
return render_template("add_account.html", username=extracted_text[2], password=extracted_text[3])
except Exception as e:
return jsonify({"error": str(e)}), 500
if app.config.get("OCR_ENABLED"):
@app.route('/OCRupload', methods=['POST'])
def OCRupload():
if 'image' not in request.files:
return jsonify({"error": "No image file found"}), 400
# Get the uploaded file
file = request.files['image']
try:
image = Image.open(file.stream)
image_np = np.array(image)
result = ocr.ocr(image_np)
# Extract text
extracted_text = []
for line in result[0]:
extracted_text.append(line[1][0])
return render_template("add_account.html", username=extracted_text[2], password=extracted_text[3])
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(debug=app.config["DEBUG"], host=app.config["HOST"], port=app.config["PORT"])

View File

@ -74,6 +74,7 @@
<span id="buttonText">Add Account</span>
</button>
</form>
{% if ocr_enabled %}
<hr>
<h2>Load Details Via OCR</h2>
<form action="/OCRupload" method="POST" enctype="multipart/form-data" onsubmit="showLoadingOCR()">
@ -86,6 +87,7 @@
<span id="ocrButtonText">Load Details</span>
</button>
</form>
{% endif %}
</main>
<footer class="bg-dark text-white text-center py-3 mt-5">