【问题标题】:How to upload image from buffer with curl?如何使用 curl 从缓冲区上传图像?
【发布时间】:2013-11-30 21:30:18
【问题描述】:

我正在使用Pierre Raufast blog 中描述的软件成功捕获帧。 我尝试使用 IplImage 结构或原始缓冲区上传图像缓冲区(请查看此 source code 中的 video_buffer_callback 函数中的 bufferdstImage)。我正在使用来自 libcurl example 的修改代码。

cvMatBuff = cvEncodeImage(".jpg", py, 0);
/* Fill in the file upload field from buffer */ 
curl_formadd(&formpost,
           &lastptr,
           CURLFORM_COPYNAME, "file",
           CURLFORM_BUFFER, "nowy.jpg",
           CURLFORM_BUFFERPTR, cvMatBuff,
           CURLFORM_END);
curl = curl_easy_init();

不幸的是,执行后我的烧瓶应用程序出现 500 错误。

192.168.0.16 - - [17/Nov/2013 21:02:22] "POST /faces HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('192.168.0.16', 48537)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 649, in __init__
    self.handle()
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/serving.py", line 200, in handle
    rv = BaseHTTPRequestHandler.handle(self)
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
    self.handle_one_request()
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/serving.py", line 235, in handle_one_request
    return self.run_wsgi()
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/serving.py", line 194, in run_wsgi
    traceback.plaintext)
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/utils.py", line 71, in __get__
    value = self.func(obj)
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/debug/tbtools.py", line 359, in plaintext
    return u'\n'.join(self.generate_plaintext_traceback())
  File "/home/usr/flask/lib/python2.7/site-packages/werkzeug/debug/tbtools.py", line 353, in generate_plaintext_traceback
    frame.function_name
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 17: ordinal not in range(128)

当我通过以下方式从文件上传图像时,我的服务器端代码工作正常:

curl -F "file=@./medium.jpg" http://localhost:5000/faces

【问题讨论】:

    标签: c opencv curl raspberry-pi


    【解决方案1】:

    此外,您必须使用CURLFORM_BUFFERLENGTH, len 将缓冲区长度显式传递给libcurl。

    另外我建议您使用 CURLFORM_CONTENTTYPE, "image/jpeg" 传递内容类型

    最后你还必须注意将 proper 缓冲区传递给 libcurl。

    cvEncodeImage 返回CV_8UC1 类型的单行矩阵。我不知道cvEncodeImage(?)是否有任何内存对齐。因此,您需要做的就是遍历cvMatBuff->data.ptr 数组,并将其逐行复制到大小为cvMatBuff->rows*cvMatBuff->cols 的预分配缓冲区中,注意使用cvMatBuff->step 跳到下一行(步幅)。

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2021-02-04
      • 2020-10-18
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多