Delphi與Tesseract OCR的整合問題(CMD指令的參數與變數) |
答題得分者是:P.D.
|
y377980
一般會員 發表:1 回覆:2 積分:0 註冊:2018-06-12 發送簡訊給我 |
小的不才,才剛開始玩Delphi沒幾天就遇到了一些問題,在此請教各位前輩;
最近想要把Tesseract OCR與Delphi結合起來,目前可成功的透過delphi運作OCR,程式碼如下: WinExec('cmd.exe /c cd\ &cd C:\Program Files (x86)\Tesseract-OCR &tesseract C:\Users\TempUser\Desktop\cli.jpg stdout -l eng &pause ',SW_SHOWDEFAULT); 但是若是將路徑改為變數部分,則會失敗: FileName := FDQuery1.FieldByName('file').AsString; sCommand := 'cmd.exe /c cd C:\Program Files (x86)\Tesseract-OCR &'; sCommands := ' tesseract' FileName 'stdout -l eng'; WinExec(PAnsiChar(AnsiString(sCommand sCommands) '&pause'), SW_SHOWDEFAULT); *其中FileName是我去資料庫抓取路徑的變數 我希望實現的是:先從資料庫取得路徑,在透過此路徑抓出檔案做OCR;因為剛開始接觸Delphi沒幾天,Google了許久也苦思不出如何改善此問題,所以來這求教,還望各位前輩給小的一些建議,謝謝。 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
建議你改用 shellexec()
var file : pChar; .... file:= pChar('C:\Program Files (x86)\Tesseract-OCR.....'); ShellExecute(handle, nil, file, pChar('C:\Users\TempUser\Desktop\cli.jpg'), nil, SW_NORMAL); 不過不清楚你的 ocr 要如何帶參數或執行, 以上僅提供參考 ===================引 用 y377980 文 章=================== 小的不才,才剛開始玩Delphi沒幾天就遇到了一些問題,在此請教各位前輩; 最近想要把Tesseract OCR與Delphi結合起來,目前可成功的透過delphi運作OCR,程式碼如下: WinExec('cmd.exe /c cd\ &cd C:\Program Files (x86)\Tesseract-OCR &tesseract C:\Users\TempUser\Desktop\cli.jpg stdout -l eng &pause ',SW_SHOWDEFAULT); 但是若是將路徑改為變數部分,則會失敗: FileName := FDQuery1.FieldByName('file').AsString; sCommand := 'cmd.exe /c cd C:\Program Files (x86)\Tesseract-OCR &'; sCommands := ' tesseract' FileName 'stdout -l eng'; WinExec(PAnsiChar(AnsiString(sCommand sCommands) '&pause'), SW_SHOWDEFAULT); *其中FileName是我去資料庫抓取路徑的變數 我希望實現的是:先從資料庫取得路徑,在透過此路徑抓出檔案做OCR;因為剛開始接觸Delphi沒幾天,Google了許久也苦思不出如何改善此問題,所以來這求教,還望各位前輩給小的一些建議,謝謝。 |
y377980
一般會員 發表:1 回覆:2 積分:0 註冊:2018-06-12 發送簡訊給我 |
非常感謝前輩的幫助,請原諒小的沒有說清楚OCR的運作方式,抱歉。
此OCR主要是使用CMD指令的方式將圖片轉成文字後顯示出來, 於是我想要使用Delphi與Tesseract OCR做整合, 先用Delphi呼叫出CMD,並且藉由Delphi的指令傳遞方式將指令傳到CMD裡, 先進到OCR的根目錄後,使用OCR的指令, 也就是"FileName 'stdout -l eng'; WinExec(PAnsiChar(AnsiString(sCommand sCommands) '&pause'), SW_SHOWDEFAULT); 其中,FileName是我宣告的變數,也就是去資料庫抓取到的路徑。 在這裡會變成:一樣會正常進到OCR根目錄,但是在執行 ' tesseract' FileName 'stdout -l eng'; 指令則會因為沒有跟tesseract同時執行而導致指令錯誤 也就是說,我現在的情況,需要在指令當中插入一個變數,但是在delphi傳送指令時,其實是傳遞' ' 包的字串,當變數包在' '當中也同時變字串, 但我用上述分開字串的方式去傳遞指令時,他就會變成只個別的去執行我用' '包起來的字串, 導致後面那段含有變數的指令無法整段同時運作,進而變成指令錯誤, 不知道是否有方法能夠讓指令依照我的意思去傳遞,而不是單單只是遇到''包起來就直接執行, 再次向各位前輩請教這個小問題,謝謝。 ===================引 用 P.D. 文 章=================== 建議你改用 shellexec() var file : pChar; .... file:= pChar('C:\Program Files (x86)\Tesseract-OCR.....'); ShellExecute(handle, nil, file, pChar('C:\Users\TempUser\Desktop\cli.jpg'), nil, SW_NORMAL); 不過不清楚你的 ocr 要如何帶參數或執行, 以上僅提供參考 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
y377980
一般會員 發表:1 回覆:2 積分:0 註冊:2018-06-12 發送簡訊給我 |
感謝版大大的回覆,後來發現我的問題在於當我把指令分開下、中間參雜變數時,沒有注意到要打空格,所以當他執行我下的指令時,
整段沒空格都打在一起所以指令錯誤; 另外shellExecute真的很好用,感謝大大的建議,非常感謝您的幫助,謝謝。 ===================引 用 P.D. 文 章=================== tesseract 這支應該是執行檔吧! tesseract.exe 如果是, 則 file 就是 'c:\xxxx路徑\tesseract.exe', 後面傳遞的參數就是 "c:\program filex86\xxxxxx.jpg", 這樣利用 ShellExecute() 等同 cmd 執行檔案, 不妨試試看 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |