相关疑难解决方法(0)

Python urllib2,基本HTTP身份验证和tr.im.

我正在玩,尝试编写一些代码来使用tr.im API来缩短URL.

在阅读http://docs.python.org/library/urllib2.html后,我尝试了:

   TRIM_API_URL = 'http://api.tr.im/api'
   auth_handler = urllib2.HTTPBasicAuthHandler()
   auth_handler.add_password(realm='tr.im',
                             uri=TRIM_API_URL,
                             user=USERNAME,
                             passwd=PASSWORD)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

response.code是200(我认为它应该是202).url有效,但基本的HTTP身份验证似乎没有用,因为缩短的URL不在我的URL列表中(在http://tr.im/?page=1).

在阅读http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly后, 我也尝试过:

   TRIM_API_URL = 'api.tr.im/api'
   password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
   password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
   auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('http://%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果.(response.code为200且url有效,但未在我的帐户http://tr.im/中记录.)

如果我使用查询字符串参数而不是基本HTTP身份验证,如下所示:

   TRIM_API_URL = 'http://api.tr.im/api'
   response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
                              % (TRIM_API_URL,
                                 url_to_trim,
                                 USERNAME,
                                 PASSWORD))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

...然后不仅url有效,而且它记录在我的tr.im帐户中.(虽然response.code仍然是200.) …

python authentication http

83
推荐指数
4
解决办法
12万
查看次数

使用 cv2.VideoCapture() 从 IP 摄像头读取流

参考这个类似的问题How to parse mjpeg http stream from ip camera? 我能够使用requests以下命令从 IP 摄像机读取流:

stream = requests.get('http://<user>:<pass>@<addr>:<port>/videostream.cgi', stream=True)

bytez = ''
while True:
    bytez += stream.raw.read(16384)
    ...
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但想通过使用cv2.VideoCapture()请求来实现。

我尝试了以下方式的变化:

cap = cv2.VideoCapture()
cap.open('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')

while(True):
    ret, frame = cap.read()
    ...
Run Code Online (Sandbox Code Playgroud)

但无法得到任何东西,但关于空帧的异常。

如何使用 cv2.VideoCapture() 读取 IP 摄像机流?

python opencv

5
推荐指数
1
解决办法
3万
查看次数

OpenCV从stdin加载图像/视频

我试图使用以下代码从stdin读取jpg图像:

int c,count=0;
vector<uchar> buffer; //buffer for coding

/* for stdin, we need to read in the entire stream until EOF */
while ((c = fgetc(stdin)) != EOF) {
     buffer.push_back(c);
 count++;
}


cout << "Bytes: " << count << endl;
Mat im = imdecode(Mat(buffer),CV_LOAD_IMAGE_COLOR);
cout << "Decoded\n";
namedWindow("image", CV_WINDOW_AUTOSIZE);
imshow("image",im);

cv::waitKey(0);
Run Code Online (Sandbox Code Playgroud)

我在cmd中运行它:

OpenCVTest < thumb.jpg
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

Bytes: 335
Decoded
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in unknown function, file ..\..\..\src\opencv\modules\core\src\array.cpp, line 2482
Run Code Online (Sandbox Code Playgroud)

该错误似乎是合理的,因为图像大约是7 …

opencv

4
推荐指数
1
解决办法
2346
查看次数

从视频/图像中提取元数据

我从 IP 摄像机获取 MJPEG 流,我正在查看并保存在我的计算机上。我如何做的代码可以在这里找到。答案解释了如何从流中提取图像并保存它们。

为了提取图像,我使用答案中列出的方法并保存它,我只是使用 OpenCV 将图像放入 avi 容器中。代码如下。

writer=cv.CreateVideoWriter("video1.avi", cv.CV_FOURCC('X', '2', '6', '4'), fps, (320,240))
cv_image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR)bitmap=cv.CreateImageHeader((cv_image.shape[1], cv_image.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(bitmap, cv_image.tostring(), cv_image.dtype.itemsize * 3 * cv_image.shape[1])
cv.WriteFrame(writer, bitmap)
Run Code Online (Sandbox Code Playgroud)

这里的位图是我正在显示并放入 avi 容器中的图像。

由于图像来自 IP 摄像机,因此它必须具有一些元数据,例如摄像机插入的时间戳。

问题:如何提取元数据?

我想到了两种方法来做到这一点:

  1. 从视频中提取帧,然后访问它们以访问时间戳。
  2. 从视频本身中提取时间戳。

我该如何进行?我使用哪种方法?我正在使用 Python 和 Opencv,并且正在 Windows 7 上工作。

我也读过与我正在尝试做的事情有关。它没有解决我的问题。

python video opencv metadata ip-camera

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

opencv ×3

python ×3

authentication ×1

http ×1

ip-camera ×1

metadata ×1

video ×1