Seite 1 von 1

Python Imaging

Verfasst: Sonntag 19. Februar 2006, 23:10
von juergenkemeter
Hi,

Ich moechte die Python Imaging Library fuer die Darstellung des Lebenszuklus von Haarfollikel - Genen benutzen. Der Zyklus ist unterteilt in vier Phasen:
1. Anagen
2. Catagen
3. Telogen
4. Exogen

Je nachdem, in welcher Phase sich ein Gen befindet, soll mit Python die entsprechende Phase in einer Grafik hervorgehoben werden.

Der Genname und entsprechende Phase des Lenenszyklus ist in einer csv-Datei, oder einer Spalte in einem Excel Spreadsheet gespeichert (je nachdem was leichter ist zu extrahieren).

Ist es moeglich, via Python dynamisch eine Abfrage zu starten, und die entsprechende Phase des jeweiligen Gens in einem Bild darzustellen?

Fuer Tipps waere ich dankbar, da ich momentan dabei bin Python zu lernen.

Viele Gruesse,
Juergen

Verfasst: Montag 20. Februar 2006, 00:03
von BlackJack
Mit CSV Daten kommt man in Python ganz wunderbar mit dem `csv` Modul aus der Standardbibliothek klar.

Was für Grafiken möchtest Du denn anzeigen? Wo kommen die her und in welchem Format liegen die vor? Vielleicht kommst Du um PIL sogar herum und kannst Tkinter zum Anzeigen benutzen.

Grafik

Verfasst: Montag 20. Februar 2006, 21:25
von juergenkemeter
Hi,

ich hab heute eine 'Basis'-Grafik bekommen, in der verschiedene Phasen eingezeichnet sind.

Je nachdem welche Phase zu einem Gen in csv / Excel gespeichert ist, soll die entsprechende Sektion markiert oder hervorgehoben werden.

Schau auf folgenden Link, um diese Grafik zu sehen:
http://photobucket.com/albums/a19/juergenkemeter/

Da es eine begrenzte Anzahl von Phasen gibt, kann man ja evtl. verschiedene, markierte Versionen vom Basic-Image abspeichern und dann mit Python anzeigen lassen?

Das alles soll spaeter in eine Intranet-Seite reinkommen, welche auf eine Datenbank zurueckgreift. Da kann man dann auch Details zu einem Gen abfragen, und damit auch der aktuelle Status der Haarfollikels.
Da die Grafik gross ist, waere es wohl gut, wenn man mit einem Link ein eigenes Fenster oeffnet, das mit Hilfe von Python ein entsprechend markiertes Bild zu einem Gen praesentiert.

Gibts auch die Moeglichkeit, verschiedene Teile einer Grafik mit Hyperlinks zu unterlegen, damit man dadurch zu Experiment-Originaldaten kommen kann, die diese Phase belegen?

Von Tkinter hab ich leider noch nichts gehoert.

Cheers
Juergen

Re: Grafik

Verfasst: Montag 20. Februar 2006, 22:51
von BlackJack
juergenkemeter hat geschrieben:Da es eine begrenzte Anzahl von Phasen gibt, kann man ja evtl. verschiedene, markierte Versionen vom Basic-Image abspeichern und dann mit Python anzeigen lassen?
Könnte man machen. Es wäre aber auch möglich die entsprechenden Teile der Graphiken mit PIL beim Abruf zu markieren. Kommt halt darauf an, wie es mit dem Speicherplatz bzw. mit der Rechenleistung/RAM des Servers aussieht und um wie viele Graphiken es sich insgesamt handelt.
Gibts auch die Moeglichkeit, verschiedene Teile einer Grafik mit Hyperlinks zu unterlegen, damit man dadurch zu Experiment-Originaldaten kommen kann, die diese Phase belegen?
Das kann man machen, aber das muss man in HTML lösen. Mit verweis-sensitiven Grafiken (Image Maps).
Von Tkinter hab ich leider noch nichts gehoert.
Das ist das GUI Toolkit, das zur Standardbibliothek von Python gehört. Aber Du möchtest ja eine Webanwendung schreiben.

Verfasst: Dienstag 21. Februar 2006, 20:06
von Bernhard
Sorry, wenn ich das Problem gerade nicht ganz verstehe: Du hast eine Grafik mit zehn Schritten und bei jedem Gen in Deiner Datenbank soll genau eine davon aktiv sein? Dann spar Dir die Programmierarbeit, mach einfach zehn verschiedene Bilder, in jedem eines der Felder mit einem Grafikprogramm markiert. Dann speicherst Du in Deiner Datenbank zu jedem Gen, welches der zehn Bilder dazu angezeigt werden soll und gut ist.
Oder kann ein Gen in mehreren der Felder aktiv sein? Nur dann brauchst Du eine Softwarelösung (z.B. mit PIL).

Gruß,
Bernhard

Beispiel für Imagemap

Verfasst: Dienstag 21. Februar 2006, 20:39
von Bernhard
Hallo nochmal!

Du hast Dein Bild in einer Größe von 542x846 Pixeln veröffentlicht. So braucht man schon einen großen Monitor - Du solltest überlegen, das Bild kleiner zu machen. Sollte es bei der Größe bleiben, kannst Du die unten angeführten Werte für Deine ImageMap benutzen. Ganz ohne Rückgriff auf Python versucht dann der Browser ganz von selbst, die HTML-Seiten "Ana.html", "Pro.html", "Schritt1.html" etc aufzurufen, wenn der User eines der Felder anklickt.

Code: Alles auswählen

<html><body>
<img src="Name.gif" width="542" height="846" border="0" alt="..." usemap="OhneTitel_1_Map">
<map name="OhneTitel_1_Map">
<area shape="rect" alt="" coords="190,507,354,670" href="Mitte.html">
<area shape="rect" alt="" coords="191,311,345,427" href="Ana.html">
<area shape="rect" alt="" coords="425,526,541,648" href="Pro.html">
<area shape="rect" alt="" coords="191,757,355,846" href="Tel.html">
<area shape="rect" alt="" coords="0,535,113,649"   href="Cat.html">
<area shape="rect" alt="" coords="26,367,93,457"   href="Schritt8.html">
<area shape="rect" alt="" coords="66,229,143,311"  href="Schritt6.html">
<area shape="rect" alt="" coords="122,137,190,208" href="Schritt4.html">
<area shape="rect" alt="" coords="191,56,253,137"  href="Schritt2.html">
<area shape="rect" alt="" coords="266,0,346,90"    href="Schritt1.html">
<area shape="rect" alt="" coords="370,0,448,65"    href="Schritt0.html">
</map></body>
</html>
Du musst nur das Bild Name.gif nennen und in das selbe Verzeichnis wie dieses HTML-Script stellen.

Gruß,
Bernhard

Verfasst: Freitag 24. Februar 2006, 02:27
von juergenkemeter
Hi,
wie bekommt man raus welche Pixel man eingeben muss?

Ich werd das Bild am Ende wohl kleiner machen, danke fuer den Tipp.

Ich hab eine Datei 'start.html' mit deinem HTML - Hyperlink-Code, und die entsprechenden verlinkten html - Dateien erstellt, im selben Ordner. Wenn ich start.html oeffne, wird korrekterweise das Bild angezeigt, doch es passiert nichts wenn ich auf die Grafik im Internet Explorer klicke.

Ich werde wohl verschiedene Grafiken dieses Zyklus', mit verschiedenen markierten Phasen, abspeichern und dann, je nachdem in welcher Phase ein Gen aktiv ist (koennen auch mehrere sein), das entsprechende Bild anzeigen lassen. Dafuer werde ich PIL brauchen, oder?

Beispiel:
Gen xy wird im Datenbank-GUI angezeigt. Zum Gen ist in der Spalte 'Aktive_Phase' der Eintrag 'Anagen' und 'Telogen' abgespeichert.
Eine Funktion (HTML? PIL?) nimmt die beiden Eintraege und zeigt das entsprechend markierte Bild an.

cheers,
Juergen

Verfasst: Freitag 24. Februar 2006, 09:09
von Rebecca
juergenkemeter hat geschrieben:Hi,
wie bekommt man raus welche Pixel man eingeben muss?
Wenn du das Bild mit einer Bildverarbeitung oeffnest, wird meist irgendwo unten angezeigt, ueber welchem Pixel sich der Cursor gerade befindet. Zumindest ist das bei Gimp so. Gimp hat uebrigens einen Fillter, der einem beim Erstellen der Image-Maps hilft. (Im Menue unter Filters >> Web >> ImageMap).

Verfasst: Freitag 24. Februar 2006, 21:33
von Bernhard
Hi!
juergenkemeter hat geschrieben:Ich hab eine Datei 'start.html' mit deinem HTML - Hyperlink-Code, und die entsprechenden verlinkten html - Dateien erstellt, im selben Ordner. Wenn ich start.html oeffne, wird korrekterweise das Bild angezeigt, doch es passiert nichts wenn ich auf die Grafik im Internet Explorer klicke.
Es sollte darauf ankommen, wo auf die Grafik du klickst: Wenn Du auf das Feld für das Anagen klickst sollte der InternetExplorer eigentlich die Datei Ana.html anzeigen. Wenn Du mit der Maus über die Grafik fährst, sollte sich der Mauszeiger nur an einigen Stellen zur Zeigefingerhand umwandeln, an anderen ein Pfeil bleiben. Versuch das doch noch mal.

juergenkemeter hat geschrieben:Ich werde wohl verschiedene Grafiken dieses Zyklus', mit verschiedenen markierten Phasen, abspeichern und dann, je nachdem in welcher Phase ein Gen aktiv ist (koennen auch mehrere sein), das entsprechende Bild anzeigen lassen. Dafuer werde ich PIL brauchen, oder?
Eigentlich: Nein! Im Intranet wird man das Ganze wohl eher so programmieren, dass der Rechner mit der Datenbank eine HTML-Datei erzeugt, die dann nur einen Link auf das passende Bild enthalten muss.

Schönen Gruß,
Bernhard

html - Datei erzeugen

Verfasst: Sonntag 26. Februar 2006, 23:53
von juergenkemeter
Hi,
Eigentlich: Nein! Im Intranet wird man das Ganze wohl eher so programmieren, dass der Rechner mit der Datenbank eine HTML-Datei erzeugt, die dann nur einen Link auf das passende Bild enthalten muss.
programmiert man sowas mit HTML oder irgendeiner ScriptSprache? Weisst du von einem Beispiel im Internet?

Juergen

Re: html - Datei erzeugen

Verfasst: Montag 27. Februar 2006, 10:43
von gerold
juergenkemeter hat geschrieben:programmiert man sowas mit HTML oder irgendeiner ScriptSprache? Weisst du von einem Beispiel im Internet?
Hi Juergen!

So etwas ist eine dynamische Internet-Anwendung. Das kannst du mit allem programmieren, was als Endergebnis HTML (reinen Text) liefern kann. Hier im Python-Forum weise ich dich natürlich auf Zope und CGI hin.

Hier einige Links zum Thema CGI:
http://www.python-forum.de/viewtopic.php?t=5253
http://python.org/doc/2.4.2/lib/module-cgi.html
http://python.org/doc/2.4.2/lib/module-cgitb.html

Hier einige Links zum Thema Zope:
http://zope.de
http://zope.org
http://gerold.bcom.at/zope_plone/zope_a ... n_windows/
(Diese Anleitung funktioniert auch mit Zope 2.9.0.)
Das Tutorial von Zope zeigt dir in wenigen Stunden, wie du mit Zope dynamische Websites erstellen kannst.

Der wichtigste Link zum Thema HTML:
http://de.selfhtml.org/
(Ohne HTML-Kenntnisse bringt dir der bester Internet-Applikationsserver nichts.)

mfg
Gerold
:-)

Verfasst: Montag 27. Februar 2006, 11:04
von juergenkemeter
Hi,
erstmal danke für die vielen Links! Werd versuchen mit Zope und CGI was anzufangen.

Nur glaub ich ist mir Bernhard's Gedanke noch nicht ganz klar, was er damit meint, dass der Datenbank-Server eine HTML-Datei erzeugt, die nur einen Link auf ein entsprechendes Bild enthält.


Schöne Grüße
Jürgen

Verfasst: Montag 27. Februar 2006, 11:45
von gerold
Hi Jürgen!

Code: Alles auswählen

   Datenschicht     (CSV, oder Datenbank)
        |
 Anwendungsschicht  (CGI oder Zope)
        |
      Client        (Browser)
Hier ein Beispiel, wie so etwas als CGI aussehen könnte. Dazu musst du alles in einen Ordner speichern. Hol dir den CGI-Server (cgi_server.py) aus diesem Beitrag http://www.python-forum.de/viewtopic.php?p=31590#31590 .

csv_datei.csv:

Code: Alles auswählen

1,Name1,Phase1
2,Name2,Phase2
3,Name3,Phase1
genliste.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

print "Content-Type: text/html"
print

import cgi
import cgitb; cgitb.enable()
import csv


# Links zu den Phasenbildern
phasenlinks = {
    "phase1": "http://irgendeineurl/phase1.gif",
    "phase2": "http://irgendeineurl/phase2.gif",
    "phase3": "http://irgendeineurl/phase3.gif",
}

# Daten einlesen
data_list = []
f = file("csv_datei.csv", "rb")
csv_data = csv.DictReader(f, ("id", "name", "phase"))
for item in csv_data:
    data_list.append(item)
f.close()

# Header ausgeben
print \
"""<html>
<head>
  <title>Genliste</title>
</head>
<body>
  <table border="1" cellspacing="0" cellpadding="3">
"""

# Daten ausgeben
for item in data_list:
    print "    <tr>"
    print "      <td>%s</td>" % item["id"]
    print "      <td>%s</td>" % item["name"]
    print "      <td><a href='%s'>%s</a></td>" % (
        phasenlinks[item["phase"].lower()], item["phase"]
    )
    print "    </tr>"

# Footer ausgeben
print \
"""
  </table>
</body>
</html>
"""
mfg
Gerold
:-)

Verfasst: Montag 27. Februar 2006, 16:06
von mitsuhiko

Code: Alles auswählen

   Datenschicht     (CSV, oder Datenbank)
        |
 Anwendungsschicht  (CGI oder Zope)
        |
      Client        (Browser)
@gerold: Warum ignorierst du andauernd WSGI? :roll:

Verfasst: Montag 27. Februar 2006, 16:26
von gerold
blackbird hat geschrieben:@gerold: Warum ignorierst du andauernd WSGI? :roll:
Hi blackbird!

Weil ich denke, dass es für so einfache Sachen zu kompliziert ist.

Aber das ist ein wirklich gutes Thema für einen neuen Thread. Vielleicht kann WSGI ja schon alles was ich möchte und ich weiß nur noch nichts davon.

Hier ist der neue Thread:
http://www.python-forum.de/viewtopic.php?p=31955

lg
Gerold
:-)

nochmal gaaaanz von vorne

Verfasst: Montag 27. Februar 2006, 16:48
von Bernhard
juergenkemeter hat geschrieben:Nur glaub ich ist mir Bernhard's Gedanke noch nicht ganz klar, was er damit meint, dass der Datenbank-Server eine HTML-Datei erzeugt, die nur einen Link auf ein entsprechendes Bild enthält.
Ganz einfach: Du hast einen Rechner im Keller, auf dem die Datenbank mit Deinen Genen ist (der Server). Du hast viele Rechner, von denen die verschiedenen Leute auf die Datenbank im Keller zugreifen wollen. Die Idee im Intranet ist, dass der Informationsfluss zwischen den vielen Rechnern und dem Server in HTML stattfindet.

Der User an einem der vielen Rechner füllt in einem HTML-Formular eine Suchanfrage aus und der Server liefert eine HTML-Seite zurück, die die Antwort auf die Suchanfrage enthält.

Die Frage ist, was passiert auf dem Server? Hier laufen zwei verschiedene Programme: Das Datenbanksystem, dass sich darum kümmert, die Informationen von unzähligen Genen zu verwalten und das heißt vor allem, sie auf Wunsch schnell wieder zu finden. Ein zweites Programm nimmt Anfragen von Usern an, bearbeitet sie mit Hilfe der Datenbank und erstellt zuletzt eine HTML-Seite, die der User als Antwort auf seinem Schirm anschauen kann. Dieses Vermittlerprogramm, dass Anfragen von Usern entgegennimmt, auf die Datenbank zugreift und zuletzt eine HTML-Seite erzeugt, die dann der User wieder anschauen kann, kannst Du mit einer Skriptsprache, beispielsweise mit Python schreiben.

Wenn Du so ein Projekt verwirklichen willst musst Du Dich also mit einem Datenbankmanagementsystem, einer Skriptsprache und HTML auseinandersetzen. Danach kannst du Dich dann mit so Details herumplagen, ob Du die Grafik in Deinem Skript mit PIL verändern oder auf fertig markierte Grafiken von der Festplatte zugreifen willst.
In letzterem Fall gibt es einfach 4 (oder 10) Grafiken auf der Festplatte, in denen jeweils eine Follikelphase markiert ist und Dein Skript gibt an den User einfach ein HTML-File, dass jeweils auf die passende Grafik anzeigt. Aber wie gesagt: Du musst Dich in jedem Fall erst um Grundlegenderes kümmern.

Die Links meiner Vorredner sollten Dir helfen, die einzulesen. Ich selbst habe leider viel zu wenig Erfahrung, um Dir Tipps für die konkrete Umsetzung zu geben. Vielleicht macht Zope auch alles viieel einfacher - ich weiß es (noch!) nicht.

Gruß,
Bernhard

Verfasst: Montag 27. Februar 2006, 17:14
von gerold
Hi!

Falls es Leser dieses Themas interessiert. Ich habe einen neuen Thread aufgemacht, der evt. mal Klarheit bringt, welches Webframework für was am Besten zu gebrauchen ist.

http://www.python-forum.de/viewtopic.php?p=31955

lg
Gerold
:-)