簡単な紹介ユーザーは、認識する必要のある写真を一括でアップロードします。アップロードが成功すると、システムは Hangfire バックグラウンド ジョブを開始し、PaddleOCR サービスを呼び出して結果を返します。このプロセスは、マイクロサービス アーキテクチャ モデルに似ています。 パドルOCR PaddleOCR は Baidu AI チームのオープンソース プロジェクトです。すべての無料オープンソース OCR プロジェクトの中で、最も認識効果の高いプロジェクトです。PaddleOCR を通じて詳細を知ることができます。Python 開発の経験がない場合、環境の展開で問題が発生する可能性がありますが、ほとんどの場合、解決策を見つけることができます。 デモ https://razor.i247365.net/invoices/index ユーザーは、識別するファイルを一括でアップロードします。仮想マシンのパフォーマンスが非常に低いため、自動識別のためにシステム バックグラウンドにアップロードすることしかできません。 システムが認識を完了すると、自動的にユーザーに通知し、ステータスを変更します。ユーザーは認識結果をプレビューできます。 動作環境- .net 5.0>
- Python 3.7>
- ASP.NET Core Razor ページ アプリケーション 5.0 ソース コード ブランチ (features\invoice_ocr) RazorPageCleanArchitecture\features\invoice_ocr
- PaddleOCR Web API (CentOS Alibaba Cloud ホスト) PaddlePaddle/PaddleOCR
- Hangfire ダッシュボード HangfireIO/Hangfire
テクノロジースタック- ASP.NET コア
- JQuery/Javascript で
- 簡単UI
- パイソン
PaddleOCR環境をインストールするPaddleOCR は glibc 2.23 で動作することがテストされています。他の glibc バージョンをテストしたり、glic 2.23 をインストールしたりすることもできます。 PaddleOCR 作業環境 - パドルパドル 2.0.0
- python3.7
- glibc2.23 より
- cuDNN 7.6+ (GPU)
PaddleOCR を実行するには、提供されている docker を使用することをお勧めします。docker と nvidia-docker の使用に関する詳細については、リンクを参照してください。 予測コードを Mac または Windows で直接実行する場合は、手順 2 から開始できます。 1. (推奨) Docker 環境を準備します。この画像を初めて使用する場合は、自動的にダウンロードされます。しばらくお待ちください。 # 作業ディレクトリに切り替える cd /ホーム/プロジェクト # 初回実行時には Docker コンテナを作成する必要があります。再度実行するときに現在のコマンドを実行する必要はありません。 # ppocr という名前の Docker コンテナを作成し、現在のディレクトリをコンテナの/ paddle ディレクトリにマップします
CPU環境でdockerを使用する場合は、nvidia - dockerの代わりにdockerを使用してdockerを作成します。 sudo docker run
CUDA10を使用する場合は、以下のコマンドを実行してコンテナを作成し、dockerコンテナの共有メモリshm - sizeを64Gに設定します。32G以上に設定することをお勧めします。 sudo nvidia - docker run
[ DockerHub ] ( https://hub.docker.com/r/paddlepaddle/paddle/tags/ )にアクセスして、 マシンに適したイメージを取得することもできます。
# ctrl + P + Q で Docker コンテナを終了し、次のコマンドを使用して Docker コンテナに再度入ります sudo docker コンテナ exec -it ppocr / bin / bash
2. PaddlePaddle 2.0をインストールする pip3 インストール
マシンに CUDA9 または CUDA10 がインストールされている場合は、次のコマンドを実行してインストールします。 python3 - m pip install paddlepaddle - gpu == 2.0.0 - i https://mirror.baidu.com/pypi/simple
マシンがCPUの場合は、次のコマンドを実行してインストールします。
python3 - m pip install paddlepaddle == 2.0.0 - i https://mirror.baidu.com/pypi/simple
詳しいバージョン要件については、 [ インストールドキュメント] ( https://www.paddlepaddle.org.cn/install/quick )の手順を参照してください。
3. PaddleOCRリポジトリのコードをクローンする 【 推奨】 git clone https://github.com/PaddlePaddle/PaddleOCR
ネットワークの問題によりプルが失敗した場合は、Code Cloud でのホスティングを使用することもできます。
git クローンhttps://gitee.com/paddlepaddle/PaddleOCR
注意: CodeCloud でホストされているコードは、この GitHub プロジェクトの更新をリアルタイムで同期できない可能性があります。3 ~ 5日の遅延があります。まずは推奨される方法を使用してください。
4. サードパーティのライブラリをインストールする cd パドルOCR pip3 インストール-r要件.txt
**ご質問がございましたら、メッセージを残していただければお手伝いいたします**
## キーコード分析 httpClient は PaddleOCR API を呼び出す 自動失敗再試行戦略を開始する ```js サービス.AddHttpClient ( "ocr" , c => { c .BaseAddress =新しい Uri ( "https://paddleocr.i247365.net/predict/ocr_system" ) ; c .DefaultRequestHeaders .Accept .Add (新しい MediaTypeWithQualityHeaderValue ( "application/json" ) ) ; } ) .AddTransientHttpErrorPolicy (ポリシー=>ポリシー.WaitAndRetryAsync ( 3 、 _ => TimeSpan .FromMilliseconds ( 1000 ) ) ) ; ;
パブリック void 認識( int id ) { ( var client = _httpClientFactory .CreateClient ( "ocr" ) )を使用します { var 請求書= _context.Invoices.Find ( id ) ; var imgfile = Path .Combine ( Directory .GetCurrentDirectory ( ) , invoice .AttachmentUrl ) ; var bytes = File.ReadAllBytes ( imgfile ) ; 文字列 base64string = .ToBase64String (バイト)に変換します。 var response = client .PostAsJsonAsync < dynamic > ( "" , new { images = new string [ ] { base64string } } ) .Result ; } コンソール.WriteLine ( $ "{id}、完了しました。" ) ; }
請求書情報の解析は、現在でも、請求金額、請求日、請求書番号などの必須フィールドを正規表現で照合するという比較的不器用な方法が使用されています。これは無料であり、有料サービスのようなよりスマートな照合を提供していないためです。ここでは、十分なデータがあれば、自己学習によってよりスマートな認識を実現できるはずだと考えています。そこで、ラベル フィールドを残しました。その目的は、まず対応するフィールド列を手動で設定し、次に座標データを通じてトレーニングすることです。 if (応答.StatusCode == System .Net .HttpStatusCode .OK ) { var result = response .Content .ReadAsStringAsync ( ) .Result ; var ocr_result = JsonSerializer .Deserialize < ocr_result > (結果) ; var ocr_status = "" ; invoice.Status = "完了" ; 請求書の結果= ocr_result.status ; ocr_result .status == "000" の場合 { foreach ( var collection in ocr_result . results ) { foreach ( var コレクション内のアイテム) { var rawdata =新しい InvoiceRawData ( ) { 信頼度= item.confidence 、 請求書ID = id 、 テキスト= item.text 、 Text_Region = JsonSerializer .Serialize (項目.text_region ) } ; if ( item .text .Contains ( "請求書番号" ) ) { var regex =新しい Regex ( "\\d*$" ) ; var mc = regex .Match ( item .text ) ; if ( mc . 成功) { 請求書.InvoiceNo = mc .Value ; } } if ( item .text .Contains ( "請求日" ) ) { var regex = new Regex ( "\\d{4}年\\d{2}月\\d{2}日" ) ; var mc = regex .Match ( item .text ) ; if ( mc . 成功) { 請求書.InvoiceDate = Convert .ToDateTime ( mc .Value .Replace ( "Year" , "/" ) .Replace ( "Month" , "/" ) .Replace ( "Day" , "" ) ) ; } } if (項目.テキスト.Contains ( "%" ) ) { var regex = new Regex ( "^\\d*.\\d*" ) ; var mc = regex .Match ( item .text ) ; if ( mc . 成功) { 請求書.TaxRate = 小数点.Parse ( mc .Value ) ; } } if ( item .text .Contains ( "¥" ) ) { var regex = new Regex ( "\\d.\\d*" ) ; var mc = regex .Match ( item .text ) ; if ( mc . 成功) { 請求書.Amount = 小数点.Parse ( mc .Value ) ; } } _context .InvoiceRawDatas .Add ( rawdata ) ; } } ocr_status = ocr_result.status ;
} _context .SaveChangesAsync (デフォルト) .Wait ( ) ; _hubContext.Clients.All.SendAsync ( SignalR.OCRTaskCompleted 、 新しい{ invoiceNo = invoice.InvoiceNo } ) ;
}
キャンバスフレーム注釈認識結果 データ.map ( (項目,インデックス) => { $ ( '#rawdata_table > tbody' ) .append ( ` < tr >< td > $ { index + 1 } </ td >< td > $ { item .Text } </ td >< td ></ td ></ tr > ` ) ; var points = JSON .parse ( item .Text_Region ) ; ctx .lineWidth = "5" ; ctx .strokeStyle = "#00ff00" ; ctx .textAlign = '左' ; ctx .textBaseline = 'top' ; ctx .fillStyle = "#ff0000" ; ctx .font = "太字 13px verdana、サンセリフ" ; ctx .fillText (項目.Text 、ポイント[ 0 ] [ 0 ] 、ポイント[ 0 ] [ 1 ] - 15 ) ; ctx .beginPath ( ) ; ctx .moveTo (ポイント[ 0 ] [ 0 ] 、ポイント[ 0 ] [ 1 ] ) ; ctx .lineTo (ポイント[ 1 ] [ 0 ] 、ポイント[ 1 ] [ 1 ] ) ; ctx .lineTo (ポイント[ 2 ] [ 0 ] 、ポイント[ 2 ] [ 1 ] ) ; ctx .lineTo (ポイント[ 3 ] [ 0 ] 、ポイント[ 3 ] [ 1 ] ) ; ctx .closePath ( ) ; ctx .stroke ( ) ; } ) ;
シンプルでカッコいいと思いませんか? やっと星をあげてください!⭐ このプロジェクトが気に入ったり、使用したりしている場合は、星を付けてください。ありがとうございます! RazorPageCleanArchitecture\features\invoice_ocr:https://github.com/neozhu/RazorPageCleanArchitecture
|