2015-11-03 16 views
6

Ho una funzione Python che restituisce un array numpy multidimensionale. Voglio chiamare questa funzione Python da Lua e ottenere i dati in un Tensore Torcia Lua il più rapidamente possibile. Ho una soluzione che funziona abbastanza lentamente e sto cercando un modo che sia significativamente più veloce (ordine di 10 fps o più). Non sono sicuro che sia possibile.Come convertire rapidamente un array numerico Python-in-Lua restituito in un Tensore della torcia Lua?

Credo che questo sarà utile per gli altri considerando la crescente popolarità di Facebook e Torch e gli estesi strumenti di elaborazione delle immagini di Python di cui Lua è privo.

Sto usando il fork di Bastibe di lunatic-python per chiamare una funzione Python di Lua. Con l'aiuto di questo precedente question e questo documentation, ho trovato un codice che funziona, ma è troppo lento. Sto usando Lua 5.1 e Python 2.7.6 e posso aggiornarli se necessario.

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

import numpy 
import os,sys 
import Image 

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

risposta

3

Prova lutorpy, ha un motore lua in python ed essere in grado di condividere NumPy memoria con torcia, quindi è molto veloce, ecco il codice per il tuo caso:

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

Grazie :) Non ho ancora trovato questo. Stavo cercando un modo per eseguire Python in Lua, visto che stavo lavorando con una grande quantità di codice Lua e avevo solo bisogno di una piccola quantità di Python. Ho dato [link] (https://github.com/facebook/fblualib/blob/master/fblualib/python/README.md) una prova anche però ho avuto bisogno di eseguire con qlua piuttosto che luajit in modo che potessi lavorare con display finestre. –

Problemi correlati