Как сделать шаблон во Flask с изображением opencv без записи файла на диск? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь визуализировать шаблон фляги, не записывая изображение opencv на диск. Может быть, у кого-нибудь есть идеи, как это реализовать.

@app.route('/upload')
def upload_file():
   return render_template('upload.html')

@app.route('/uploader', methods = ['GET', 'POST'])
def uploaded_file():
    if request.method == 'POST':
    photo = request.files['file']
    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)
    frame,res=recogn(img)

    imencoded = cv2.imencode(".jpg", frame)[1]

    ###If i put there next line it will work(i can render template
    ###photo=file), but i don't want write image
    ###to disk
    ###cv2.imwrite('file.jpg',frame)

    return render_template('from_file.html', photo=imencoded)

    Template look like this 
    <h3><img src="{{ photo }}" width="50%"></h3>

1 Ответ

0 голосов
/ 02 апреля 2019

Вы можете закодировать в base64 буфер, это не красиво, но оно должно работать.

import base64

@app.route('/uploader', methods = ['GET', 'POST'])
def uploaded_file():
    if request.method == 'POST':
    photo = request.files['file']
    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)
    frame,res=recogn(img)

    imencoded = cv2.imencode(".jpg", frame)[1]

    jpg_as_text = base64.b64encode(imencoded)

    return render_template('from_file.html', photo=jpg_as_text)

Тогда ваш шаблон будет выглядеть примерно так:

<h3><img src="data:image/jpeg;charset=utf-8;base64, {{photo}}" width="50%"></h3>

Попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...