【问题标题】:Convert Binary Data to Torch Tensor in Lua在 Lua 中将二进制数据转换为 Torch 张量
【发布时间】:2016-06-09 01:37:21
【问题描述】:

我有使用 luasocket 从 url 下载图像的 Lua 代码:

local http = require('socket.http')
local image = require('image')

image_url = 'https://www.somedomain.com/someimage.jpg'
local body, code = http.request(image_url) -- body has jpg binary data
if not body then error(code) end -- check for errors

为了将这张图片读入 Torch 张量,我将其保存为 jpg 文件并使用 image.load 读取:

-- open a file in binary mode to store the image
local f = assert(io.open('./temp.jpg', 'wb')) 
f:write(body)
f:close()

tensor = image.load('temp.jpg')

有没有一种方法可以直接将二进制 jpg 数据转换为火炬张量,而无需从硬盘驱动器进行写入和读取?比如:

tensor = CovertBinaryDataToTorchTensor(body)

谢谢!

【问题讨论】:

    标签: lua jpeg binary-data torch luasocket


    【解决方案1】:

    image.decompressJPG

    您只需首先将 body 字符串打包到 ByteTensor 中。这可以通过用storage 构造这个张量来完成,它可以用string(str) 设置他的内容。

    【讨论】:

    • torch.ByteTensor(torch.ByteStorage():string(_string_))
    【解决方案2】:

    一种可能的解决方案是使用 graphicsmagick。

    local gm = require 'graphicsmagick'
    local img = gm.Image()
    local ok = pcall(img.fromString, img, body)
    img = img:toTensor('float', 'RGB', 'DHW')
    

    我在https://github.com/clementfarabet/graphicsmagick/blob/master/test/corrupt.lua 找到了这个例子,我知道

    local body, code = http.request(image_url)
    

    body 作为字符串返回。而且,很明显,如果 pcall 返回 false,则图像已损坏。

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 2020-02-11
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2016-09-05
      • 2018-06-28
      • 2018-07-17
      • 2017-07-21
      相关资源
      最近更新 更多