C# 關于 PaddleOCRSharp OCR識別的疲勞測試

目錄

關于 PaddleOCRSharp

應用范例演示

?范例運行環境

疲勞測試

添加組件庫

方法設計?

調用示例?

小結


關于 PaddleOCRSharp

PaddleOCRSharp 是百度飛槳封裝的.NET版本 OCR dll 類庫,OCR(Optical Character Recognition)工具可以將圖像文件中的文本內容進行識別,轉換成可編輯的文本格式。從而進一步進行編輯、存儲和分析。

在實際的使用中,這款工具類庫的確很優秀,無論從識別時間還是識別率來說,比較平衡比較令人滿意。

應用范例演示

這是我們在實際應用中開發的一款工具,基于 Windows WinForm 模式,用于識別客戶提供的電子檔案中的文字,并進行文字識別存儲及后續的管理。其主界面運行如下:

如圖,工具程序在導入前提供了一些選項,包括:

(1)導入類型為圖片數據和個人信息(這包括了導入文本到數據庫的選項)

(2)跳過OCR識別功能,是為了直接導入圖片到數據庫,這里我們需要勾選掉以進行測試

(3)對已導入數據執行更新操作,這個選項是純數據庫更新操作

(4)不輸出導出報告,是為了減少內存占用量,提升性能

快捷設置可以提供自動設置4個選項的目的。

工具程序提供了全目錄全文件分析和單目錄分析,全目錄會遍歷該目錄下所有的電子圖片進行識別操作,這里我們選擇的是單目錄文件分析(即選擇一個目錄,只查找該目錄下所有的圖片文件),并將最終的分析結果顯示在報告框中。

在實際的運行應用中,我們的檔案有共計幾千萬份圖片,由于環境及硬件要求,僅提供了三臺配置雷人的臺式機,發現運行幾小時后,PaddleOCRSharp.dll 運行崩潰報錯,如下圖:

因此需要對程序進行一些改進。

?范例運行環境

操作系統: Windows Server 2019 DataCenter

PaddleOCRSharp版本:2.2.0.0

數據庫:Microsoft SQL Server 2016

.net版本:?.netFramework4.0 或以上

開發工具:VS2019 ?C#

疲勞測試

添加組件庫

打 VS2019 創建 WinForm 應用,在解決方案資源管理器中添加引用,成功后如下圖:

?添加 using PaddleOCRSharp; 引用,示例如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PaddleOCRSharp;
using System.IO;
using System.Collections;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Security.Cryptography;

方法設計?

首先在 WinForm (實例假設為 Form1),中初化如下變量,代碼如下:

OCRModelConfig config = null;
OCRParameter oCRParameter = new OCRParameter();
PaddleOCREngine engi = null;
OCRResult ocrResult = new OCRResult();

說明表如下:?

序號參數名類型說明
1config?OCRModelConfigOCR模型的配置對象
2oCRParameter?OCRParameterOCR模型的識別參數對象
3engiPaddleOCREngineOCR模型的識別引擎對象
4ocrResult?OCRResultOCR模型的識別結果對象

初始化對象是疲勞測試的關鍵設計,如果每次都 new 一個對象,系統運行一段時間后就會崩潰。

paddleOCR方法實現對于路徑圖片的文字識別提取,代碼如下:

string paddleOCR(string imagepath)
{var imagebyte = File.ReadAllBytes(imagepath);oCRParameter.cpu_math_library_num_threads = 10;// 預測并發線程數oCRParameter.enable_mkldnn = false; // web部署該值建議設置為0,否則出錯,內存如果使用很大,建議該值也設置為0.oCRParameter.cls = false; // 是否執行文字方向分類;默認falseoCRParameter.use_angle_cls = false; // 是否開啟方向檢測,用于檢測識別180旋轉oCRParameter.det_db_score_mode = false; // 是否使用多段線,即文字區域是用多段線還是用矩形oCRParameter.det_db_unclip_ratio = 1.6f;engi = new PaddleOCREngine(config, oCRParameter);ocrResult = engi.DetectText(imagebyte);engi.Dispose();if (ocrResult != null){return ocrResult.Text;}return "";
}

paddleOCR方法僅需要提供一個圖片完整路徑參數即可,方法中的參數對象需要說明一下,見下表:

序號參數名說明
1cpu_math_library_num_threadsCPU預測時的線程數,在機器核數充足的情況下,該值越大,預測速度越快;在我們應用里設置為10
2enable_mkldnn
? ? ? ? ? ?
即是否使用mkldnn庫, web部署該值建議設置為false,否則出錯,內存如果使用很大,建議該值也設置為false,在這里我們設置為false
3cls
? ? ? ? ? ?
是否執行文字方向分類,在這里我們設置為false
4use_angle_cls
? ? ? ? ? ?
是否開啟方向檢測,用于檢測識別180旋轉,在這里我們設置為false
5det_db_score_mode
? ? ? ? ? ?
是否使用多段線,即文字區域是用多段線還是用矩形,在這里我們設置為false
6det_db_unclip_ratio表示文本框的緊致程度,越小則文本框更靠近文本,在這里我們使用了默認值?1.6f

調用示例?

在Form上假設有按鈕 Button1,則其點擊事件的調用代碼示例如下:

private void Button1_Click(object sender, EventArgs e)
{OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";if (ofd.ShowDialog() != DialogResult.OK) return;string rv2 = paddleOCR(ofd.FileName);MessageBox.Show("共識別提取了"+rv2.Length.ToString()+"個文字\r\n"+ rv2, "識別結果");return;
}

小結

在實際的運行中,三臺機器同時運行,有兩臺機器運行了7天以上暫無報錯,一臺運行了5天左右報錯,唯一的區別在于報錯機器的顯卡配置較低,不同于其它兩臺機器。總體來說對于幾個小時就會出錯,提升了不少,也給我們監控運行狀況提供了空間。

本實例是根據客戶提供的電子圖片類型、目錄結構、JSON配置文件進行的定制開發,在實際應用我們要根據情況進行參數的設置和設計的調整,在測試中我們發現通過本實例的參數設置可以多識別出一些文字,而且識別率還是比較準確的。?

本示例代碼僅供您參考,感謝您的閱讀,希望本文能夠對您有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46423.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java面向對象】抽象類和接口

文章目錄 1.抽象類2.常見的抽象類2.1 Number類2.2 Calendar 和GregorianCalendar 3.接口4.常見接口4.1 Comparable 接口4.2 Cloneable 接口4.3 深淺拷貝 5.類的設計原則 1.抽象類 在繼承的層次結構中,每個新的子類都使類變得更加明確和具體。如果從一個子類向父類追…

Unty 崩潰問題(Burst 1.8.2)

錯誤代碼: Assertion failed on expression: exception SCRIPTING_NULL UnityEngine.StackTraceUtility:ExtractStackTrace () Unity.Burst.BurstCompiler:SendRawCommandToCompiler (string Unity版本:2021.3.17F1,Burst 1.8.2 表現&…

python安裝talib庫教程

【talib介紹】 Talib介紹 Talib,全稱“Technical Analysis Library”,即技術分析庫,是一個廣泛應用于金融量化領域的Python庫。該庫由C語言編寫,支持Python調用,為投資者、交易員和數據分析師提供了強大的技術分析工…

酷炫末世意境背景404單頁HTML源碼

源碼介紹 酷炫末世意境背景404單頁HTML源碼,背景充滿著破壞一切的意境,彷佛末世的到來,可以做網站錯誤頁或者丟失頁面,將下面的代碼放到空白的HTML里面,然后上傳到服務器里面,設置好重定向即可 效果預覽 …

餐邊柜不踩坑的尺寸和做法

大家問餐邊柜怎么做好看不踩坑      十做十不做,有尺寸和總結      1,柜子的深度30和35cm就行,低于30太窄放不了東西      高于35餐廳會顯得窄,      2,鏤空的地方一定要做背板,      3,柜子不用裝修反彈器,也不做拉手,一個容易壞,一個不好看      建議…

論文學習——基于自適應選擇的動態多目標進化優化有效響應策略

論文題目:Effective response strategies based on adaptive selection for dynamic multi-objective evolutionary optimization 基于自適應選擇的動態多目標進化優化有效響應策略(Xiaoli Li a,b,c, Anran Cao a,?, Kang Wang a)Applied S…

零基礎STM32單片機編程入門(十五) DHT11溫濕度傳感器模塊實戰含源碼

文章目錄 一.概要二.DHT11主要性能參數三.DHT11溫度傳感器內部框圖四.DTH11模塊原理圖五.DHT11模塊跟單片機板子接線和通訊時序1.單片機跟DHT11模塊連接示意圖2.單片機跟DHT11模塊通訊流程與時序 六.STM32單片機DHT11溫度傳感器實驗七.CubeMX工程源代碼下載八.小結 一.概要 DH…

App Inventor 2 天氣預報App開發 - 第三方API接入的通用方法(2)

本文來自AppInventor2中文網(www.fun123.cn)參考文檔,調用第三方天氣接口獲取天氣JSON數據,解析并展示在App上。 App效果圖,展示未來7日的天氣預報,包括日期、天氣圖示和溫度: App原理介紹 通…

Linux/Windows 系統分區

1. Windows 系統 1.1 系統分區 系統分區也叫做磁盤分區,即分盤; 舉個例子,好比家里有一個大柜子,把衣服,鞋子,襪子都放在里面,由于沒有隔斷,找的時候非常麻煩,找是能找…

C++ Primer:3.2 標準庫類型string

其他章節&#xff1a;C Primer 學習心得 標準庫類型string表示可變長的字符序列&#xff0c;使用string類型必須首先頭文件&#xff0c;string定義在命名空間std中 #include <string> using std::string定義和初始化string對象 初始化類的對象是由類本身決定的&#x…

借力Jersey,鑄就卓越RESTful API體驗

目錄 maven 創建 jersey 項目 運行 支持返回 json 數據對象 1. 引言 在當今數字化時代&#xff0c;API&#xff08;應用程序編程接口&#xff09;已成為連接不同軟件系統和服務的橋梁。RESTful API以其簡潔、輕量級和易于理解的特點&#xff0c;成為了API設計的首選標準。本…

Hive函數之-posexplode()

1、概念描述&#xff1a; posexplode() 是一個內建函數&#xff0c;用于處理數組數據&#xff0c;并將數組的每個元素及其索引&#xff08;位置&#xff09;轉換為兩列的表格式數據。posexplode() 函數對于處理需要元素位置信息的數組特別有用。pos就是postion的縮寫&#xff…

Windows雙網卡上網原理以及配置方法

目錄 1. 背景 2. IP路由原理 3. windows雙網卡上網解決方案 3.1. 基礎配置解決方案 3.2. 高階配置解決方案 1. 背景 在windwos上使用多網卡在工作和生活中是一個常見的操作&#xff0c;比如為了獲取內部消息將有線連接到內部局域網中&#xff0c;為而了訪問外網又將電腦的…

華為云GaussDB部署指南:主備架構的常見問題與解決方案

文章目錄 華為云GaussDB部署指南&#xff1a;主備架構的常見問題與解決方案背景介紹部署步驟1.修改主機名2.軟件安裝檢查3.禁用交換內存4.創建數據目錄并掛載5.配置NTP時鐘同步6.添加資源限制參數7.修改網卡的MTU8.上傳安裝工具包9.編輯集群配置文件10.修改集群安裝模板11.安裝…

木舟0基礎學習Java的第二十天(線程,實現,匿名有名,休眠,守護,加入,設計,計時器,通信)

多線程 并發執行的技術 并發和并行 并發&#xff1a;同一時間 有多個指令 在單個CPU上 交替執行 并行&#xff1a;同一時間 有多個指令 在多個CPU上 執行 進程和線程 進程&#xff1a;獨立運行 任何進程 都可以同其他進程一起 并發執行 線程&#xff1a;是進程中的單個順…

【.NET全棧】ASP.NET開發Web應用——站點導航技術

文章目錄 前言一、站點地圖1、定義站點地圖文件2、使用SiteMapPath控件3、SiteMap類4、URL地址映射 二、TreeView控件1、使用TreeView控件2、以編程的方式添加節點3、使用TreeView控件導航4、綁定到XML文件5、按需加載節點6、帶復選框的TreeView控件 三、Menu控件1、使用Menu控…

Hutool-Guava

目錄 一、Guava 二、Hutool 三、區別與聯系 四、使用場景 五、Guava工具類 1.集合工具類 2.字符串工具類 3.并發工具類 六、Hutool 1.字符串工具類 2.文件工具類 Hutool 和 Guava 都是 Java 開發中非常實用的工具庫&#xff0c;它們提供了許多方便的工具類和方法&am…

字節抖音電商 后端開發崗位 一面

筆者整理答案&#xff0c;以供參考 自我介紹 項目&#xff08;20分鐘&#xff09; RocketMQ延時消息的底層實現 回答&#xff1a; 延時消息的實現主要依賴于RocketMQ中的定時任務機制。消息被發送到Broker時&#xff0c;會先存儲在一個特定的延時消息隊列中。Broker會定時掃…

c++ extern 關鍵字

C中的extern關鍵字和跨語言互操作 變量的聲明與定義 extern關鍵字用于聲明在另一個翻譯單元&#xff08;文件&#xff09;中定義的變量或函數。通過extern關鍵字&#xff0c;可以在多個文件中訪問全局變量或函數。 變量聲明示例 文件&#xff1a;main.cpp #include <io…

chatglm2-6b-prompt嘗試

參考https://cloud.tencent.com/developer/article/2426296 chatglm2-6b&#xff0c;通過prompt來實現zero-shot/fewshot的自然語言處理任務 import json import re import os from modelscope.utils.constant import Tasks from modelscope import Model from modelscope.pi…