[PYTHON] Verwenden Sie ipywidgets in jupyter notebook, um Parameter interaktiv zu bearbeiten und anschließend die Bildverarbeitung zu versuchen

Es ist schön, das Funktionsdiagramm mit matplotlib auf einem Jupyter-Notebook zu zeichnen, aber es ist ärgerlich, den Wert zu ändern und jedes Mal, wenn Sie versuchen, einen Fehler zu machen, Strg + Eingabetaste zu drücken. Es ist üblich, Wertänderungen in Ergebnissen mit dem reaktiven (alten?) - ähnlichen Trend, der heutzutage beliebt ist, dynamisch widerspiegeln zu wollen. Als ich danach suchte, schien es, dass eine Bibliothek namens ipywidgets für das Jupiter-Notebook entwickelt wurde, also entschied ich mich, sie zu verwenden.

https://github.com/ipython/ipywidgets

Es scheint auch interaktives Verhalten durch UI-Komponenten wie sogenannte Schieberegler und Textfelder zu ermöglichen.

Umgebung

Ich habe es in der folgenden Umgebung versucht.

Vorbereitung

Erstellen Sie zunächst eine virtuelle Umgebung mit venv. Wenn Sie eine virtuelle Person oder eine Bash-Person sind, lesen Sie diese bitte entsprechend.

$ python3 -m venv ipywidgets_env
$ source ipywidgets_env/bin/activate.fish #Für Fische

Installation

Installieren Sie jupyter normal.

(ipywidgets_env) $ pip install jupyter

Bestätigen Sie leicht, dass ipywidgets als Abhängigkeit zusammengekommen sind. Wenn es nicht existiert, habe ich das Gefühl, dass ich es einfach mit "pip install" einfügen kann.

(ipywidgets_env) $ pip list | grep ipywidgets
ipywidgets (5.2.2)

Führen Sie außerdem den folgenden Befehl für jupyter aus, um die Zeichnungserweiterungsfunktion zu aktivieren.

(ipywidgets_env) $ jupyter nbextension enable --py widgetsnbextension --sys-prefix

Verhaltensprüfung

Jetzt, da die Umgebung zum Testen von ipywidgets bereit ist, werde ich es auf einem Jupyter-Notebook versuchen.

(ipywidgets_env) $ jupyter notebook

Erstellen Sie nach dem Start ein neues Notizbuch im geöffneten Browser und schreiben Sie eine Funktion, die das Berechnungsergebnis "a * x + b" in eine neue Zelle zurückgibt.

def f(x, a, b):
    return a * x + b

Um die Parameter in dieser Funktion mit der UI-Komponente des Schiebereglers zu bedienen, setzen Sie die obige Funktion "f" und den Wertebereich der Parameter "x", "a", "b" auf die Funktion "interagieren", wie unten gezeigt. Ich werde es dir geben.

from ipywidgets import interact
interact(f, x=(-10,10, 1), a=(-10,10, 1), b=(-10,10, 1))

Das Ausführungsergebnis im Browser lautet wie folgt.

スクリーンショット 2017-01-04 0.52.27.png

Auf dem Bildschirm erschien ein Schieberegler. Spielen Sie mit den Knöpfen herum.

スクリーンショット 2017-01-04 0.54.12.png

Anfangs war "x = 0, a = 0, b = 0" und das Ergebnis war "0". Wenn Sie jedoch "x = 10, a = 4, b = -10" setzen, wird dies sofort als "30" im Ergebnis wiedergegeben Wird angezeigt. Auf diese Weise konnten wir die dynamische Reflexion des Wertes durch ipywigdets bestätigen.

Reflektieren Sie das Ergebnis, während Sie die Binärisierungsschwelle des Bildes mit dem Schieberegler anpassen

Als kleine Anwendung möchte ich versuchen, die Binärisierungsschwelle, die eine Standardbildverarbeitung ist, im Ergebnis wiederzugeben, während ich sie selbst betreibe. Ich benutze mein eigenes Symbolbild.

my_github.jpeg

Vorerst werde ich Pillow verwenden, ein Bildverarbeitungswerkzeug in Python. Wenn Sie es bereits installiert haben, müssen Sie den folgenden Befehl nicht ausführen.

(ipywidgets_env) $ pip install Pillow

Importieren Sie zunächst Pillow und laden Sie das 255-Gradationsbild von Greske in die globale Variable "img".

from PIL import Image
img = Image.open('picture.jpeg').convert('L')

my_github_gray.png

@interact
def binarize(th: (0, 255, 1)):
    return img.point(lambda p: 255 if p > th else 0)

Sie können ipywidgets auch verwenden, indem Sie eine Funktion "binarize" definieren, die dynamisch von ipywidgets betrieben wird, eine Funktion erstellen, die das Bild nach der Binärisierung durch die Schwellenwertvariable "th" zurückgibt, und einen "interaktiven" Dekorator hinzufügen. können. Wenn Sie die obige Zelle ausführen,

スクリーンショット 2017-01-08 22.23.49.png スクリーンショット 2017-01-08 22.24.08.png

Auf diese Weise können Sie dynamisch binarisieren, während Sie den Schwellenwertregler auf dem Jupiter-Notebook bewegen.

Übrigens werde ich das Image Diff von GitHub ausprobieren

Jetzt, da ich weiß, wie man den Schieberegler verwendet, werde ich versuchen, die berühmte GitHub-Methode zur Bestätigung von Bildunterschieden nachzuahmen. Ich war mit Pillow nicht sehr vertraut und wusste nicht, wie ich die Sättigung eines Teilbilds anpassen sollte. Deshalb habe ich es vergeblich gemacht, das Bild darüber zu legen.

orig = Image.open('picture.jpeg')

@interact
def github_diff(percentage: (0, 100, 1)):
    orig_copied = orig.copy()
    box = (int(img.width / 100 * percentage), 0, img.width, img.height)
    img_cropped = img.crop(box)
    orig_copied.paste(img_cropped, box)
    return orig_copied

Nach dem Laden des Originalbilds in "orig" wird das Originalbild dynamisch auf der linken Seite angezeigt und das Gresque-Bild wird auf der rechten Seite basierend auf dem vom Schieberegler angegebenen Verhältnis gezeichnet. Einfügen scheint eine destruktive Methode zu sein, bei der für jede Wertänderung eine Kopie des Originalbilds erstellt wird. Ich würde gerne wissen, ob es einen besseren Weg gibt.

スクリーンショット 2017-01-09 14.14.56.png スクリーンショット 2017-01-09 14.15.11.png

Zusammenfassung

Das Jupyter-Notebook, das bereits zum Experimentieren und Verifizieren geeignet ist, wird noch einfacher zu bedienen sein!

Recommended Posts

Verwenden Sie ipywidgets in jupyter notebook, um Parameter interaktiv zu bearbeiten und anschließend die Bildverarbeitung zu versuchen
So verwenden Sie Jupyter Notebook
Verarbeitung zur Verwendung von notMNIST-Daten in Python (und versucht, sie zu klassifizieren)
Einfach zu bedienendes Jupyter-Notebook (Python3.5)
Ich wollte ein Jupyter-Notebook mit Docker in einer Pip-Umgebung (Opticspy) verwenden.
Geben Sie den Browser an, der mit Jupyter Notebook verwendet werden soll. Besonders Mac. (Und Vivaldi)
Verwenden Sie Jupyter Lab und Jupyter Notebook mit EC2
So führen Sie Befehle mit einem Jupyter-Notebook aus
Verwendung des Jupyter-Notebooks mit ABCI
Jupyter Notebook Grundlagen der Verwendung
Verwendung des Jupyter-Notebooks [super basic]
Verwendung ist und == in Python
Erstellen Sie eine PYNQ-Umgebung auf Ultra96 V2 und melden Sie sich bei Jupyter Notebook an
Verwendung der Python-Bildbibliothek in der Python3-Serie
Verwendung der PyTorch-basierten Bildverarbeitungsbibliothek "Kornia"
Jupyter Notebook-Einstellungen - Verwendung (EC2 Amazon Linux 2)
Speichern Sie .py- und .html-Dateien automatisch im Jupyter-Notizbuch.
Wie man Decorator in Django benutzt und wie man es macht
Es kann ein Problem sein, Japanisch für Ordnernamen und Notizbuchnamen in Databricks zu verwenden