2015-11-03 13 views
6

Ich habe eine Python-Funktion, die ein mehrdimensionales numpy Array zurückgibt. Ich möchte diese Python-Funktion von Lua aufrufen und die Daten so schnell wie möglich in einen Lua Torch Tensor bringen. Ich habe eine Lösung, die ziemlich langsam arbeitet und nach einem Weg sucht, der wesentlich schneller ist (Ordnung von 10fps oder mehr). Ich bin mir nicht sicher, ob das möglich ist.Wie konvertiert man ein zurückgegebenes Python-in-Lua-Array in einen Lua Torch Tensor?

Ich glaube, dass dies für andere von Nutzen sein wird, wenn man die wachsende Popularität der von Facebook unterstützten Torch und die umfangreichen, einfach zu bedienenden Bildverarbeitungswerkzeuge in Python berücksichtigt, von denen Lua nichts hat.

Ich benutze die Bastibe-Verzweigung von lunatic-python, um eine Python-Funktion von Lua aufzurufen. Mit Hilfe von diesem vorherigen question und diesem documentation, habe ich einen Code, der funktioniert, aber viel zu langsam ist. Ich verwende Lua 5.1 und Python 2.7.6 und kann diese bei Bedarf aktualisieren.

Lua-Code: "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-Code: "test_python.py"

import numpy 
import os,sys 
import Image 

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

Antwort

3

Versuchen lutorpy, hat es einen lua Motor in Python und in der Lage numpy zu teilen Speicher mit Taschenlampe, so ist es sehr schnell, hier ist der Code für Ihren Fall:

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

Vielen Dank :) Habe noch nicht über diese noch. Ich suchte nach einer Möglichkeit, Python in Lua auszuführen, da ich mit einer großen Menge Lua-Code arbeitete und nur eine kleine Menge Python benötigte. Ich gab [link] (https://github.com/facebook/fblualib/blob/master/fblualib/python/README.md) einen Versuch auch, aber ich musste mit qlua statt luajit laufen, damit ich mit Display arbeiten konnte Fenster. –

Verwandte Themen