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

在Lua中将二进制数据转换为Torch张量,lua,jpeg,binary-data,torch,luasocket,Lua,Jpeg,Binary Data,Torch,Luasocket,我有一个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(c

我有一个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
为了将此图像读入火炬张量,我将其保存在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数据转换为torch张量,而无需对硬盘进行写入和读取?比如:

tensor = CovertBinaryDataToTorchTensor(body)
谢谢大家!


您只需先将
正文
字符串打包到ByteSensor中即可。这可以通过用a构造这个张量来实现,a可以设置他的内容。

一个潜在的解决方案是使用GraphicsMagck

local gm = require 'graphicsmagick'
local img = gm.Image()
local ok = pcall(img.fromString, img, body)
img = img:toTensor('float', 'RGB', 'DHW')
我发现这个例子,我知道

local body, code = http.request(image_url)
将以字符串形式返回
body
。显然,如果
pcall
返回false,则图像已损坏。

torch.ByteTensor(torch.ByteStorage():string(_string))