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

时间:2016-02-26 01:06:28

标签: lua jpeg binary-data torch luasocket

我有Lua代码,使用luasocket从网址下载图像:

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)

谢谢!

2 个答案:

答案 0 :(得分:3)

请参阅image.decompressJPG

您必须首先将body字符串打包在ByteTensor中。这可以通过使用storage构建此张量来完成,string(str)可以使用{{3}}设置其内容。

答案 1 :(得分:0)

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

local body, code = http.request(image_url)

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

body

pcall作为字符串返回。而且,显然如果final Handler handler = new Handler(); //100ms wait to scroll to item after applying changes handler.postDelayed(new Runnable() { @Override public void run() { listView.smoothScrollToPosition(selectedPosition); }}, 100); 返回false,则图像已损坏。