TesseractOCR-GUI:基於WPF/C#構建TesseractOCR簡單易用的使用者介面

mingupupup發表於2024-12-07

前言

前篇文章使用Tesseract進行圖片文字識別介紹瞭如何安裝TesseractOCR與TesseractOCR的命令列使用。但在日常使用過程中,命令列使用還是不太方便的,因此今天介紹一下如何使用WPF/C#構建TesseractOCR簡單易用的使用者介面。

普通使用者使用

參照上一篇教程,在本地安裝好TesseractOCR之後,在GitHub的Release頁面進行下載。

GitHub地址:https://github.com/Ming-jiayou/TesseractOCR-GUI

image-20241207134914277

推薦選擇依賴框架的壓縮包,體積比較小:

image-20241207135004215

解壓如下所示:

image-20241207135159013

雙擊開啟即可使用,如果顯示你沒有安裝框架,點選連結,下載安裝一下框架,即可開啟使用。

識別中文:

image-20241207135447692

識別英文:

image-20241207135519142

使用非常簡單方便。

WPF/C#程式設計師使用

經過簡單的調研,發現構建TesseractOCR-GUI主要可以透過兩種方式。一種就是對命令列的使用進行封裝,另一種就是對TesseractOCR的C++ API進行封裝。

對命令列的使用進行封裝比較簡單,而且目前暫時也滿足了我的使用需求,因此目前只實現了這種方式,pytesseract好像也是使用的這種方式。第二種呼叫Tesseract C++ API的方式,可能得等第一種對命令列的使用進行封裝無法滿足需求的時候,才會去探索了。

專案結構:

image-20241207140458038

開發工具: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,就是最大的支援!!

還有任何問題,歡迎透過微信公眾號與我聯絡:

qrcode_for_gh_eb0908859e11_344

相關文章