Posts Tagged ‘BVASystem’

Ich habe leider wenig Lust hier was zu schreiben …

Donnerstag, Juli 7th, 2016

Die Stille in den letzten Wochen, ja Monaten heißt nicht, das am BVASystem nicht mehr weiter gearbeitet wird. Aber irgendwie fehlt mir aktuell die Lust, hier alle 2-3 Wochen etwas zu schreiben. Sowohl beim alten, als auch beim neuen BVASystem bin ich gerade viel am probieren, ohne das ich richtig weiß, ob die Sachen zielführend sind. Obwohl ich weiß, das mit den begonnenen Sachen noch wenig anzufangen ist, habe ich trotzdem eine neue Version zusammengestellt. Denn so ganz ohne Fortschritts-Blogs macht diese Homepage keinen Sinn mehr…

Beim alten Delphi Programm probiere ich mich immer noch an der Suche nach ähnlichen Bildern. Dort bin ich zumindest soweit, das mit dem Programm hierarchische Bildmerkmale berechnet werden können. Der eigentliche Suchalgorithmus ist in der Entstehungsphase, in der ich viele viele Kritzeleien auf Papier erstelle. Ob ich damit zum gewünschten Ziel komme, weiß ich leider noch nicht. Es kann sein, das ich die Merkmalsberechnung nochmals abändern muss, wenn sich die Suche nicht durch direkte SQL-Befehle implementieren oder zumindest erleichtern lässt.

Berechnete Bildmerkmale

Berechnete Bildmerkmale

Dafür ist die im letzten Blog angekündigte Start-Applikation für die beiden BVASystem Versionen fertig.

Launcher-Applikation

Launcher-Applikation

Bei der neuen Java Version dagegen stecke ich noch immer in den Anfängen fest. So habe ich dort mit einer Logging-Funktionalität begonnen und bin dabei gleich über die Problematik der richtigen Speicherort-Auswahl gestolpert. Gerade für die Android Variante habe ich dort relativ viel Zeit verbraucht, da ich auf meinem Handy keinen Root Zugriff habe. Daher komme ich ohne das Programm nicht an das Standard-Verzeichnis für Apps heran. Als Ausweichmöglichkeit habe ich nun ein Verzeichnis auf der SD-Karte gewählt. Des weiteren habe ich mich darin versucht, eine Plattform übergreifende Ordner-Überwachung zu implementieren. Anders als bisher möchte ich nämlich, das das BVASystem von allein erkennt, wenn neue Bilder auf dem Rechner/Tablet oder Handy gespeichert werden. Diese neuen Bilder sollen dann automatisch in die Datenbank aufgenommen werden. Der Import-Vorgang würde damit dann komplett entfallen. Einzig eine Synchronisation zwischen verschiedenen Datenverbindungen müsste vom Anwender noch manuell angeregt werden. Aber bis dahin ist es noch ein langer Weg.

Aktueller Entwicklungsstand

Aktueller Entwicklungsstand

Ich habe mich entschieden …

Dienstag, April 19th, 2016

Nachdem ich die letzten Wochen voller Zweifel war, habe ich mich nun entschieden, wie es weitergehen soll. Nach einigen Testversuchen bin ich der Meinung, einen Weg gefunden zu haben, mit dem ich ein BVASystem für Desktop-Rechner und Android-Geräte gleichzeitig entwickeln kann, ohne das ich zwei getrennte Projekte stemmen muss. Nun ja, eigentlich will ich doch zwei Projekte stemmen, denn das jetzige BVASystem-Projekt ist mir zum einmotten zu schade.

Daher habe ich mich entschieden, ab jetzt zweigleisig zu fahren.  Auf der einen Seite werde ich das Delphi Windows Projekt fortführen. Bei der Weiterentwicklung geht es mir da aktuell hauptsächlich um die begonnene Suche nach ähnlichen Fotos. Größere Änderungen, wie die lokale SQLite-Datenbank, werde ich in dem Projekt aber wohl nicht mehr implementieren. Diese möchte ich nun erstmal über den neuen Weg probieren. Sollte dies gut funktionieren, werde ich dann Stück für Stück die bestehenden Funktionen im neuen Projekt nach implementieren. Das wichtigste dabei ist für mich, das auch das neue Projekt auf die bestehende Datenbank/Datenbankstruktur zugreifen kann. Sollte es wieder erwarten größere Probleme mit dem neuen Projekt geben, habe ich das Delphi Projekt um dort weiterzumachen.

In der Zeit, an der ich an beiden Projekten arbeite, wird es eine kleine Start-Anwendung für das BVASystem geben, in der ihr auswählen könnt, mit welchem der beiden Windows-Programme ihr arbeiten wollt. Wie ich allerdings die Android-Version veröffentlichen kann, weiß ich noch nicht. Durch meine Tests habe ich zwar bereits eine installierbare APK-Datei, allerdings lässt sie sich nur installieren, wenn man auf dem Android-Gerät Software aus unbekannten Quellen zulässt. Und ob der Google-Play-Store für eine Entwickler-Version der richtige Ort ist, bezweifele ich stark. Aber vielleicht geht es ja doch, wenn das Projekt etwas weiter fortgeschritten ist. Bis dahin müsst ihr aber wohl oder übel, mit Fotos von meinem Handy vorlieb nehmen …

Foto der Testanwendung auf einem Handy

Foto der Testanwendung auf einem Handy

In den nächsten Tagen werde ich mich um die Start-Anwendung kümmern und um die Berechnung der Merkmale für die Suche nach ähnlichen Bildern. Anschließend werde ich nochmal einen Blog schreiben, in dem ich euch die Technologie vorstellen möchte, die ich nun einsetzen möchte.

Hierarchische Merkmale zur Suche nach ähnlichen Fotos

Dienstag, März 22nd, 2016

Ich muss zugeben, es hat mal wieder deutlich länger gedauert, bis die jetzige BVASystem Version fertig war. Es lag allerdings nicht daran, das ich wenig Zeit hatte. Diesmal kreuzte mir eine Idee dazwischen, die mich einiges ausprobieren ließ und für einige Zweifel sorgte und auch immer noch sorgt. Froh bin ich aber darüber, das ich entschieden habe, trotz der neuen Idee an dem Programm, so wie ihr es kennt, weiterzuarbeiten.

Nach langer Zeit hab ich nun auch wieder etwas neues zu berichten. Seit einiger Zeit beschäftige ich mich wieder mehr mit der Suche nach ähnlichen Bildern. Die Verfahren, die ich bisher implementierte/ausprobierte , hatten alle den Nachteil, das man für jeden Vergleich eine Differenz berechnen musste. Das bedeutet, je mehr Fotos in der Datenbank sind, desto mehr Berechnungen müssen durchgeführt werden und desto länger muss man auf das Ergebnis warten.

Daher habe ich mir überlegt, die Berechnungen durch hierarchische Bildmerkmale zu vereinfachen bzw. ich hoffe gar darauf, das ich eine möglichst kleine, gut passende Bildmenge aus der Datenbank mit einem SQL-Befehl auswählen kann. In der Menge möchte ich dann die Berechnungen durchführen, damit die Ergebnisse schlussendlich nach Ähnlichkeit sortiert werden können.

Wie das Verfahren genau funktioniert, werde ich euch mitteilen, wenn ich es implementiert habe. Bisher habe ich nur den ersten Schritt getan. Ich habe nun eine Anzeige-Komponente mit der ich hierarchische Bildmerkmale darstellen kann. Sie soll mir in mehrerer Hinsicht helfen. Zum Ersten will ich die Merkmale sehen, damit ich prüfen kann, ob die Berechnung der Merkmale funktioniert und zum zweiten will ich mit der Ansicht entscheiden, wie viele Hierarchie-Stufen ich einsetzen will und wie diese aufgebaut sein sollen. Als nächstes steht nun also an, die eigentlichen Merkmale zu berechnen.

Bildmerkmal-Komponente mit zufälligenTestmerkmale

Bildmerkmal-Komponente mit zufälligenTestmerkmale

Zweifel an der weiteren Vorgehensweise – BVA goes Android?

Dienstag, März 15th, 2016

Seit nun fast 2 Jahren befindet sich bei uns ein Android-Tablet im Familienbesitz, mittlerweile haben sogar die Kinder eigene Geräte. Auch die alten Handys wurden mittlerweile durch Smartphones ersetzt. Nachdem ich durch ein kleines „Nebenprojekt“ auch erste Erfahrungen mit der Programmierung von Android-Anwendungen sammeln konnte, stellte sich mir die Frage, ob es nicht sinnvoll wäre, das BVASystem auf Android zu portieren. Praktisch wäre es sicher, da man direkt auf dem Sofa seine Fotos verwalten könnte.

Aber leider ist es mit meiner aktuellen Entwicklungsumgebung Delphi XE2 nicht möglich, für mobile Plattformen zu entwickeln. Bisher war aufgrund dieser Tatsache für mich das Thema Android beendet. Mittlerweile gibt es Delphi XE10 mit der dies möglich wäre, allerdings müsste ich dafür jede Menge Geld investieren. Außerdem müsste ich wohl das Framework VCL durch Firemonkey ersetzen. Der Aufwand dafür gleicht wohl einer Neuentwicklung, da das BVASystem fast ausschließlich auf speziellen selbstentwickelten VCL-Komponenten basiert. Einzig der Teil, der zur Datenhaltung und zur Kommunikation mit der Datenbank zuständig ist, könnte wohl weiterverwendet werden.

Alternativ könnte ich natürlich auch einfach ein zweites Projekt anfangen (z.B. mit dem Android Studio) und alles bzw. zumindest teilweise was ich bisher habe nachprogrammieren. Vorteil ist sicherlich, das ich dafür keinerlei Investitionen tätigen muss. Aber die Aussicht, alles doppelt programmieren zu müssen, ist irgendwie nicht so toll.

In den letzten Wochen habe ich daher viel recherchiert und ein ein wenig herumprobiert. Festgesetzt habe ich mich an einem Cross-Plattform Ansatz, der auf JavaFX basiert. Damit ist es mir zumindest gelungen, eine kleine Testanwendung zu programmieren, die sowohl auf einem Desktop PC, als auch auf einem Android-System lauffähig ist. Vorteil dabei ist sicherlich, das ich nur einmal programmieren muss, um beide Plattformen zu bedienen. Als großer Nachteil erweißt sich aber weiterhin, das ich quasi wieder bei fast null anfangen müsste.

Screenshot der Cross-Plattform-Testanwendung

Screenshot der Cross-Plattform-Testanwendung

Wie ich nun weiter vorgehen soll, weiß ich leider immer noch nicht genau. Fest steht allerdings, das ich das jetzige BVASystem nicht einfach einstellen will. Ich nutze es selbst ja mehrfach die Woche und so muss ich den Vorteil nutzen, das ich jede Sache, die mir nicht passt, ändern kann. Allerdings stellt sich die Frage, ob ich noch groß Energie in riesige Änderungen stecken sollte, oder ob ich die Zeit verkürze bis ich auf dem Sofa meine Fotos verwalte….

Die erste BVASystem Aktualisierung im Jahr 2016

Donnerstag, Januar 28th, 2016

Es fällt mir gerade schwer, etwas zur ersten Aktualisierung des BVASystems in diesem Jahr zu schreiben. Denn ich habe mal wieder mehrere große Baustellen begonnen, ohne das bei einer ein vorzeigbares Ergebnis erzielt wurde. Einzig eine kleine Funktion zum Zoomen in den Einzelbild-Komponenten ist fertig geworden. Sobald sich die Maus über dem Bild befindet, kann man nun mit Shift+Mausrad in das Foto hinein beziehungsweise hinauszoomen.

BVASystem Version 2.2.2.103-dev

BVASystem Version 2.2.2.103-dev

Nun möchte ich aber doch etwas zu den angefangenen Sachen schreiben:

Ähnliche Fotos suchen

Aktuell interessiere ich mich mal wieder mehr an der Suche nach ähnlichen Bildern. Beim Verwalten meiner Fotos kam mir nämlich oft die Frage, ob ich ein sehr ähnliches Bild nicht bereits in die Datenbank aufgenommen habe. Zwar ist beim Import bereits eine Doubletten-Detektion vorhanden, diese erkennt allerdings nur 2 komplett identische Bilder. In den letzten Wochen habe ich mir nun jedenfalls etwas überlegt, wie ich ähnliche Bilder in einer Datenbank detektieren möchte. Dazu benötige ich als erstes Bildmerkmale, die ich an jedem Foto auf gleiche Art und Weise berechne. Entstanden ist dafür bisher ein neues Bildinformationsfenster, in dem die Merkmale einmal dargestellt werden sollen. Außerdem habe ich eine Test-Funktion erstellt, die bereits zufällige Testmerkmale in der gewünschten Struktur erstellt.

Als nächstes habe ich vor, eine Komponente zu erstellen, mit der ich die Merkmale visualisieren kann. Denn eine visuelle Darstellung der Merkmale bringt vorerst deutlich mehr, als wenn ich in das Feld eine lange Zahlenfolge schreibe.

Lokale Datenbank

Die zweite große Baustelle ist immer noch die lokale Datenbank, mit dem Ziel alle bisher implementierten Datenbank-Funktionen auch für nicht importierte Fotos zu ermöglichen. Aktuell bin ich dafür gerade dabei, das Administrationstool anzupassen. Dort sind Script-Dateien hinterlegt, mit denen die Datenbank erzeugt werden kann. Für die lokale SQLite Datenbank benötige ich im BVASystem selbst eine ähnliche Funktionalität. Da ich nichts davon halte, Sachen doppelt zu implementieren, passe ich nun die Funktion im Administrationstool so an, das ich sie auch im BVASystem nutzen kann.

Ende der ruhigen Zeit …

Montag, Dezember 7th, 2015

So viel Abstand wie jetzt hatte ich noch nie zwischen zwei Versionen des BVASystems. Aber jetzt habe ich mich endlich dazu aufgerafft, wieder eine neue Version zu veröffentlichen. Auch wenn es in den letzten Monaten sehr ruhig gewesen ist, so habe ich trotzdem fast täglich ein klein wenig was am BVASystem programmiert. Meist habe ich dabei aber nur „Schönheitsfehler“ im Quelltext beseitigt, so das es wenig darüber zu berichten gab.

Entwicklung des BVASystems in der statischen Code-Analyse Sonar

Entwicklung des BVASystems in der statischen Code-Analyse Sonar

Die einzige wirkliche Neuerung, die ich vorzeigen kann, ist ein Overlay-Panel in der Einzelbildansicht. Damit ist nun auch in der Einzelbildansicht ersichtlich, ob das angezeigte Foto den eingestellten Filterbedingungen entspricht. Damit das Overlay nicht stört, wird es automatisch entfernt, sobald man die Maus drüber bewegt.

Overlay zur Anzeige einer aktiven Bildfilterung

Overlay zur Anzeige einer aktiven Bildfilterung

Ein hunderprozentig festgelegt, womit ich nun weitermache, habe ich mich noch nicht. Fest steht allerdings, das ich keine Lust mehr darauf habe, nur interne Änderungen vorzunehmen. Rein vom Interesse her, würde ich gerne etwas machen um ähnliche Fotos zu detektieren. Da ich dafür allerdings einiges ausprobieren muss, bevor ich eine endgültige  Lösung gefunden habe, wird es wohl im nächsten Jahr einen weiteren Test-Dialog geben, in dem ich unterschiedliche Wege zur Merkmals-Extraktion ausprobieren kann. Weiterhin habe ich definitiv vor, die Oberfläche des Programmes zu verbessern, so das die Bedienung noch einfacher/übersichtlicher wird.

Aktualisiertes Administrationstool

Donnerstag, August 6th, 2015

Auch wenn die Arbeit am Administrationtool zu den unangenehmeren Programmieraufgaben gehört, so ist diese trotzdem sehr wichtig. Schließlich können damit administrative Aufgaben erledigt werden, ohne das man ein „Datenbankguru“ sein muss. In den letzten Wochen habe ich mich um eine Funktion gekümmert, die ich bisher schlichthin einfach vergessen bzw. nicht gebraucht hatte: das Löschen einer BVASystem-Datenbank. Aber wie immer wurde auch dieses mal aus einer (aus datenbanktechnischer Sicht) Kleinigkeit ein größeres Unterfangen.

Datenbankstruktur löschen

Datenbankstruktur löschen

Aus Benutzersicht habe ich einen neuen Dialog geschaffen, in dem das zu löschende Datenbankschema ausgewählt werden kann. Natürlich mit einer Sicherheitsfrage, damit eine noch benötigte Datenbank gelöscht wird. Die Daten lassen sich nach dem Löschen nämlich nicht wieder herstellen.  Bis hier war alles kein Problem und recht schnell implementiert. Arbeit machte dann das eigentliche Löschen. Vor allem, weil die Funktion gleich 3 mal für die Datenbanken Oracle, Firebird und MySQL implementieren musste. Zum Glück konnte ich allerdings einen Teil der Funktionen nutzen, mit denen ich Datenbanken aktualisiere. Es existiert nun also für jeden Datenbanktyp ein Löschscript, welches mit dem Administrationstool ausgeführt werden kann. Ein kleiner Nachteil der Vorgehensweise ist allerdings, das nur aktuelle Datenbankschemas gelöscht werden können. Um ältere Strukturen zu löschen, muss diese erst auf die neuste Datenbankversion aktualisiert werden.

Ausblick

Neben der Programmiererei habe ich in der letzten Woche damit begonnen das BVASystem verstärkt zu testen. Einige Fehler habe ich dabei bereits gefunden und zum Teil auch schon korrigiert. Viel interessanter ist dabei allerdings, das man dabei auch Funktionen entdeckt, die nicht da sind, aber irgendwie schon benötigt werden. Vor mir auf dem Schreibtisch habe ich eine Liste liegen, wo ich mir diese Funktionen kurz skizziert habe. Lasst euch überraschen, was ich davon in der nächsten Zeit umsetzen werde,

Lesezeichen nun auch für die Datenbank

Donnerstag, Juli 2nd, 2015

Jetzt ist es endlich auch möglich Lesezeichen auf Ordner in der Datenbank zu setzten und zu benutzen. Es war nochmal einiges an Arbeit notwendig um die Funktion zu implementieren. Problem war, das die Einträge im Datenbankbaum mit einer einzelnen ID verknüpft sind. Dadurch ist es nämlich nicht möglich, auf die Elternknoten des Eintrages zu schließen. Bei einer Pfadangabe,  die einen Ordner auf der Festplatte beschreibt, ist dies hingegen ohne Probleme möglich. Daher habe ich mich entschlossen, für die Datenbank eine ähnliche Struktur aufzubauen.

Lesezeichen im Datenbank-Modus

Lesezeichen im Datenbank-Modus

Ein einzelnes Lesezeichen für einen Datenbank-Ordner sieht wie folgt aus:

[{436AFE34-ABED-40ED-B50C-BD11069673E7}]

TYP=DB

CAPTION=12.2014

TREEITEM=DBDatumRoot\DBDatumJahr:60\DBDatumMonat:133\

Der eigentlich interessante Eintrag ist die Zeichenkette hinter dem Schlüssel „TREEITEM“. Diese sieht einer Pfadangabe recht ähnlich. Der erste Teil DBDatumRoot entspricht quasi einer Laufwerksangabe und entspricht hier dem Wurzelknoten des Aufnahmedatum-Zweiges. Der zweite Eintrag „DBDatumJahr:60“ entspricht einem Jahreseintrag im Baum. 60 ist dabei die Datenbank-ID des dazugehörigen Datensatzes. Der letzte Eintrag steht dementsprechend für einen Monatseintrag im Baum, der die ID 133 besitzt. Würde das Lesezeichen auf einem Tageseintrag liegen, würde hier noch ein weiterer Eintrag folgen.

Ausblick

Als nächstes habe ich mir vorgenommen, einige Änderungen am Administrationstool vorzunehmen. Zum einen fehlt dort bisher die Möglichkeit, ein komplettes BVASystem Datenbankschema zu löschen und zum zweiten plane ich eine weitere Datenbankaktualisierung. Diese benötige ich für die Umsetzung einiger geplanter Funktionen. Für die erste Teilaufgabe habe ich auch bereits die erste Aufgabe abgearbeitet: Die Scriptdateien zum Löschen eines Datenbankschemas habe ich erstellt und in die Installationssoftware integriert.

Lesezeichen für die Bilderordner

Dienstag, Juni 9th, 2015

Bei mir ist es so, das ich die Fotos in einen speziellen Ordner auf der Festplatte kopiere, bevor ich sie in die Bilddatenbank importiere. Seit längerem hat mich gestört, das ich dieses Verzeichnis immer wieder in der Baumansicht heraussuchen musste. Noch schlimmer war es bei den Testbildern, die ich für die Entwicklung nutze. Diese liegen nämlich in einem Unterordner im Projektverzeichnis. Nun gibt es Abhilfe:

Lesezeichen-Popupdialog

Lesezeichen-Popupdialog

Es können nun beliebige Verzeichnisse als Lesezeichen abgespeichert werden. Dazu muss das Verzeichnis einmal manuell geöffnet werden und anschließend der mit einem „Stern“ bebilderte Button in der Werkzeugleiste dadrüber gedrückt werden. Ab dem Punkt kann das Verzeichnis direkt über das Lesezeichen ausgewählt werden. Dazu muss nur der Knopf neben dem „Stern“ gedrückt werden. Es öffnet sich ein Popupdialog, in dem alle Lesezeichen aufgelistet werden. Mit einem weiteren Klick wählt man dann das gewünschte Verzeichnis aus. Die Lesezeichen werden in einer Datei im Nutzerverzeichnis gespeichert, so das sie auch nach einem Neustart des Programmes erhalten bleiben.

Da ich die neue Funktion ganz nett finde, hatte ich eigentlich vor, sie auch direkt für Ordner der Datenbank zu implementieren. Dort bin ich allerdings auf ein Problem gestoßen. Bei einem Verzeichnis, zum Beispiel E:\Eigene Dateien\Bilder\2015\, weiß man genau, das auf Laufwerk E, im Ordner Eigene Dateien im Unterordner Bilder usw. gesucht werden muss. Bei den Ordnern in der Datenbank hat das Programm nur von einer ID Kenntnis, die sich auf einen speziellen Datensatz in der DB bezieht. Es kann also nicht so einfach ermittelt werden, wo sich der Ordner im Baum befindet. Auch ein vollständiges durchsuchen des Baumes hilft nicht weiter, da dieser erst aufgebaut wird, sofern der Nutzer einen Knoten öffnet.

Theoretisch habe ich nun bereits eine Lösung des Problems. Aber da ich eh schon so lange gebraucht habe um die Funktion fertigzustellen, habe ich sie mir für die nächste Programmversion aufgehoben. Nun habe ich aber wieder genug rum gefaselt. Ich wünsche euch viel Spaß mit der neuen Programmversion und ich setzt mich mal an die Lösung des Problemes.

Zäher Neustart in die nächste Entwicklungsstufe

Montag, Mai 18th, 2015

Eigentlich war ich ja begeistert, die Datenbankumstellungen endlich gemeistert zu haben, aber trotzdem geht die weitere Entwicklung nicht so schnell voran, wie ich es gerne hätte. Zum einen war ich relativ lange unschlüssig, welche Änderungen ich als nächstes angehen soll und zum zweiten habe ich in letzter Zeit mit einem privaten Projekt zu tun, in welches fast die gesamte freie Zeit geflossen ist. Außerdem habe ich erste Erfahrungen in der Entwicklung von Android-Apps gesammelt. Diese sind nicht wirklich vorzeigbar, aber vielleicht wird daraus einmal ein BVASystem fürs Handy.

Lesezeichen-Knopf in neuer Werkzeugleiste

Lesezeichen-Knopf in neuer Werkzeugleiste

Nichts desto trotz kann ich heute leider keine neue Programmversion zum Download anbieten. Allerdings kann ich verraten, das ich damit begonnen habe, eine Lesezeichen Funktion für den Baum auf  der linken Programmseite zu entwickeln. Mich stört es nämlich, das man immer wieder den gleichen Ordner aufsuchen muss, wenn ich Bilder in die Datenbank importieren will. Erste Teile habe ich von der Funktion auch bereits fertig implementiert, aber wie dem so ist, werden die „Baustellen“ bei mir immer riesig. Für die Lesezeichen, wie ich sie mir vorstelle, brauche ich: eine neue Button-Komponente, eine Toolbar für den Baum, ein Popup-Dialog, eine Komponente zur Darstellung eines Lesezeichens, eine Datenstruktur zur Speicherung der Lesezeichen, eine Funktion zum Anlegen, eine zur Auswahl und natürlich eine zum Löschen eines Lesezeichens. Fertig davon habe ich bisher nur die Button-Komponente und die Toolbarleiste, Alle anderen Punkte habe ich mehr oder weniger angefangen. Es ist also noch einiges zu tun …