Lire une base de 64 image encodée à partir de la mémoire à l'aide d'OpenCv bibliothèque python

Je suis en train de travailler sur une application pour faire certains de reconnaissance faciale à partir d'une webcam stream. Je reçois des données encodées en base64 uri de la toile et souhaitez l'utiliser pour faire quelque chose comme ceci:

cv2.imshow('image',img)

Les données URI ressemble à quelque chose comme ceci:

 data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7

Donc, pour plus de clarté, j'ai montré ce que l'image ressemble à la chaîne base64 n'est pas cassé.

HTML:

<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7">

La officiel doc dit, que imread accepte un chemin de fichier comme argument. De cette DONC réponse, si je fais quelque chose comme:

 import base64
 imgdata = base64.b64decode(imgstring) #I use imgdata as this variable itself in references below
 filename = 'some_image.jpg'
 with open(filename, 'wb') as f:
    f.write(imgdata)

L'extrait de code ci-dessus fonctionne et que le fichier image est généré correctement. Cependant, je ne pense pas beaucoup de Fichier IO opérations sont réalisables, étant donné que je serais de le faire pour chaque image du flux. Je veux être en mesure de lire l'image dans la mémoire directement de la création de la img objet.

J'ai essayé les deux solutions qui semblent être de travailler pour certaines personnes.

  1. À l'aide de PIL référence:

    pilImage = Image.open(StringIO(imgdata))
    npImage = np.array(pilImage)
    matImage = cv.fromarray(npImage)

    - Je obtenir cv pas définies comme je l'ai openCV3 installé qui est disponible pour moi comme cv2 module. J'ai essayé img = cv2.imdecode(npImage,0), ce ne retourne rien.

  2. Obtenir les octets d'décodé de la chaîne et de la convertir en un tableau numpy de toutes sortes

    file_bytes = numpy.asarray(bytearray(imgdata), dtype=numpy.uint8)
    img = cv2.imdecode(file_bytes, 0) #Here as well I get returned nothing

La documentation n'est pas vraiment mention de ce que les imdecode fonction renvoie. Cependant, les erreurs que j'ai rencontré, je suppose qu'il s'attend à une numpy array ou un scalar comme premier argument. Comment puis-je obtenir une poignée sur l'image dans la mémoire afin que je puisse faire cv2.imshow('image',img) et toutes sortes de trucs cool par la suite.

J'espère que j'ai été capable de me faire comprendre.

  • Vérifier ceci
  • Merci pour votre réponse rapide @Miki, mais np.fromstring ne fonctionne pas ainsi.
  • Et imgstring serait URL de l'image, à droite?
  • c'est le base64 chaîne de caractères représentant l'image