[PYTHON] Convertir une image au format PIL lue depuis un formulaire avec Django au format base64

introduction

Comme il ne s'agit que d'un mémo, j'omettrai les paramètres détaillés de Django. Le projet est image_pred et le nom de l'application est myapp. Les paramètres ne sont que basiques, comme dans la première partie de la page officielle.

programme

Depuis index.html, envoyez l'image à l'aide du formulaire.

index.html


{% load static %}
<!doctype html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>title</title>
</head>
<body>
   <div id = "input_form">
      <form action="{% url 'index' %}" method="POST" enctype="multipart/form-data">
         {% csrf_token %}
         {{ form }}
         <input type="submit" value="Envoyer" />
      </form>
   </div>
   <!--<div id = "prevent"><img src="{{question_id}}"></div>-->
   <div id = "predict">{{urls}}</div>
</body>
</html>

forms.py


from django import forms

class PhotoForm(forms.Form):
    image = forms.ImageField(label='Veuillez sélectionner une image')

views.py


from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import PhotoForm

class MyappView(TemplateView):
    def __init__(self):
        self.params={'form': PhotoForm()}
        
    def get(self, req):
        return render(req, 'index.html', self.params)

    def post(self, req):
        form = PhotoForm(req.POST, req.FILES)
        if not form.is_valid():
            raise ValueError('invalid form')

        image = form.cleaned_data['image']
        self.url_get(req, image)
        return render(req, 'index.html', self.params)

    def url_get(self, req, url):
        from PIL import Image
        import base64
        import io
        from io import BytesIO

        img = Image.open(url)
        with io.BytesIO() as output:
            img.save(output,format="JPEG")
            contents = output.getvalue()
            data = base64.b64encode(contents)
            #print('data:image/jpeg;base64,' + str(data)[2:-1])
            self.params['urls'] = 'data:image/jpeg;base64,' + str(data)[2:-1]

résultat

Ceci est la première image. Sélectionnez le fichier et cliquez sur Reconnaître. キャプチャ.PNG

Je pense qu'un tel résultat sera affiché, vous pouvez donc afficher l'image en fonction de cela. キャプチャ3.PNG

Les références

Étant donné que la création du projet, etc. repose sur ce matériel, de nombreuses parties du programme sont identiques. https://trafalbad.hatenadiary.jp/entry/2018/09/11/105500

Recommended Posts

Convertir une image au format PIL lue depuis un formulaire avec Django au format base64
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Convertir l'espace colorimétrique RVB en CIELAB avec PIL (Pillow)
Convertir des images en sépia avec PIL (Python Imaging Library)
Comment convertir facilement le format de Markdown
Convertir de PDF en CSV avec pdfplumber
Impossible de télécharger plusieurs images à partir du formulaire avec FastAPI
Convertir une chaîne au format de liste caractère par caractère avec python
Convertissez instantanément le modèle en dictionnaire avec Django et initialisez Form à une vitesse explosive
Les images créées avec matplotlib passent de dvi à pdf
Convertir 202003 en 2020-03 avec les pandas
Convertir la requête Select obtenue de Postgre avec Go en JSON
Script Linux pour convertir les fichiers Markdown du format JupyterLab au format Qiita
Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF
[Caffe] Convertit le fichier moyen du format proto binaire au format npy
[Django] Redirection vers la page précédente après avoir soumis le formulaire POST
Combinez deux images avec Django
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Convertir .ipynb en .html (avec BatchFile)
[Django] Comment tester le formulaire [TDD]
Standardiser le HTML à louer avec Django
Convertir la liste en DataFrame avec python
Convertir des phrases en vecteurs avec gensim
Comment démarrer avec Django
Publier une image de Python sur Tumblr
Comment convertir .mgz en .nii.gz
Convertir un PDF en image avec ImageMagick
Charger fbx depuis python avec cinema4d
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Prétraitement avec Python. Convertir les résultats de recherche de balises de la vidéo Nico Nico au format CSV