Skip to content

Instantly share code, notes, and snippets.

@mjul
Created July 2, 2014 19:27
Show Gist options
  • Save mjul/32d697b734e7e9171cdb to your computer and use it in GitHub Desktop.
Save mjul/32d697b734e7e9171cdb to your computer and use it in GitHub Desktop.
Decode Python (Flask or Werkzeug) photo file uploaded via HTTP POST request in-memory to an OpenCV matrix.
#
# Example from code built on the Flask web framework (and Werkzeug)
# Accepts uploading a photo file in the 'photo' form member, then
# copies it into a memory byte array and converts it to a numpy array
# which in turn can be decoded by OpenCV.
#
# Beware that this increases the memory pressure and you should
# configure a max request size before doing so.
#
# It saves a round-trip to a temporary file, though.
import flask
from flask import render_template, json, jsonify, request
import numpy as np
import cv2
# ...
# Remember to set a max content length
app = flask.Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB
# ...
# Here is the code to convert the post request to an OpenCV object
if request.method == 'POST' and 'photo' in request.files:
photo = request.files['photo']
in_memory_file = io.BytesIO()
photo.save(in_memory_file)
data = np.fromstring(in_memory_file.getvalue(), dtype=np.uint8)
color_image_flag = 1
img = cv2.imdecode(data, color_image_flag)
<form method="POST" enctype="multipart/form-data" action="/TARGET/URL/FOR/UPLOAD">
<input type="file" name="photo" />
<input type="submit" />
</form>
@bollakarthikeya
Copy link

This is really helpful. Thanks for the snippet!

@BmMnInception
Copy link

Thanks you.

Copy link

ghost commented Nov 8, 2022

Not working

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment