2015-11-20 54 views
1

我想從C#傳遞圖像到R.我上傳我的圖像使用FileUpload並將其存儲到一個文件夾「圖像」。當我傳遞圖像位置到R它給我錯誤。所以,你們可以建議我任何替代方法來解決這個錯誤。以下是我的代碼。從C#傳遞圖像到R

// Get Filename from fileupload control 

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);    

engine.Evaluate("imgPath<-'~/images/filename'"); //error in this line 

// Read the image into a raster array 

engine.Evaluate("img<-readJPEG(imgPath, native = FALSE)"); 

// convert the array to a data.frame 

engine.Evaluate("mystring<-as.data.frame(img)"); 

engine.Evaluate("myfreqs <- mystring/sum(mystring)"); 

// vectorize 

engine.Evaluate("abc <- as.data.frame(myfreqs)[,2]"); 

// create input matrices 

engine.Evaluate(@"a <- matrix(c(abc), nrow=4)"); 
+0

你確定你的 '〜/圖片...' 語法適用嗎?僅從ASP.NET獲知這一點。即使在那裏,您也必須將「邏輯」路徑映射到「物理」以使用代碼中的文件。 – nabuchodonossor

+0

我不確定語法。當我通過確切的位置,然後代碼完美的作品。 – Jay

+1

然後很明顯:'〜/ ...'是錯誤的。然後它應該是:engine.Evaluate(「img < - '」+ yourpath +'「); – nabuchodonossor

回答

1

而且這裏的答案:

engine.Evaluate("imgPath<-'" + filename + "'"); 

文件名應該是完整路徑

+0

雅它的工作,但我得到這個錯誤:文件名,目錄名稱或卷標語法不正確。 IO.__ Error.WinIOError(Int32 errorCode,String maybeFullPath) – Jay

+0

maybeFullPath的內容是什麼?這個文件(包括完整路徑)是否存在? – nabuchodonossor

0

前言:我什麼都不知道的C#。但是,你的情況很熟悉。爲什麼不從C#調用shell命令或R進程?我已經在Python和R之間做過這麼多次了。考慮使用R的自動化可執行文件RScript抽象這兩種語言,並使用Process.Start或新的Process對象從C#傳遞圖像名稱作爲參數?

C#腳本

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName); 
string args = @"C\Path\To\RScript.R" + " " + filename; 

// SHELL COMMAND 
// (RScript path can be shortened if using environment variable) 
System.Diagnostics.Process.Start(@"C:\Path\To\RScript.exe", args); 

// PROCESS OBJECT 
var proc = new Process { 
    StartInfo = new ProcessStartInfo { 
     FileName = @"C:\Path\To\RScript.exe", 
     Arguments = @"C\Path\To\RScript.R" + " " + filename, 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     CreateNoWindow = true 
    } 
}; 

[R腳本

options(echo=TRUE) 
args <- commandArgs(trailingOnly = TRUE) 

# pass argument into string 
imgPath <- args[1] 

img <- readJPEG(imgPath, native = FALSE) 

# convert the array to a data.frame 
mystring <- as.data.frame(img)  
myfreqs <- mystring/sum(mystring) 

# vectorize 
abc <- as.data.frame(myfreqs)[,2] 

# create input matrices 
a <- matrix(c(abc), nrow=4) 
+0

每件事情都很好,但我得到「沒有過載的方法'開始'需要3參數「System.Diagnostics.Process.Start(」C:/ Program Files/R/R-3.2.1/bin/i386/RScript.exe「,」C:/ Program Files/R/R-3.2.1「 /bin/i386/RScript.R「,filename); – Jay

+0

請參閱編輯,我必須將R文件字符串與圖像文件名連接起來,以確保只有一個類型:shell命令或進程對象。你的腳本真的叫RScript.R,並且和RScript.exe位於同一個文件夾中?你可以命名你的腳本並把它放在任何地方。 ost使用的佔位符。 – Parfait

+0

雅,我把我的RScript.R文件和RScript.exe放在同一個文件夾中 – Jay