IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Multiprocessing, traitement d'image et numpy


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Multiprocessing, traitement d'image et numpy
    Bonjour à tous,

    Je démarre un projet pour apprendre le python et pour le fun. J'ai malheureusement quelques soucis avec le partage de ressource entre les processus.

    Le projet se présente comme cela: utilisation de librairie de traitement d'image soit: Pillow (PIL pour python 3.X), OpenCV, et numpy (un peu la base en python j'ai l'impression).

    Le but et d'avoir un processus qui acquière des images avec Pillow et qui les envoit à OpenCV pour divers traitement. (Les deux processus tourne pendant un certain temps en simultané)

    D'après mes recherches numpy et parfaitement adapter au multiprocessing et est compatible avec ces deux librairie. Seulement je n'y arrive pas personnellement et le site officiel ne m'aide pas.
    Sur le site officiel plusieurs méthodes sont présentées et déjà je ne sais pas laquelle est la mieux dans mon cas (si vous avez des indications ).
    Ensuite j'ai l'impression que les tableaux numpy ne fonctionne pas de la même façon que ce qui est mis sur le site officiel pour le partage .

    Sinon je pars sur du multiprocessing aux vues des informations que j'ai lues. Mais peut être que j'ai mal compris et que du multithreading serait adapté dans le cadre de mon projet malgrès le GIL.
    (je cherche un gain de performance, je ne fais pas cela uniquement pour le fun et les connaissances ).

    Il me semble avoir fait le tour de tout, exemples, conseil ou autre sont les bienvenues.

  2. #2
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Ok je pense que je n'ai pas été assez clair.

    Je vous propose donc une base de code que j’essaie de faire fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    def processscreen(queuescreen):
        # add while later
        process = ScreenManager()                            # my pillow class
        listscreen = process.capture()                       # numpy.array 900 * 600
        queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
     
     
    def processinformations(queuescreen):
        # add while later
        process = InformationManager()                       # my opencv class
        # don't know if try catch is useful here just one thing i add during my try
        try:
            process.screen_array = queuescreen.get()
        except Exception as err:
            # just a print
            settings.out(settings.ERROR, settings.ERROR, 'processinformations get listscreen : ' + str(err))
        # after here some work with InformationManager()
     
     
    if __name__ == '__main__':
        queuescreen = Queue()
        s = multiprocessing.Process(target=processscreen, args=(queuescreen,))
        i = multiprocessing.Process(target=processinformations, args=(queuescreen,))
     
        i.start()
        s.start()
     
        i.join()
        s.join()

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 735
    Par défaut
    Salut,

    Et l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
    ne fonctionne pas?
    note: si vous postez du code qu'on ne peut pas faire tourner sans indiquer les problèmes/erreurs rencontrées, ... que voulez vous qu'on fasse?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Je ne l'ai pas précisé mais la communication entre les classes ne pose pas de soucis en mode monoprocess.

    Effectivement l'instruction suivante ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
    Les erreur retourner par python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Process Process-1:
    Traceback (most recent call last):
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\process.py", line 254, in _bootstrap
        self.run()
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\process.py", line 93, in run
        self._target(*self._args, **self._kwargs)
      File "C:\Users\Ved\PythonProjects\Video\Manager\execution.py", line 21, in processscreen
        queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\queues.py", line 82, in put
        if not self._sem.acquire(block, timeout):
    TypeError: only length-1 arrays can be converted to Python scalars

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 735
    Par défaut
    Citation Envoyé par Fallis Voir le message
    Je ne l'ai pas précisé mais la communication entre les classes ne pose pas de soucis en mode monoprocess.
    Et çà communique via Queue?

    Citation Envoyé par Fallis Voir le message
    Effectivement l'instruction suivante ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
    Les erreur retourner par python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Process Process-1:
    Traceback (most recent call last):
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\process.py", line 254, in _bootstrap
        self.run()
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\process.py", line 93, in run
        self._target(*self._args, **self._kwargs)
      File "C:\Users\Ved\PythonProjects\Video\Manager\execution.py", line 21, in processscreen
        queuescreen.put(540000, np.reshape(listscreen, -1))  # just a try
      File "C:\Users\Ved\AppData\Local\Programs\Python\Python35-32\lib\multiprocessing\queues.py", line 82, in put
        if not self._sem.acquire(block, timeout):
    TypeError: only length-1 arrays can be converted to Python scalars
    Ben là je ne peux rien pour vous car je ne comprends pas trop ce que vous attendez en passant 2 paramètres (c'est vous qui les avez mis...): le 2ème paramètre de Queue.put est un sémaphore (optionel), c'est pas n'importe quoi.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  2. commande c++ pour le traitement d'images
    Par mateo.14 dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2005, 10h46
  3. [lib] Traitement d'images
    Par Gogoye dans le forum Multimédia
    Réponses: 4
    Dernier message: 19/11/2004, 16h15
  4. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo