2015-11-03 10 views
6

私は多次元配列を返すPython関数を持っています。私はこのPython関数をLuaから呼び出し、できるだけ早くLua Torch Tensorにデータを取得したいと考えています。私は非常にゆっくりと動作するソリューションを持っており、大幅に高速(10fps以上のオーダー)の方法を探しています。これが可能かどうかは分かりません。私は、これはFacebookの人気の高まりを考慮し、他の人に使用されるであろうと信じて返されたPython-in-Luaのnumpy配列をLua Torch Tensorに素早く変換するには?

はトーチとLuaが欠けているのはPythonで利用可能な大規模な簡単に使用できる画像処理ツールを支持しました。

LuaからPython関数を呼び出すために、lunatic-pythonのBastibeフォークを使用しています。この先のquestionとこのdocumentationの助けを借りて、私は動作するいくつかのコードを考え出しましたが、遅すぎます。私はLua 5.1とPython 2.7.6を使用しており、必要に応じてこれらを更新できます。

Luaのコード: "test_lua.lua"

require 'torch' 

print(package.loadlib("libpython2.7.so", "*")) 
require("lua-python") 

getImage = python.import "test_python".getImage 

pb = python.builtins() 

function getImageTensor(pythonImageHandle,width,height) 
    imageTensor = torch.Tensor(3,height,width) 
    image_0 = python.asindx(pythonImageHandle(height,width)) 
    for i=0,height-1 do 
     image_1 = python.asindx(image_0[i]) 
     for j=0,width-1 do 
      image_2 = python.asindx(image_1[j]) 
      for k=0,2 do 
       -- Tensor indices begin at 1 
       -- User python inbuilt to-int function to return integer 
       imageTensor[k+1][i+1][j+1] = pb.int(image_2[k])/255 
      end 
     end 
    end 
    return imageTensor 
end 


a = getImageTensor(getImage,600,400) 

Pythonのコード: "test_python.py"

import numpy 
import os,sys 
import Image 

def getImage(width, height): 
    return numpy.asarray(Image.open("image.jpg")) 

答えて

3

lutorpyを試してみて、それはPythonでLuaのエンジンを持っており、numpyのを共有することができますトーチのメモリは非常に速いので、ここにあなたのケースのコードはあります:

import numpy 
import Image 
import lutorpy as lua 

getImage = numpy.asarray(Image.open("image.jpg")) 
a = torch.fromNumpyArray(getImage) 

# now you can use your image as torch Tensor 
# for example: use SpatialConvolution from nn to process the image 
require("nn") 
n = nn.SpatialConvolution(1,16,12,12) 
res = n._forward(a) 
print(res._size()) 

# convert back to numpy array 
output = res.asNumpyArray() 
+0

ありがとう:)これはまだわかりません。私はLuaでPythonを実行する方法を探していましたが、大量のLuaコードを扱っていて、少量のPythonしか必要としませんでした。私はディスプレイで動作することができるようにqluaではなくluajitで実行するために必要なしかし、私はまた、[リンク](https://github.com/facebook/fblualib/blob/master/fblualib/python/README.mdに)試してみました窓。 –

関連する問題