2017-06-15 683 views
3

我拥有下一台海康威视IP摄像机http://www.hikvision.com/es/Products_accessries_161_i11969.html我在本地网络中配置了它,并且我已经连接到浏览器,并且我可以看到相机正常工作。我已经在不同的帖子中搜索这样的相机,但我不能这样做。在这里,我把我用来尝试它的代码和响应。 我想获得一个框架并将其保存在我的去库存中以进行处理。在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> 

使用此代码我无法获得一个框架。

其他选项:

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' 

其他:

stream = urllib.request.urlopen("http://192.168.1.64") 
#<http.client.HTTPResponse object at 0x7fb090b82320> 

其他:

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 
# 

其他:

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 

此代码是从其他帖子与类似的问题,但我不能用它来获得我的目标。我能做什么?

+0

我可以使用以下命令下载图片: “Wget -r -P ./ -A jpg,jpeg,*'http:// admin:[email protected]/Streaming/channels/1/picture' “ 但我需要在python中实时获取此图像,并且无法连接到我指出的网址。我怎么能这样做?我曾尝试使用urllib库,但错误是它不是非数字端口,此外,urllib3也不可能。有任何想法吗? –

+0

您是否找到解决方案?我也有同样的问题。 – Leopoldo

回答

0

我在我的电脑有一个问题,opencv版本有问题。现在,我有opencv 3.2,我可以做下一行:

cv2.VideoCapture("rstp://admin:[email protected]/doc/page/previw.asp") 

我可以采取帧。