はじめに
- 本記事は、抽出対象文字列と印鑑が被るためにOCRで正確に読み取れないケースへの対処法を書きます。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 24.10 バージョンのもので構成しています。
説明用サンプル画像
上の画像を「ドキュメントをデジタル化」アクティビティ × Extended Language OCR で読み取ると次の様な結果が返ってきます↓↓
上段の会社名は「C」を「Q」に読み違えただけですが、下段の住所はまともに読めていません。
ABQ 株 式 会 社 〒 1 TA BC
ワークフローで白黒2階調化した画像で試した結果↓↓
ABC 株 式 会 社
〒 100-0004 東 京 都 千 代 田 区 大 手 町 1-1-1
実装例
- 「コードを呼び出し」アクティビティを配置し、上図の様に引数を設定します。
- 「コードを編集」で次のコードを貼り付け>保存する
' 画像ファイルのパス
Dim inputImagePath As String = inputFilePath
Dim outputImagePath As String = outputFilePath
' 画像を読み込む
Using originalBitmap As New Bitmap(inputImagePath)
' 処理後の画像を作成する
Using newBitmap As New Bitmap(originalBitmap.Width, originalBitmap.Height)
' 画像の各ピクセルを処理する
For y As Integer = 0 To originalBitmap.Height - 1
For x As Integer = 0 To originalBitmap.Width - 1
Dim pixelColor As Color = originalBitmap.GetPixel(x, y)
' 黒色を抽出し、それ以外は白色にする
If pixelColor.R < Red AndAlso pixelColor.G < Green AndAlso pixelColor.B < Blue Then
newBitmap.SetPixel(x, y, Color.Black)
Else
newBitmap.SetPixel(x, y, Color.White)
End If
Next
Next
' 新しい画像を保存する
newBitmap.Save(outputImagePath)
End Using
End Using
本例では、RGBの引数の値はいずれも100を指定しています。
※一般的に黒色というとRGBは0,0,0をイメージされるかとおもいますが、スキャン画像の黒は色の幅があるので広めにとるために100を指定します。
RGBの赤の値(Int32):100
RGBの緑の値(Int32):100
RGBの青の値(Int32):100
さいごに
いかがでしたでしょうか。
デジカメの画像なんかで試すととんちんかんな結果となりますが、白黒+αで構成されている請求書の様なドキュメントであれば印鑑だけ除くことはできるかとおもいます。
印鑑被りでお困りの方は是非一度試してみてください☆
最後までお読みいただきありがとうございます(・ω・)ノ