J'essaie d'utiliser cv2 et pyzbar pour lire en temps réel les codes QR d'une caméra IP.
Cela fonctionne:
os.system("wget --quiet http://user:password@url -O file.jpg") image = cv2.imread("file.jpg") barcodes = pyzbar.decode(image)
Mais c'est clairement inefficace - beaucoup mieux vaut lire directement l'url. Mais je ne peux pas comprendre comment faire cela avec l'authentification de base. J'apprécierais vraiment de l'aide.
(Il y a eu un certain nombre de questions similaires, mais je ne trouve pas de réponse!)
merci
Dan
3 Réponses :
cela peut vous aider
import numpy as np import urllib.request as rq import cv2 from matplotlib import pyplot as plt # load image from url def urlToImage(url): # download image,convert to a NumPy array,and read it into opencv resp = rq.urlopen(url) img = np.asarray(bytearray(resp.read()),dtype="uint8") img = cv2.imdecode(img,cv2.IMREAD_COLOR) #return the image return img img = urlToImage("https://www.pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png") plt.imshow(img)
merci, mais cette approche ne fonctionne pas avec l'authentification de base - j'obtiens une erreur "http.client.InvalidURL: port non numérique:"
Merci à tous, mais il s'avère qu'il existe une bonne réponse simple:
cap=cv2.VideoCapture("http://user:password@url") _, image=cap.read() barcodes = pyzbar.decode(image)
ou il existe une autre solution simple qui n'implique pas de diffuser la vidéo:
from requests.auth import HTTPBasicAuth import numpy as np resp = requests.get(url, auth=(user, password)) image = np.asarray(bytearray(resp.content), dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR)
J'espère que cela aidera d'autres personnes!
peut-être que cela pourrait être un indice: codereview .stackexchange.com / questions / 169398 /…
merci, et je peux voir que la solution est là-dedans, mais c'est trop compliqué / non commenté pour que mes compétences de base en python comprennent tout à fait ce qu'il fait.