[PYTHON] Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ③

1. Zuallererst

Letztes Mal Ich habe sogar ein Lernmodell erstellt.

Dieses Mal erstellen wir mithilfe des Lernmodells eine tatsächliche Webanwendung und stellen sie sogar bereit.

Das fertige Bild sieht so aus スクリーンショット 2020-08-04 21.01.56.png

2. Erstellt mit Flask

main.py


#Modul importieren
import cv2
import os
from flask import Flask, request, redirect, url_for, render_template, flash
from werkzeug.utils import secure_filename
from keras.models import Sequential, load_model
from keras.preprocessing import image
from PIL import Image
import tensorflow as tf
import numpy as np
from datetime import datetime
import face_recognition

#Spielername
classes = ['Hinako Shibuno', 'Kleine Feier Sakura', 'Erika Hara']
num_classes = len(classes)
image_size = 64

#Datei zum Speichern des hochgeladenen Bildes
UPLOAD_FOLDER = "uploads/"
#Geben Sie die Erweiterung an, die das Hochladen ermöglicht
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])

#Richten Sie eine Instanz der Flask-Klasse ein
app = Flask(__name__)

#Definieren Sie eine Funktion zum Überprüfen der Erweiterung hochgeladener Dateien
def allowed_file(filename):
    #Erste Bedingung: in der Variablen Dateiname'.'Enthält es die Zeichen?
    #Zweite Bedingung: variabler Dateiname.Die nachfolgende Zeichenfolge ist ERLAUBT_Welche der ERWEITERUNGEN ist anwendbar?
    #In rsplit ist die Reihenfolge des Trennzeichens "1" ab dem Ende der Zeichenfolge. niedriger konvertiert Zeichenfolgen in niedrigere
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS


#Gesicht erkennen(haarcascade)
def detect_face(img_path):
    image = face_recognition.load_image_file(img_path)
    faces = face_recognition.face_locations(image)
    if len(faces)>0:
        face_max = [(abs(faces[i][0]-faces[i][2])) * (abs(faces[i][1]-faces[i][3])) for i in range(len(faces))]
        top, right, bottom, left = faces[face_max.index(max(face_max))]#Es gibt kein Problem, da nur eine Person angezeigt wird
        faceImage = image[top:bottom, left:right]
        final = Image.fromarray(faceImage)

        final = np.asarray(final.resize((image_size,image_size)))
        final = Image.fromarray(final)

        basename = datetime.now().strftime("%Y%m%d-%H%M%S")
        filepath = UPLOAD_FOLDER + basename+".png "
        final.save(filepath)

        return final
    else:
        return "Bitte geben Sie ein Gesichtsbild ein"

#Laden Sie das trainierte Modell
model = load_model('./golfer.h5', compile=False)

graph = tf.get_default_graph()

# app.route()Verknüpfen Sie die in der Funktion angegebene URL mit./ http://127.0.0.1:5000/Geben Sie die folgende URL an
@app.route('/', methods=['GET', 'POST'])
def upload_file():
    global graph
    # as_default()Geben Sie das Zieldiagramm mit an
    with graph.as_default():
        #Wenn die HTTP-Methode POST ist
        if request.method == 'POST':
            #Enthält die POST-Anforderung Dateidaten?
            if 'file' not in request.files:
                flash('Keine Datei')
                #Redirect ist eine Funktion, die zur Argument-URL umleitet
                return redirect(request.url)
            file = request.files['file']
            if file.filename == '':
                flash('Keine Datei')
                return redirect(request.url)
            
            #Wenn die Datei in einem zulässigen Format vorliegt
            if file and allowed_file(file.filename):
                #Wenn der Dateiname eine gefährliche Zeichenfolge enthält, deaktivieren Sie diese.
                filename = secure_filename(file.filename)
                #Im Upload-Ordner speichern
                file.save(os.path.join(UPLOAD_FOLDER, filename))
                #Erstellen Sie einen Dateipfad
                filepath = os.path.join(UPLOAD_FOLDER, filename)
                
                # #Lesen Sie das empfangene Bild und konvertieren Sie es in das np-Format
                img = image.load_img(filepath, grayscale=False, target_size=(image_size,image_size))
                #Erkennen Sie das Gesichtsteil
                img = detect_face(filepath)

                if type(img)!=str:
                    img = image.img_to_array(img)
                    data = np.array([img])
                    #Übergeben Sie die transformierten Daten zur Vorhersage an das Modell
                    result = model.predict(data)[0]
                    predicted = result.argmax()
                    pred_answer = "Diese weibliche Fachkraft" + str(classes[predicted]) + "ist"

                    return render_template("index.html",answer=pred_answer)
                else:
                    return render_template("index.html",answer=img)


        return render_template("index.html",answer="")

#Lösen Sie das Problem, dass CSS bei der Entwicklung von Webanwendungen mit Flask nicht berücksichtigt wird
@app.context_processor
def override_url_for():
    return dict(url_for=dated_url_for)

def dated_url_for(endpoint, **values):
    if endpoint == 'static':
        filename = values.get('filename', None)
        if filename:
            file_path = os.path.join(app.root_path,
                                 endpoint, filename)
            values['q'] = int(os.stat(file_path).st_mtime)
    return url_for(endpoint, **values)


if __name__ == "__main__":
    port = int(os.environ.get('PORT', 8080))
    app.run(host ='0.0.0.0',port = port)

3. index.html und Stylesheet

index.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Professionelles Golferurteil</title>
    <!-- <link rel="stylesheet" href="./static/stylesheet.css"> -->
    <link rel= "stylesheet" type= "text/css" 
            href= "{{ url_for('static',filename='stylesheet.css') }}">
</head>
<body>
    <header>   
        <a class="header-logo" href="#">Professionelles Golferurteil</a>
    </header>

    <div class="main">    
        <h2>Identifiziert das Gesicht im Bild</h2>
        <p>Bitte senden Sie das Bild</p>
        <form method="POST" enctype="multipart/form-data">
            <input class="file_choose" type="file" name="file">
            <input class="btn" value="submit!" type="submit">
        </form>
        <div class="answer">{{answer}}</div>
    </div>

    <footer>
    </footer>
</body>
</html>

stylesheet.css


header {
    background-color: rgb(100, 81, 255);
    height: 100px;
    margin: -8px;
    display: flex;
    flex-direction: row-reverse;
    justify-content: space-between;
}

.header-logo {
    color: #fff;
    font-size: 30px;
    margin: auto;
}

.header_img {
    height: 25px;
    margin: 15px 25px;
}

.main {
    height: 370px;
}

h2 {
    color: #444444;
    margin: 90px 0px;
    text-align: center;
}

p {
    color: #444444;
    margin: 70px 0px 30px 0px;
    text-align: center;
}

.answer {
    margin: 70px 0px 30px 0px;
    text-align: center;
    font-size: 30px;
    color: blue;
    font-weight: bold;
}

form {
    text-align: center;
}

h2 {
    color: #444444;
    text-align: center;
}

footer {
    background-color: #F7F7F7;
    height: 110px;
    margin: -8px;
    position: relative;
}

.footer_img {
    height: 25px;
    margin: 15px 25px;
}

small {
    margin: 15px 25px;
    position: absolute;
    left: 0;
    bottom: 0;
}

4. Dateistruktur

Die Struktur der Datei ist wie folgt スクリーンショット 2020-08-04 21.38.29.png

Index.html im Vorlagenordner stylesheet.css im statischen Ordner

Die restlichen Dateien finden Sie in diesem Artikel [Vollständige Version] Verfahren zum Bereitstellen der mit Flask erstellten API für Heroku (Hinweis)

5. Auf Heroku bereitstellen

5-1. Registrieren Sie sich als Mitglied von Heroku

Heroku Registrieren Sie sich hier

5-2. Melden Sie sich bei Heroku an

$ heroku login

5-3. Einstellungen

Neue App erstellen ⇨ Geben Sie den App-Namen ein, um Ihr Land in den USA zu registrieren. Gehen Sie zur App-Seite, gehen Sie zu Setteings und klicken Sie auf Build Pack hinzufügen, um Python hinzuzufügen.

5-4 Führen Sie Folgendes vom Terminal aus aus

git init

__ * Nur beim ersten Mal. Wenn Sie dies zweimal tun, können Sie die Bereitstellung nicht erfolgreich durchführen. __ __

heroku git:remote -a (App Name)
git add .
git commit -m “(Schreiben Sie eine Nachricht darüber, was sich geändert hat)”
git push heroku master

__ Die Bereitstellung ist abgeschlossen __

6. Überprüfen Sie die Web-App

Überprüfen Sie mit dem Code unten

heroku open

Damit sind die 3 Postings der Bild-App abgeschlossen.

Recommended Posts

Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ③
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe einen Ersatz2-Algorithmus für uWSGI billiger gemacht
Ich habe ein nützliches Tool für Digital Ocean erstellt
Ich habe einen Downloader für wortverteilte Ausdrücke erstellt
Wir haben ein Peeping-Prevention-Produkt für die Telearbeit entwickelt.
Lassen Sie uns Chat-Benutzerverwaltungstool gemacht
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich habe ein Reinigungstool für Google Container Registry erstellt
[Valentine Spezialprojekt] Ich habe eine LINE-Kompatibilitätsdiagnose gestellt!
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
[VSCode] Ich habe ein Benutzer-Snippet für Python-Druck-F-String erstellt
Ich habe ein Numer0n-Kampfspiel in Java gemacht (ich habe auch KI gemacht)
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
Ich habe einen Python-Text gemacht
Befehl für FizzBuzz erstellt
Ich habe einen Zwietrachtbot gemacht
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Erstelltes WebSocket Client / Server-CLI-Tool (wie WebSocket Version Netcat)
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Ich habe mit TensorFlow - (1) Introduction einen Dir en grey face-Klassifikator erstellt
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe mit der TensorFlow-④-Gesichtsextraktion einen Dir en grey-Gesichtsklassifikator erstellt
Ich habe eine Python-Wrapper-Bibliothek für die Docomo-Bilderkennungs-API erstellt.
Ich habe eine C ++ - Lernseite erstellt
Ich berührte PyAutoIt für einen Moment
Ich habe einen Line-Bot mit Python gemacht!
Ich habe ein CUI-basiertes Übersetzungsskript erstellt (2)
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
[Ver1.3.1 Update] Ich habe DataLiner erstellt, eine Datenvorverarbeitungsbibliothek für maschinelles Lernen.
Ich habe mit dem TensorFlow --⑩ Gesichtsklassifizierungstest einen Dir-Grau-Gesichtsklassifikator erstellt
Ich habe mit dem Lernprogramm TensorFlow --⑥ einen Dir en grey face-Klassifikator erstellt
Ich habe mit TensorFlow - Dir Playing (final) einen Dir en grey face-Klassifikator erstellt.
Ich habe eine KI-Übung gemacht. Bitte verwenden Sie es für Ihre Sommerferien Hausaufgaben.
Ich habe mit TensorFlow --⑧ Learning Execution einen Dir en Grey Face Classifier erstellt
Ich habe mit TensorFlow --⑫ Web Release einen Dir en Grey Face Classifier erstellt
Ich habe mit dem TensorFlow --⑦ Lernmodell einen Dir en grey Gesichtsklassifikator erstellt
Ich habe mit der TensorFlow --② - Umgebungskonstruktion einen Dir en grey face-Klassifikator erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich berührte "Orator" und machte mir eine Notiz
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe einen Gesprächspartner wie Siri gemacht
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Hex-Map erstellt
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe einen Hanko-Generator mit GAN gemacht
Ich habe ein automatisches Stempelwerkzeug für den Browser erstellt.
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Erstellen einer Python-Entwicklungsumgebung für die KI-Entwicklung
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht