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.