Problem beim zugriff auf Bilder-Array

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Hallo zusammen,

folgende Zeilen werfen einen Fehler (siehe unten)

Code: Alles auswählen

# ISR (Interrupt routine)
#--------------------------------------------------------------------------------------------------
def Interrupt(channel):
        # Zugriff auf globale Variablen
	global ImgPos1
	global ImgPos2
	global ImgPos3
	global ImgPos4
	global TextPos
	global ImgSize1
	global ImgSize2
	global SourceDir
	global Collagen
	global VerarbeiteteBilder
	global Background

	pictureCount = 0
	while pictureCount < 4:
	        GPIO.output(triggerOutPin,GPIO.HIGH)
                time.sleep(1)
                GPIO.output(triggerOutPin,GPIO.LOW)
		# Counter um eins erhoehen und ausgeben
        	pictureCount = pictureCount + 1
        	print "Bild Nr.: " + str(pictureCount) + " geschossen"
		time.sleep(5)
		
	time.sleep(10)
	EingangsBilder = glob.glob("/home/pi/Desktop/FotoBox/EingangsBilder/*.JPG")	# Achtung Case-Sensitive bei Dateiendung
	print "Die Eingangsbilder:"
	for filename in EingangsBilder:
		print filename

	# Aufbereitung der einzelnen Biler
	# Öffnen der Bilder
	Img1 = Image.open(EingangsBilder[0])	# grosses bild links Oben
	Img2 = Image.open(EingangsBilder[1])	# kleines Bild unten links
	Img3 = Image.open(EingangsBilder[2])	# kleines Bild unten mitte
	Img4 = Image.open(EingangsBilder[3])	# kleines Bild unten rechts
Fehler:

Code: Alles auswählen

Die Eingangsbilder:
/home/pi/Desktop/FotoBox/EingangsBilder/sticky-notes.JPG
/home/pi/Desktop/FotoBox/EingangsBilder/wasser2.JPG
/home/pi/Desktop/FotoBox/EingangsBilder/IMG_3301.JPG
/home/pi/Desktop/FotoBox/EingangsBilder/IMG_3358.JPG
Traceback (most recent call last):
  File "PythonCollage_6.py", line 89, in Interrupt
    Img1 = Image.open(EingangsBilder[0])	# grosses bild links Oben
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file
Wobei der gleiche code (damals noch nicht in der ISR einwandfrei Funktioniert hat.

Wo könnte da das Problem liegen?

Vorab vielen Dank und viele Grüße

DaZeller
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die Sache mit dem global, dem Durchnummerieren von Namen und PEP 8 hatten wir heute ja schon einmal. Da du in einem weiteren Thread schon angemerkt hast, dass du dir deinen Code mehr oder weniger zusammenkopiert hast und nicht weißt was passiert
DaZeller hat geschrieben:Was das del angeht, muss ich gestehen, dass ich das so aus einem Beispiel entnommenhabe... Was es tut weis ich nicht :mrgreen:
, solltest du besser zunächst die genannten Sachen reparieren und dich um die Grundlagen kümmern. Sonst wird dir hier wahrscheinlich demnächst keiner mehr helfen wollen, wenn du nicht ein wenig Lernbereitschaft und Eigeninitiative zeigst.
Das Leben ist wie ein Tennisball.
BlackJack

@DaZeller: ISR ist ”falsch”, denn echte ISRs sind deutlich hardwarenäher, sollten so kurz wie möglich laufen, und müssen in der Regel auf eine spezielle Art enden die man oft nicht einmal in C ausdrücken kann und deshalb mindestens auf in C eingebettete Maschinensprache zurückgreifen muss.

Hier haben wir aber wohl nebenläufige Programmierung. Da ist ``global`` noch schlimmer als sonst schon. Ich glaube das wurde in mindestens einem anderen Thema schon mal gesagt: Vergiss das es ``global`` als Schlüsselwort gibt und programmier das sauber. Funktionen und Methoden sollten auf nichts (ausser Konstanten) zugreifen was nicht als Argument übergeben wurde. Und wenn eine Funktion oder Methode ein Ergebnis hat das ”nach aussen” kommuniziert werden soll, dann gibt es dafür den Rückgabwert.

Die ``while``-Schleife sollte eine ``for``-Schleife sein.

Kommentare sollten dem Leser einen Mehrwert bieten und nicht das offensichtliche noch mal beschreiben was man auch ganz einfach am Code ablesen kann. Wer zum Beispiel den Kommentar ``# Counter um eins erhoehen und ausgeben`` braucht weil er sonst die beiden folgenden Code-Zeilen nicht versteht, der sollte vielleicht nicht programmieren. Für alle anderen ist der Kommentar vollkommen überflüssig und ist etwas was zusätzlich gepflegt werden muss.

Durchnummerierte Namen sind keine gute Idee. Das ist in der Regel ein Zeichen das man eigentlich eine Datenstruktur verwenden möchte, oft eine Liste. In diesem Fall auch (`Img*`).

Bezüglich der Fehlermeldung: Offenbar ist ``sticky-notes.JPG`` keine Bilddatei.
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Hallo EyDu,

Danke für den Rüffel. Ab und an ist sowas schon mal ganz nötig.

Ich bitte jedoch darum, meine Absichten nicht im Vorfeld zu verurteilen.
Nur weil ich, zugegebenermaßen, NOCH nicht alles verstehe, so bin ich trotz dem Bestrebt möglichst viel an dem Projekt zu lernen.
Leider ist es parallel auch so, dass ich etwas unter Zeitdruck stehe. Das Programm dient dazu mit einem Raspberry-Pi auf einem Geburtstag Blder der Gäste zu machen. ...und der Geburtstag ist am Sonntag.

Ich habe mich offen gestanden wohl etwas verschätzt, was den Umfang des Projektes (und meine Auffassungsgabe) angeht.

Zurück zum Problem:
Was ich zur Beschreibung noch ergänzen sollte, ist dass der Code auf einer anderen Platform ausgeführt wird. (wie konnte ich das vergessen :? ).
Der Fehler tritt jetzt auf dem Raspberry-Pi mit Raspbian auf, zuvor erfolgreich getestet (jedoch ohne Inrerrupt, da auf meinem Laptop nicht verfügbar) hatte ich das ganze unter Ubuntu 14.10.

Weiterhin würde ich mich sehtr über alle Tipps und Hinweise zur Problemlösung sehr freuen.

viele Grüße

DaZeller
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Hallo BlakJack,

vielen Dank für deine Hinweise. Ich werde versuchen so viel als möglich davon umzusetzten.

Leider bin ich nicht auf dem Niveau auf dem Ihr programmiert, aber ich versuche dazu zu lernen.
(bitte habt einsicht mit einem Newby ich frage wirklich nicht um jemanden zu ärgern.)

Zum Problem:
Manchmal sind es halt ganz andere dinge... Vor lauter Programmiererei glaubt man gleich an einen Fehler im Code, dabei war es dieses mal offenbar ein schiefgelaufener FTP-Upload. Die Bilder hatten allesamt Größe 0. :oops:

viele Grüße

DaZeller
Antworten