ICE default IO error handler doing an exit()

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
Benutzeravatar
Terrahawk
User
Beiträge: 5
Registriert: Mittwoch 10. August 2011, 10:09
Kontaktdaten:

Hallo Leute

Ich bin nen Python Frischling und entstamme aus der PHP Ecke :P :)

Derzeit versuche ich ein Full HD Bild px und px zu parsen. PHP schien mir hierfür einfach zu unperformant.
Jetzt versuche ich das ganze atm in Python zu lösen. Allerdings ohne Erfolg. Ich schaffe es zwar alles schön auszulesen allerdings bricht mir das Script mit der Fehlermeldung ab:

Code: Alles auswählen

ICE default IO error handler doing an exit(), pid = 2840, errno = 32
Kann mir jemand sagen warum das so ist und ggf. wie ich das vermeiden kann?

Das Script:

main.py

Code: Alles auswählen

import sys
import os
import pprint

# Import Model
# from Models.Database import Database
from Models.Debug import Debug
from Models.ImageHandler import ImageHandler
from Models.ThreadWithReturnValue import *
from Models.ImageParser import ImageParser

# Import Window
from mainwindow import MainWindow

if __name__ == '__main__':

    # create application
    app = QApplication(sys.argv)
    app.setApplicationName('test')

    path = os.path.abspath('./tmp/')
    ImageHandler = ImageHandler()
    ImageHandler.captureImage(path)

    twrv = ThreadWithReturnValue(target=ImageHandler.imageParser())

    twrv.start()
    pprint.pprint(twrv.join())

    # execute application
    sys.exit(app.exec_())
ThreadWithReturnValue.py:

Code: Alles auswählen

from threading import Thread

class ThreadWithReturnValue(Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}, Verbose=None):
        Thread.__init__(self, group, target, name, args, kwargs, Verbose)
        self._return = None
    def run(self):
        if self._Thread__target is not None:
            self._return = self._Thread__target
    def join(self):
        Thread.join(self)
        return self._return
ImageHandler.py

Code: Alles auswählen

import os

from PIL import Image


class ImageHandler():

    def __init__(self):
        pass

    def captureImage(self, path):

         os.system('vgrabbj -d /dev/video0 -f ' + path +'/tmp.jpg -w 1920 -H 1080 -q 100 -o jpg -z 100 && chmod 777 ' + path +'/tmp.jpg')

    def imageParser(self):

        imgPath = os.path.abspath('./tmp/tmp.jpg')

        img = Image.open(imgPath)
        pixels = img.load()

        width, height = img.size

        all_pixels = []

        for x in range(width):

            for y in range(height):

                cpixel = pixels[x, y]
                all_pixels.append(cpixel)

        return all_pixels
Ich hoffe das mir der eine oder andere einen Tipp geben kann.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Dein Aufruf aus os.system(.....) funktioniert ohne Probleme?
I'm not getting paid for being Mr. Nice Guy!
Benutzeravatar
Terrahawk
User
Beiträge: 5
Registriert: Mittwoch 10. August 2011, 10:09
Kontaktdaten:

Ja. Das ganze funktioniert ohne Probleme. Ich bekomme nen Bild im JPEG Format (1920*1080) das Problem entsteht glaube ich beim bzw. durch das lange parsen des Bildes? Jedoch nur eine Vermutung.
lunar

@Terrahawk: Geschieht das nur mit Deiner Anwendung? Wenn ja, mit welchen Rechten läuft diese Anwendung?

Ansonsten ein paar allgemeine Anmerkungen:
  • "subprocess" statt "os.system()". Damit kannst Du das Bild direkt von der Standardausgabe von "vgrabbj" lesen, wodurch die temporäre Datei mit dem merkwürdigen "chmod 777" überflüssig wird.
  • Wenn temporäre Datei, dann mit dem "tempfile"-Modul.
  • Sternchen-Importe vermeiden
  • Qt hat eigene Thread-Klassen, die innerhalb von Qt-Anwendungen sinnvoller sind, weil sie Signale und Slots unterstützen. Dadurch ist "ThreadWithReturnValue" überflüssig, weil Du das gelesene Bild aus dem Thread heraus über ein Signal zurückgegeben kannst.
  • Qt hat auch eigene Bild-Klassen ("QImage"), so dass PIL auch überflüssig ist.
  • Im Allgemeinen gibt es Python-Anbindungen an OpenCV. Diese Bibliothek kann Bilder von Kamera-Geräten lesen, so dass auch "vgrabbj" nicht nötig ist.
Benutzeravatar
Terrahawk
User
Beiträge: 5
Registriert: Mittwoch 10. August 2011, 10:09
Kontaktdaten:

Danke lunar ich habe Deine Tipps umgesetzt. Das Problem lag übrigens an der Ausgabe der riesigen Liste (Alle Pixel und RGB Werte in einer List) ich ich mit pprint ausgeben wollte. Darauf muss man erstmal kommen... okay wieder etwas schlauer geworden im Bezug auf Python. Danke nochmals
Antworten