2015-12-29 3 views
0

Je travaille sur l'utilisation de Python 3 pour prendre le flux d'une caméra Web IP et l'afficher sur mon ordinateur. Le code suivant ne fonctionne que dans python 2,7Python 3 IP Webcamera octet Erreur

import cv2 
import urllib.request 
import numpy as np 

stream=urllib.request.urlopen('http://192.168.0.90/mjpg/video.mjpg') 
bytes='' 
while True: 
    bytes+=stream.read(16384) 
    a = bytes.find('\xff\xd8') 
    b = bytes.find('\xff\xd9') 
    if a!=-1 and b!=-1: 
     jpg = bytes[a:b+2] 
     bytes= bytes[b+2:] 
     i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR) 
     cv2.imshow('i',i) 
     if cv2.waitKey(1) ==27: 
      exit(0) 

Cependant quand j'essaie sur Python 3 j'obtenir l'erreur suivante

bytes+=stream.read(16384)

TypeError: Can't convert 'bytes' object to str implicitly

Cela fonctionne parfaitement en 2.7, mais je ne peux pas trouver un moyen de le faire à travailler en 3, des idées?

Répondre

1

dans python3 str ne sont pas seul octets

changement à

bytes=b'' 

octets aussi est un ... builtin vous devriez probablement pas l'utiliser comme un nom de variable

+0

J'ai essayé ce que vous dit mais maintenant il jette cette erreur sur la ligne 9 'a = bytes.find ('\ xff \ xd8') TypeError: 'str' ne supporte pas l'interface tampon' –

+0

' a = bytes.find (b '\ xff \ xd8 ') 'partout où vous utilisez des octets, vous devez le précéder d'un' b' –