[PYTHON] Erstellen Sie eine Webseite, auf der ein Modell ausgeführt wird, das die Auflösung des Bilds mithilfe von Gradio erhöht, wodurch das Erstellen eines Webbildschirms vereinfacht wird

Überblick

Um die Leistung des Modells nach dem Erstellen des Modells durch Deep Learning usw. effektiv als Demo darzustellen, ist es für viele Personen (insbesondere Nicht-Ingenieure) vertrauter und vorzuziehen, es in der GUI anzuzeigen, anstatt es in der CUI auszuführen. Es ist jedoch schwierig, bei jeder Demo einen GUI-Bildschirm zu erstellen, der dem Modell entspricht, und die meisten Entwickler haben es satt, das Modell zu lernen und die Parameter anzupassen. Daher besteht immer noch die Motivation, die GUI zu implementieren. Nicht (← Es ist auf persönliche Erfahrung zurückzuführen und ich gebe zu, dass ich nicht einverstanden bin).

Zu dieser Zeit habe ich etwas namens Gradio gefunden, das eine einfache Web-GUI mit einem Minimum an Codierung erstellen kann, also habe ich es tatsächlich versucht.

Dieses Mal werden wir eine Methode zur Ausführung von ESRGAN entwickeln, einer GAN-Methode zur vierfachen Vergrößerung der Auflösung von auf Tensorhub veröffentlichten Bildern über eine Web-GUI.

Der erstellte Webbildschirm sieht folgendermaßen aus.

スクリーンショット 2020-11-23 18.18.08.png

Ausführungsumgebung

Diejenigen, die sofort loslegen wollen

Greifen Sie nach Ausführung des folgenden Befehls auf http://127.0.0.1:7860/ zu.

git clone https://github.com/sey323/gradio-esrgan.git
cd gradio-esrgan
pip install -r requirements.txt
python gradio-esrgan.py

Implementierung

0. Gesamtbild

Übersicht über den Quellcode
import gradio as gr
import tensorflow as tf
import tensorflow_hub as hub

model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")


def predict(
    inp,
):
    """
Verwenden Sie ESRGAN, um das Eingabebild in eine 4-fache Auflösung zu konvertieren.
    https://tfhub.dev/captain-pool/esrgan-tf2/1
    inp :
Bild eingeben
    """
    h, w, c = inp.shape  #Bildgröße aus Eingabebild abrufen
    inp = inp.reshape((-1, h, w, c))
    inp = tf.cast(inp, tf.float32)
    output = model(inp)
    output = tf.cast(tf.clip_by_value(output[0], 0, 255), tf.uint8)
    return output


def gradio_gui():
    """
Definieren Sie den Gui-Bildschirm für Gradio
    """
    image = gr.inputs.Image(label="Input Image",)
    output = gr.outputs.Image(label="Output Image", type="numpy")

    interface = gr.Interface(fn=predict, inputs=image, outputs=output)
    interface.launch()


if __name__ == "__main__":
    gradio_gui()

1. Installation der Tensorflow-Nabe, Gradio

Installation der Tensorflow-Nabe

Installieren Sie den Tensorflow-Hub unter Offizielle Website.

pip install "tensorflow>=2.0.0"
pip install --upgrade tensorflow-hub

Installieren Sie gradio

Installieren Sie unter Bezugnahme auf Offizielle Website.

pip install gradio

2. Verwenden Sie das Tensorflow-Hub-Modell

Laden Sie unter Bezugnahme auf die offizielle Website von TensorFlow Hub das ESRGAN-Modell herunter, das das diesmal verwendete Bild mit niedriger Auflösung in hochauflösendes konvertiert, und erstellen Sie ein zu verwendendes Programm. Ich habe eine Methode erstellt, die das Eingabebild in ein Format konvertiert, das von Tensorflow gelernt werden kann, und ein hochauflösendes Bild zurückgibt, damit es von Gradio ausgeführt werden kann.

import tensorflow as tf
import tensorflow_hub as hub

model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")


def predict(
    inp,
):
    """
Verwenden Sie ESRGAN, um das Eingabebild in eine 4-fache Auflösung zu konvertieren.
    https://tfhub.dev/captain-pool/esrgan-tf2/1
    inp :
Bild eingeben
    """
    h, w, c = inp.shape  #Bildgröße aus Eingabebild abrufen
    inp = inp.reshape((-1, h, w, c))
    inp = tf.cast(inp, tf.float32)
    output = model(inp)
    output = tf.cast(tf.clip_by_value(output[0], 0, 255), tf.uint8)
    return output

3. Definition des Webbildschirms mit gradio

gradio ist grob in drei klassen unterteilt.

Klasse Überblick
gr.inputs Eingabe für das Modell(Image, Textbox,Audio etc.)
gr.outputs Modellausgabe(Image, Textbox,Audio etc.)
gr.Interface Definieren Sie Funktionen, Eingaben und Ausgaben, die von Gradio ausgeführt werden sollen, und zeichnen Sie einen Webbildschirm.

Neben Bildern können Sie auch Text, Audio, Kontrollkästchen, Schieberegler usw. für Ein- und Ausgänge auswählen, um flexibel auf das von Ihnen verwendete Modell zu reagieren. ESRGAN verwendet dieses Mal nur Bild für Eingabe und Ausgabe. Wählen Sie daher Bild. Bild wird in Form von "Kissen" übergeben.

Gradio | Docs

python


import gradio as gr

~~~~Kürzung~~~~~

def gradio_gui():
    """
Definieren Sie den Gui-Bildschirm für Gradio
    """
    image = gr.inputs.Image(label="Input Image",)
    output = gr.outputs.Image(label="Output Image", type="numpy")

    interface = gr.Interface(fn=predict, inputs=image, outputs=output)
    interface.launch()


if __name__ == "__main__":
    gradio_gui()

Funktionsprüfung

Nachdem Sie das obige Programm gesteuert haben, führen Sie es mit dem folgenden Befehl aus.

python


$ python gradio-esrgan.py 
2020-11-23 01:39:34.566267: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f9d83e7e520 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-11-23 01:39:34.566291: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Running locally at: http://127.0.0.1:7860/
To get a public link for a hosted model, set Share=True
Interface loading below...
<IPython.lib.display.IFrame object at 0x147170040>

Die URL wird nach der Ausführung angezeigt. Greifen Sie also darauf zu.

gradio2.png

Wenn Sie auf den Webbildschirm zugreifen, wird der obige Bildschirm angezeigt. Das linke Feld zeigt das in "gr.inputs" angegebene Eingabeelement, und die Ausgabe zeigt das in "gr.outputs" angegebene Ausgabeelement.

スクリーンショット 2020-11-23 18.18.08.png

Versuchen Sie, das Bild von Mandrill zu vergrößern. Das einzugebende Bild kann per Drag & Drop in den Eingabebereich gezogen werden. Nach einigen Sekunden Wartezeit wird das verarbeitete Bild im Bereich "OUTPUT IMAGE" angezeigt. Laden Sie das Bild mit der rechten Maustaste herunter, indem Sie es speichern und mit dem vergrößerten Bild vergleichen.

result.png

Das Bild links wird vom Finder auf die gleiche Größe vergrößert, und das Bild rechts wird generiert. Es kann bestätigt werden, dass die Felllinien und Konturlinien in der durch ESRGAN vergrößerten Linie viel schärfer ausgedrückt werden.

Am Ende

Mit Gradio konnte ich einen Webbildschirm erstellen, auf dem ich problemlos ein mit Tensorflow erstelltes Modell veröffentlichen kann. Sie müssen nur die drei Module beschreiben, um den Webbildschirm zu definieren. Sobald Sie sich daran gewöhnt haben, können Sie in weniger als 10 Minuten eine Webseite erstellen.

GradioHub bietet eine Vielzahl weiterer interessanter Beispiele. Sehen Sie hier, was passiert, wenn Sie andere Texte und Audiodateien verwenden.

Gradio | Hub

Recommended Posts

Erstellen Sie eine Webseite, auf der ein Modell ausgeführt wird, das die Auflösung des Bilds mithilfe von Gradio erhöht, wodurch das Erstellen eines Webbildschirms vereinfacht wird
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
[Python] Ich habe einen Test von "Streamlit" geschrieben, der das Erstellen von Visualisierungsanwendungen erleichtert.
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Eine Geschichte, die das Debuggen von Modellen in der Django + SQLAlchemy-Umgebung einfacher macht
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
[Los] Erstellen Sie einen CLI-Befehl, um die Erweiterung des Bildes zu ändern
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Erstellen Sie eine Web-App, die PDF mit Flask und PyPDF2 in Text konvertiert
[AWS Lambda] Erstellen Sie ein Bereitstellungspaket mit dem Amazon Linux Docker-Image
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
Ich habe ein Tool erstellt, mit dem das Erstellen und Installieren eines öffentlichen Schlüssels etwas einfacher ist.
Schritte zum Erstellen eines Jobs, der ein Docker-Image abruft und mit Github-Aktionen testet
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen