J'ai la prochaine caméra IP Hikvision http://www.hikvision.com/es/Products_accessries_161_i11969.html Je l'ai configuré dans mon réseau local et j'ai une connexion avec le navigateur et je peux voir la caméra fonctionne parfaitement. J'ai cherché dans différents post pour obtenir un cadre dans des appareils photo comme celui-ci, mais je ne peux pas le faire. Ici, j'ai mis le code que j'ai utilisé pour l'essayer et la réponse. Je veux obtenir un cadre et l'enregistrer dans mon destock à traiter après.Obtenir le cadre de caméra IP Hikvision en python
import cv2
import requests
import numpy as np
import urllib
import hikvision.api
import requests
import shutil
#Donwload from: https://github.com/fbradyirl/hikvision/archive/master.zip
hik_camera = hikvision.api.CreateDevice('192.168.1.64', username='admin', password=contrasenia)
"""
INFO:hikvision.api:Initialising new hikvision camera client
INFO:hikvision.api:motion_url: http://192.168.1.64/MotionDetection/1
INFO:hikvision.api:ElementTree.register_namespace: http://www.hikvision.com/ver10/XMLSchema
INFO:hikvision.api:Going to probe device to test connection
INFO:hikvision.api:url: http://192.168.1.64/System/deviceInfo
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): 192.168.1.64
DEBUG:requests.packages.urllib3.connectionpool:"GET /System/deviceInfo HTTP/1.1" 200 696
DEBUG:hikvision.api:response: <Response [200]>
DEBUG:hikvision.api:status_code 200
DEBUG:hikvision.api:element_to_query: .//{http://www.hikvision.com/ver10/XMLSchema}firmwareVersion result: <Element '{http://www.hikvision.com/ver10/XMLSchema}firmwareVersion' at 0x7fb090b76cc8>
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): 192.168.1.64
DEBUG:requests.packages.urllib3.connectionpool:"GET /MotionDetection/1 HTTP/1.1" 200 407
DEBUG:hikvision.api:Response: <?xml version="1.0" encoding="UTF-8"?>
<MotionDetection version="1.0" xmlns="http://www.hikvision.com/ver10/XMLSchema">
<id>1</id>
<enabled>false</enabled>
<regionType>grid</regionType>
<Grid>
<rowGranularity>18</rowGranularity>
<columnGranularity>22</columnGranularity>
</Grid>
<MotionDetectionRegionList>
<sensitivityLevel>0</sensitivityLevel>
</MotionDetectionRegionList>
</MotionDetection>
INFO:hikvision.api:Current motion detection state? enabled: false
WARNING:hikvision.api:sensitivityLevel is 0.
INFO:hikvision.api:sensitivityLevel now set to 1
INFO:hikvision.api:Connected OK!
INFO:hikvision.api:Camera firmaward version: V5.4.3
INFO:hikvision.api:Motion Detection enabled: False
"""
#The method:
"""
hik_camera.__class__( hik_camera.__setattr__(
hik_camera.__delattr__( hik_camera.__sizeof__(
hik_camera.__dict__ hik_camera.__str__(
hik_camera.__dir__( hik_camera.__subclasshook__(
hik_camera.__doc__ hik_camera.__weakref__
hik_camera.__eq__( hik_camera._base
hik_camera.__format__( hik_camera._host
hik_camera.__ge__( hik_camera._password
hik_camera.__getattribute__( hik_camera._sensitivity_level
hik_camera.__gt__( hik_camera._username
hik_camera.__hash__( hik_camera._xml_namespace
hik_camera.__init__( hik_camera.disable_motion_detection(
hik_camera.__le__( hik_camera.enable_motion_detection(
hik_camera.__lt__( hik_camera.get_about(
hik_camera.__module__ hik_camera.get_version(
hik_camera.__ne__( hik_camera.is_motion_detection_enabled(
hik_camera.__new__( hik_camera.motion_url
hik_camera.__reduce__( hik_camera.put_motion_detection_xml(
hik_camera.__reduce_ex__( hik_camera.xml_motion_detection_off
hik_camera.__repr__( hik_camera.xml_motion_detection_on
"""
hik_camera
#<hikvision.api.CreateDevice object at 0x7fb09183ab38>
Avec ce code, je ne peux pas obtenir de trame.
Autres options:
camera = requests.get('http://192.168.1.64', auth=('admin', contrasenia), stream=True)
#INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): 192.168.1.64
#DEBUG:requests.packages.urllib3.connectionpool:"GET/HTTP/1.1" 200 480
chunk = camera.iter_content(chunk_size=1024)
chunk
#<generator object iter_slices at 0x7fb090b7a150>
bytes += bytes()
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: unsupported operand type(s) for +=: 'type' and 'bytes'
Autres:
stream = urllib.request.urlopen("http://192.168.1.64")
#<http.client.HTTPResponse object at 0x7fb090b82320>
Autres:
out_cv2 = cv2.VideoCapture('http://192.168.1.64')
#<VideoCapture 0x7fb090b6dc10>
cv2.imshow(out_cv2)
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: Required argument 'mat' (pos 2) not found
ret, frame = out_cv2.read()
cv2.imshow('out', frame)
#OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /io/opencv/modules/highgui/src/window.cpp, line 304
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#cv2.error: /io/opencv/modules/highgui/src/window.cpp:304: error: (-215) size.width>0 && size.height>0 in function imshow
ret
#False
frame
#
Autres:
from requests.auth import HTTPBasicAuth
requ = requests.get('http://192.168.1.64', auth=HTTPBasicAuth('admin', contrasenia), stream=True)
out_file = open('img.png', 'wb')
shutil.copyfileobj(requ.raw, out_file)
#The file is empty
Ce code provient d'un autre post avec un problème similaire mais je ne peux pas l'utiliser pour obtenir mon objet. Que puis-je faire?
Je peux télécharger une image avec la commande: « wget -r -P ./ -A jpg, jpeg, * http: // admin: [email protected]/Streaming/channels/1/picture ' " Mais j'ai besoin d'obtenir cette image en python, en temps réel, et je ne peux pas me connecter à l'URL que j'ai indiqué. Comment pourrais-je le faire? J'ai essayé avec les bibliothèques urllib mais l'erreur est que ce n'est pas un port non-numérique, en plus, urllib3 n'a pas été possible non plus. Des idées? –
Avez-vous trouvé une solution? J'ai le même problème. – Leopoldo