SimpleImageRuler Python 2.7 / PySide 1.1 / Qt 4.8

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo!

Nachdem ich hier im Forum viel gelernt habe, möchte ich ein Projekt von mir vorstellen in der Hoffnung, es möge für andere Leute nützlich sein. Ich selbst benutze das Programm im „produktiven“ Einsatz, weil es ein Problem löst, dass bei uns in der Firma regelmäßig vorkommt.


Motivation/Problemstellung

Von einem technischen Gegenstand wird ein Foto gemacht und als Größenvergleich rückt der Fotograf einen Maßstab ins Bild oder vielleicht einen Zollstock. Was, wenn ich jetzt wirklich was auf dem Foto nachmessen möchte?

Dafür benutzt man SimpleImageRuler (SIR)

SIR kann:
Fotos einladen
eine bekannte Strecke abgreifen, um das System zu kalibrieren
beliebig viele Stecken messen, als Einzelstrecken (line-mode) oder als Pfad (path-mode)
bei Ein- und Auszoomen die Kalibrierung beibehalten

Manchmal ist es nicht möglich oder zu aufwendig, ein Bild zu laden. SIR ist transparent und kann so einfach über den gesamten Bildschirm gelegt werden. So kann man auf einfache Weise z.B. die sonntägliche Joggingstrecke auf OpenStreetMap nachmessen, das im Hintergrund im Webbrowser angezeigt wird (Das funktioniert aber nur, wenn der Desktop Transparenz unterstützt.

SIR benötigt:
Python 2.7
PySide 1.1
Qt 4.8

Interessiert? Dann einfach die zip-Datei downloaden, irgendwo entpacken und SimpleImageRuler.py starten. Als Beispielfoto, auf dem was zu Messen ist, habe ich die Datei bohrkern.jpg beigefügt. Dieses Bild war übrigens der Anlass, dieses Programm zu schreiben. Es zeigt einen Bohrkern aus einer Straße, zu erkennen sind verschiedene Schichten aus Asphalt.

Hier der link:

simpleImageRuler-1.0.zip

Benutzung:

1. Foto Laden mit Datei-Öffnen..., z.B. bohrkern.jpg
2. mit „-“-Button so zoomen, das man den Maßstab auf dem Bild erkennen kann
3. CAL drücken, nun mit der Maus den Maßstab abnehmen (Maus ziehen bei gedrückter Taste links)
4. Maß eingeben (der abgebildete Maßstab bei bohrkern.jpg ist 10 cm lang)
5. Auf „Linie“ schalten und (durch Maus-ziehen) messen, was zu messen ist.


Bekannte Schwäche:
- Einzelstrecken (line mode) werden bei gedrückter linker Maustaste gezogen (drag), während ein Pfad (path mode) durch einzelne links-Klicks gezeichnet wird. Das ist nicht konsistent und sollte geändert werden. Ein Pfad wird übrigens durch Maus-rechts-click beendet.

I.H.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

So ein Programm habe ich schon länger gesucht und werde es auch verwenden. Und habe auch auf meiner Homepage verlinkt und hoffe es bringt paar Downloads mehr. http://markush.cwsurf.de/joomla_17/inde ... imageruler

Aber was mir aufgefallen ist, es fehlt die simpleImageRuler.ui Datei. Es wäre gut, wenn du sie auch bereitstellen würdest, genau so wie die Übersetzungsdateien qt_de.ts und die *.pro Datei. Den nur so kann dein Projekt auch von jemand anderst weiterentwickelt werden oder Übersetzungen hinzugefügt werden, den der Quellcode hast du unter GPL veröffentlicht und somit auch die Weiterentwicklung erlaubt, was ich sehr gut finde.

Und mir ist aufgefallen das du von der simpleImageRuler.ui eine simpleImageRuler_ui.py generierst diesen Zwischenschritt kannst du vermeiden wenn du mit uic.loadUi die Datei direkt in den Quellcode einbindest. Das kannst du dir auch überlegen ob das besser ist.
self.ui = uic.loadUi(join("lotto", "lotto.ui"))

Habe auch den Code auf PEP8 getestet, du hast an paar Stellen vor und nach den Gleichzeichen die Leerzeichen vergessen und nach Komma in den Rundenklammern das Leerzeichen. Aber beeinträchtigt die Funktion nicht und ist Feintuning.
http://pep8online.com/

Und natürlich ist es besser den Code bei Github zu veröffentlichen statt einen zip Download. Aber dazu möchte ich nicht zuviel sagen, denn ich habe es damals genauso wie du gemacht.

Viel Erfolg mit deinem Programm.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo, vielen Dank.

Das mit der .ui war keine Absicht, ich weiß nicht, warum die nicht mitgekommen ist. qt_de.ts und *.pro habe ich gar nicht, es war in erster Linie ein Projekt für mich selbst.
Das war erst mein zweites Qt-Gui-Programm überhaupt und das erste, das ich veröffentliche.
Ich glaube, ich werde mir mal ein Github account besorgen. Melde mich wieder, wenn es soweit ist.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

So, ich habe mal ein github Konto eingerichtet, ich hoffe, das ich alles richtig gemacht habe.

Das Repo ist unter

https://github.com/luggels/simpleImageRuler.git

abzurufen.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich habe dein Programm mit PySide 1.2.1 getestet, es funktioniert auch.
http://qt-project.org/wiki/PySide_Binaries_Windows

Dabei ist mir aufgefallen, das der OK Button im Kalibieren Dialog nicht sichtbar ist.
Schön wäre es auch wenn ich den Kalibrierwert mit Enter auch bestätigen könnte.

Wo dein Programm noch Probleme hat, ist wenn ich bei der Kalibrierung einen kleinen Wert eingebe, z.B. 0,02, dann werden die Entfernungen nicht richtig gerechnet.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo,

1. OK Button nicht sichtbar? Bei mir ist er durchsichtig, ja, das sollte ich ändern.
2. Kalibrierwert mit Enter bestätigen? Mit Linux geht das hier. Geht das auf Windows wirklich nicht, oder reden wir von verschiedenen Dingen?
3. Bei kleinen Zahlen geht es nicht. Ja, das stimmt. Da wird bei 0,1 gerundet, weil sonst die Ausgabe unleserlich wird.
Mögliche Lösungen hatte ich mir schon überlegt:
a) eine zusätzliche Abfrage nach Anzahl der Nachkommastellen (hmm, nicht so doll)
b) das Programm könnte die Nachkommastelle aus dem Kalibrierwert raten (z.B. immer mindestens 1/1000 des Kalibrierwertes, vielleicht mit ein wenig Magie, könnte klappen, in Sonderfällen gehts bestimmt schief)
c) Die Nachkommastellen werden aus den eingegebenen Nachkommastellen des Kalibrierwertes ausgelesen (Eingabe 0,0200 = 4 Nachkommastellen). Das erfordert eine Änderung des Eingabefeldes von Double auf String, und es erfordert zusätzliches Wissen des Users.

Was wäre die beste Lösung? Ich tendiere zu b).
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Da wäre die Möglichkeit d, die Ausgabe formatieren.

Code: Alles auswählen

>>> text = " {0:0.2f}".format(0.123456)
>>> print text
 0.12
Edit: habe dir ein Pull Request auf Github geschickt. Habe dir die fehlende qt_de.ts datei erstellt, jetzt lässt sich dein Programm in deutsch und englisch starten.
SimpleImageRuler.py [de|en]

Bei Linux ist der Hintergrund transparent, aber bei Windows schwarz.

Du verwendest Linux, gibt doch das ein:

Code: Alles auswählen

$ pep8 SimpleImageRuler.py
Da gibt es auch noch paar Warnungen.
Hase
User
Beiträge: 101
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Ui, danke, das ging aber schnell. Habe den Merge gerade gemacht.

Um das andere werde ich mich am Wochenende kümmern, ich muss erst mal wieder ein paar Tage "produktive" Arbeit machen.

Zur Lösung d: Formatieren löst m.E. das Problem nicht. Wenn ich in den 1000ern und 10000ern arbeite, brauche ich überhaupt keine Kommastellen, wenn ich mit 0,02 Kalibriere, sind 2 Kommastellen möglicherweise viel zu wenig.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Habe ein Screenshot von Windows XP gemacht, aber unter Linux ist das Fenster transparent, denke mal das es an Windows liegt.
Bild
Unter Windows lässt sich auch der Kalibrierwert mit Enter übernehmen, habe es nochmal getestet.

Und eine Idee für zukünftige Version habe ich auch, die Bilder mit den Daten speichern, So das am abgespeicherten Bild die Linien zu sehen sind, vielleicht auch nummeriert und das rechts vom Bild oder im Bild die Messwerte zu sehen sind. Und die Messdaten im den EXIF-Daten im Bild selbst abspeichern.
Antworten