在Lua中将二进制数据转换为火炬张量



我有Lua代码,可以使用luasocket从url下载图像:

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)

谢谢!

参见image.decompressJPG。

你只需要先把你的body字符串打包在一个字节张量中。这可以通过使用存储构造此张量来完成,该存储可以使用string(str)设置他的内容。

一个潜在的解决方案是使用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,则图像已损坏。

相关内容

  • 没有找到相关文章

最新更新