Ошибка байта IP-камеры Python 3

Я работаю над использованием Python 3, чтобы принимать поток IP-веб-камеры и отображать его на своем компьютере. Следующий код работает только в Python 2.7.

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)

Однако, когда я пробую это на Python 3, я получаю следующую ошибку

байты+=stream.read(16384)

TypeError: невозможно неявно преобразовать объект 'bytes' в str

Это отлично работает в 2.7, но я не могу найти способ заставить его работать в 3, есть идеи?


person Community    schedule 29.12.2015    source источник


Ответы (1)


в python3 str не одиночные байты

изменить его на

bytes=b''

также байты являются встроенными ... вам, вероятно, не следует использовать это как имя переменной

person Joran Beasley    schedule 29.12.2015
comment
Я попробовал то, что вы сказали, но теперь выдает эту ошибку в строке 9 a = bytes.find('\xff\xd8') TypeError: 'str' does not support the buffer interface - person ; 29.12.2015
comment
a = bytes.find(b'\xff\xd8') везде, где вы используете байты, вы должны предварять их b - person Joran Beasley; 29.12.2015