Python Programm um Bilder zu finden & darzustellen

Du hast eine Idee für ein Projekt?
Antworten
okapirider
User
Beiträge: 8
Registriert: Samstag 9. Januar 2021, 14:27

Hallo zusammen!

Ich bin absoluter Python-Neuling und bin ob der Komplexität der Möglichkeiten ein bisschen überwältigt, daher wende ich mich nach tagelanger Internet-Recherche mit meinem Anliegen an euch.

Folgende Konstellation: Ich habe einen Ordner mit ca. 3.000 Bildern. Ich würde gerne ein Programm basteln inkl. Gui basteln, das mir per Eingabe in eine Suchmaske erlaubt ein bestimmtes Bild ausfindig zu machen und mir innerhalb des Programms zu zeigen.

Meine Fragen dazu:
Gibt es so etwas vielleicht, so dass ich es ggf. gar nicht selbst programmieren muss?
Ist es grundsätzlich möglich so etwas in Python zu machen?
Habt ihr gute Tipps, wo ich anfangen kann mich der Lösung zu nähern (d.h. kennt ihr irgendwelche Ressourcen wie ggf. genau das beschrieben ist?)

Für eure Antworten bin ich sehr dankbar!
Okapi
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die entscheidende Frage hier ist: nach welchen Kriterien sollen denn die Bilder aufgefunden werden? Sind die irgendwie Verschlagwortet in ihren EXIF-Informationen? Oder willst du aus den Bildddaten selbst etwas ermitteln?

Und grundsaetztlich gibt es bestimmt schon fertige Dinge da draussen - eine kurze Recherche zB ergibt https://www.heise.de/download/products/ ... verwaltung
okapirider
User
Beiträge: 8
Registriert: Samstag 9. Januar 2021, 14:27

Hey deets!

Danke für die Antwort.

Das einzige Kriterium soll der Bildername sein. Stell dir z.B. vor, dass ich Bilder von verschiedenen Personen in meinem Ordner habe, die Bilder von z.B. Markus heißen alle Markus001.jpg bis Markus100.jpg und ich möchte in ein Suchfeld über die Eingabe "Markus001" genau das Markus001.jpg im Programm angezeigt wird! Es soll also eine relativ simple (?) Eingabemaske existieren aber anders als z.B. bei der Windows-Suche will ich nicht nochmal auf Markus001.jpg klicken müssen, um es im Windows Foto Viewer angezeigt zu bekommen, sondern direkt in der Maske des Programms. Eine entsprechende Software habe ich auf meiner Suche leider nicht gefunden, so dass ich mir das gerne maßschneidern würde!

Viele Grüße!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Aaaaalso... gehen tut das natuerlich. Ich wuerde eher zu tkinter statt pygame raten, aus Gruenden: es ist schon dabei, und hat vorgefertigte UI-Elemente wie Eingabeboxen und kann auch Fotos darstellen.

Aber: eine GUI als erstes Projekt ist ein anspruchsvolles Projekt. Da wirst du eine Menge Sitzfleisch und Lernbereitschaft zeigen muessen - ob's das wert ist, kannst du nur selbst beurteilen. Ggf. gaebe es zwischenschritte, bei denen du dir ein simples Skript schreibst, dass den Dateinamen wiederum in die EXIF-Infos packt, und dann kannst du das mit traditionellen Bildbetrachtern filtern.
okapirider
User
Beiträge: 8
Registriert: Samstag 9. Januar 2021, 14:27

Hey deets!

Ich dachte mir schon, dass das wahrscheinlich sehr aufwändig ist und würde selbstverständlich eine fertige Lösung bevorzugen. Ich habe eben nochmal an meinen Google-Skills gearbeitet und z.B. folgendes gefunden:

Code: Alles auswählen

# img_viewer.py

import PySimpleGUI as sg
import os.path

# First the window layout in 2 columns

file_list_column = [
    [
        sg.Text("Image Folder"),
        sg.In(size=(25, 1), enable_events=True, key="-FOLDER-"),
        sg.FolderBrowse(),
    ],
    [
        sg.Listbox(
            values=[], enable_events=True, size=(40, 20), key="-FILE LIST-"
        )
    ],
]

# For now will only show the name of the file that was chosen
image_viewer_column = [
    [sg.Text("Choose an image from list on left:")],
    [sg.Text(size=(40, 1), key="-TOUT-")],
    [sg.Image(key="-IMAGE-")],
]

# ----- Full layout -----
layout = [
    [
        sg.Column(file_list_column),
        sg.VSeperator(),
        sg.Column(image_viewer_column),
    ]
]

window = sg.Window("Image Viewer", layout)

# Run the Event Loop
while True:
    event, values = window.read()
    if event == "Exit" or event == sg.WIN_CLOSED:
        break
    # Folder name was filled in, make a list of files in the folder
    if event == "-FOLDER-":
        folder = values["-FOLDER-"]
        try:
            # Get list of files in folder
            file_list = os.listdir(folder)
        except:
            file_list = []

        fnames = [
            f
            for f in file_list
            if os.path.isfile(os.path.join(folder, f))
            and f.lower().endswith((".png", ".gif"))
        ]
        window["-FILE LIST-"].update(fnames)
    elif event == "-FILE LIST-":  # A file was chosen from the listbox
        try:
            filename = os.path.join(
                values["-FOLDER-"], values["-FILE LIST-"][0]
            )
            window["-TOUT-"].update(filename)
            window["-IMAGE-"].update(filename=filename)

        except:
            pass

window.close()
das Ganze funktioniert wie du siehst mit PySimpleGui, hier die Quelle (https://realpython.com/pysimplegui-python/). Das kommt meinen Ansprüchen schon recht nah - bis auf die entsprechende Suchmaske, die ich noch irgendwie implementieren müsste. Falls du ne Idee hast wie ich z.B. schon mit diesem "fast fertigen" Skript arbeiten kann, lass es mich wissen. Werde sonst ggf. mal direkt den Autor fragen, ob der ne Idee hat!
Antworten