2015-11-03 6 views
6

मेरे पास एक पायथन फ़ंक्शन है जो एक बहु-आयामी numpy सरणी देता है। मैं इस पायथन समारोह को लुआ से कॉल करना चाहता हूं और जितनी जल्दी हो सके डेटा को लुआ टॉर्च टेंसर में प्राप्त करना चाहता हूं। मेरे पास एक समाधान है जो धीरे-धीरे काम करता है और एक ऐसे तरीके की तलाश में है जो काफी तेज है (10fps या अधिक का क्रम)। मुझे यकीन नहीं है कि यह संभव है।लौटा मशाल टेंसर में एक लौटा पायथन-इन-लुआ numpy सरणी को जल्दी से कैसे परिवर्तित करें?

मेरा मानना ​​है कि यह फेसबुक समर्थित टॉर्च की बढ़ती लोकप्रियता और पाइथन में उपलब्ध व्यापक उपयोग में आसान छवि-प्रसंस्करण उपकरण पर विचार करने वाले लोगों के लिए उपयोग किया जाएगा, जिनमें लूआ की कमी है।

मैं लुआ से पाइथन समारोह को कॉल करने के लिए पागल-पायथन के बस्तीबे कांटा का उपयोग कर रहा हूं। इस पिछले question और इस documentation से सहायता के साथ, मैं कुछ कोड के साथ आया हूं जो काम करता है, लेकिन बहुत धीमा है। मैं लुआ 5.1 और पायथन 2.7.6 का उपयोग कर रहा हूं और यदि आवश्यक हो तो इन्हें अपडेट कर सकता हूं।

लुआ कोड: "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) 

अजगर कोड: "test_python.py"

import numpy 
import os,sys 
import Image 

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

उत्तर

3

प्रयास करें lutorpy, यह अजगर में एक 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

धन्यवाद :) अभी तक इस पर नहीं आया है। मैं लुआ में पायथन चलाने के लिए एक रास्ता तलाश रहा था, हालांकि मैं बड़ी मात्रा में लुआ कोड के साथ काम कर रहा था और केवल थोड़ी सी पाइथन की आवश्यकता थी। मैंने [लिंक] दिया है (https://github.com/facebook/fblualib/blob/master/fblualib/python/README.md) एक कोशिश भी है, हालांकि मुझे लुजाइट के बजाए क्लूआ के साथ दौड़ने की ज़रूरत है ताकि मैं प्रदर्शन के साथ काम कर सकूं विंडोज। –

संबंधित मुद्दे