前言
前篇文章使用Tesseract進行圖片文字識別介紹瞭如何安裝TesseractOCR與TesseractOCR的命令列使用。但在日常使用過程中,命令列使用還是不太方便的,因此今天介紹一下如何使用WPF/C#構建TesseractOCR簡單易用的使用者介面。
普通使用者使用
參照上一篇教程,在本地安裝好TesseractOCR之後,在GitHub的Release頁面進行下載。
GitHub地址:https://github.com/Ming-jiayou/TesseractOCR-GUI
推薦選擇依賴框架的壓縮包,體積比較小:
解壓如下所示:
雙擊開啟即可使用,如果顯示你沒有安裝框架,點選連結,下載安裝一下框架,即可開啟使用。
識別中文:
識別英文:
使用非常簡單方便。
WPF/C#程式設計師使用
經過簡單的調研,發現構建TesseractOCR-GUI主要可以透過兩種方式。一種就是對命令列的使用進行封裝,另一種就是對TesseractOCR的C++ API進行封裝。
對命令列的使用進行封裝比較簡單,而且目前暫時也滿足了我的使用需求,因此目前只實現了這種方式,pytesseract好像也是使用的這種方式。第二種呼叫Tesseract C++ API的方式,可能得等第一種對命令列的使用進行封裝無法滿足需求的時候,才會去探索了。
專案結構:
開發工具:Visual Studio 2022
.NET版本:.NET 8
使用的包:Prism + WPF UI
核心程式碼:
private void ExecuteOCRCommand()
{
string command;
switch(SelectedLanguage)
{
case "中文":
command = $"tesseract {SelectedFilePath} stdout -l chi_sim quiet";
break;
case "英文":
command = $"tesseract {SelectedFilePath} stdout -l eng quiet";
break;
default:
command = $"tesseract {SelectedFilePath} stdout -l chi_sim quiet";
break;
}
// 建立一個新的 ProcessStartInfo 物件
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
FileName = "cmd.exe", // 使用 cmd.exe 作為命令直譯器
Arguments = $"/c {command}", // 傳遞命令作為引數,/c 表示執行命令後退出
RedirectStandardOutput = true, // 重定向標準輸出
RedirectStandardError = true, // 重定向標準錯誤
UseShellExecute = false, // 不使用 Shell 執行
CreateNoWindow = true, // 不建立新視窗
StandardOutputEncoding = Encoding.GetEncoding("UTF-8"), // 設定標準輸出的編碼
StandardErrorEncoding = Encoding.GetEncoding("UTF-8") // 設定標準錯誤的編碼
};
// 建立一個新的 Process 物件
Process process = new Process
{
StartInfo = processStartInfo
};
// 啟動程序
process.Start();
// 讀取輸出
OCRText = process.StandardOutput.ReadToEnd();
// 讀取錯誤(如果有)
string error = process.StandardError.ReadToEnd();
// 等待程序退出
process.WaitForExit();
}
最後
本專案可以幫助人們更簡單方便地使用TesseractOCR,對WPF/C#新手程式設計師,也可以當作一個簡單的練手小專案。
如果對你有所幫助,點顆star,就是最大的支援!!
還有任何問題,歡迎透過微信公眾號與我聯絡: