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

我有一段 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 包含 jpg 二进制数据
if not body then error(code) end -- 检查错误

为了将这个图像读入到 Torch 张量中,我将它保存在一个 jpg 文件中,并使用 image.load 读取它:

-- 以二进制模式打开一个文件来存储图像
local f = assert(io.open('./temp.jpg', 'wb'))
f:write(body)
f:close()

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

是否有一种方法可以直接将二进制 jpg 数据转换为 Torch 张量,而不需要写入并从硬盘上读取? 是否可以这样做:

tensor = CovertBinaryDataToTorchTensor(body)

谢谢!

点赞
用户2546626
用户2546626

请参阅 image.decompressJPG

首先您需要将 body 字符串打包进 ByteTensor。方法是利用一个 storage,并使用 string(str) 来设置内容。

2016-02-26 08:30:27
用户3859312
用户3859312

一个潜在的解决方案是使用 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,那么图片就是损坏的。

2016-05-27 20:38:04