Cette fois, nous allons créer une application de reconnaissance d'image qui utilise Vue.js pour le front-end et Flask pour le back-end. Pour le moment, nous implémentons cette fois la fonction de téléchargement d'images.
L'environnement a été construit dans l'environnement ci-dessus. Consultez les liens ci-dessous pour obtenir des instructions et des détails.
Vue Le code suivant explique les détails.
Home.vue
//Télécharger l'image sur le serveur
onUploadImage () {
var params = new FormData()
params.append('image', this.uploadedImage)
//Les données de conversion FormData sont publiées dans Flask à l'aide d'Axios.
axios.post(`${API_URL}/classification`, params).then(function (response) {
console.log(response)
})
Flask
Le code suivant explique les détails.
app.py
@app.route('/classification', methods=['POST'])
def uploadImage():
if request.method == 'POST':
base64_png = request.form['image']
code = base64.b64decode(base64_png.split(',')[1])
image_decoded = Image.open(BytesIO(code))
image_decoded.save(Path(app.config['UPLOAD_FOLDER']) / 'image.png')
return make_response(jsonify({'result': 'success'}))
else:
return make_response(jsonify({'result': 'invalid method'}), 400)
Vue
Home.vue
<template>
<div>
<div class="imgContent">
<div class="imagePreview">
<img :src="uploadedImage" style="width:100%;" />
</div>
<input type="file" class="file_input" name="photo" @change="onFileChange" accept="image/*" />
<button @click='onUploadImage'>Veuillez juger l'image ...</button>
</div>
</div>
</template>
<script>
import axios from 'axios'
const API_URL = 'http://127.0.0.1:5000'
export default {
data () {
return {
uploadedImage: ''
}
},
methods: {
//Refléter l'image sélectionnée
onFileChange (e) {
let files = e.target.files || e.dataTransfer.files
this.createImage(files[0])
},
//Afficher les images téléchargées
createImage (file) {
let reader = new FileReader()
reader.onload = (e) => {
this.uploadedImage = e.target.result
}
reader.readAsDataURL(file)
},
//Télécharger l'image sur le serveur
onUploadImage () {
var params = new FormData()
params.append('image', this.uploadedImage)
//Les données de conversion FormData sont publiées dans Flask à l'aide d'Axios.
axios.post(`${API_URL}/classification`, params).then(function (response) {
console.log(response)
})
}
}
}
</script>
Flask
--CORS permet aux ressources d'être partagées par différentes origines (protocoles, domaines, ports). --CORS est requis si vous avez différentes applications Web.
app.py
# render_modèle: spécifiez le modèle auquel faire référence
#jsonify: sortie json
from flask import Flask, render_template, jsonify, request, make_response
#CORS: bibliothèque pour la communication Ajax
from flask_restful import Api, Resource
from flask_cors import CORS
from random import *
from PIL import Image
from pathlib import Path
from io import BytesIO
import base64
# static_dossier: spécifiez le chemin du fichier statique créé avec vue
# template_dossier: index construit avec vue.Spécifiez le chemin html
app = Flask(__name__, static_folder = "./../frontend/dist/static", template_folder="./../frontend/dist")
#Japonais
app.config['JSON_AS_ASCII'] = False
#CORS=Conditions de communication sécurisée avec Ajax
api = Api(app)
CORS(app)
UPLOAD_FOLDER = './uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
#Index quand une demande est reçue.Voir html
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def index(path):
return render_template("index.html")
@app.route('/classification', methods=['POST'])
def uploadImage():
if request.method == 'POST':
base64_png = request.form['image']
code = base64.b64decode(base64_png.split(',')[1])
image_decoded = Image.open(BytesIO(code))
image_decoded.save(Path(app.config['UPLOAD_FOLDER']) / 'image.png')
return make_response(jsonify({'result': 'success'}))
else:
return make_response(jsonify({'result': 'invalid method'}), 400)
# app.run(host, port): Démarrez le serveur flask en spécifiant l'hôte et le port
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Comme ça
https://developer.mozilla.org/ja/docs/Web/HTTP/CORS Image POST, détection de visage, dessiner sur le visage avec une toile
Recommended Posts