.NetからAWS Textractを使う方法

Amazon TextractをC#.Netから使ってみました。

Amazon TextractとはAWSのサービスのひとつで、文字と項目や表を自動で認識してくれるAI系のサービスです。

https://aws.amazon.com/jp/textract/

2019/6/12現在、TextractのSDKに関する日本語の記事は見当たらなかったのでAWSのリファレンスとにらめっこしながら書いてみました。

・Textract SDKの使い方はこちら(英語)

https://docs.aws.amazon.com/ja_jp/textract/latest/dg/getting-started.html

↑のSDKの使い方はJavaですが、こちらの.Net用のリファレンスにTextractの項目があるので、

これを見ていけば.NetからTextract SDKが使えます。

・.Net用のリファレンス

https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html

環境は、.Net Core(Razor page) + C#です。

で、こちらがPOSTしたファイルをそのままTextractに渡して解析するサンプルコードです。

(Razor pageでFormからのSubmitに対するOnPostイベントハンドラ部分です。)

簡単に説明すると、解析対象の画像ファイルをMemoryStreamに入れてリクエストを投げれば、Blocksというリストに結果が入って返ってくるので、あとは煮るなり焼くなり、という感じです。

public IActionResult OnPost(IFormFile Targetfile)

{
using (var client = new AmazonTextractClient(awsCredentials, this.awsOptions.Region))
{
//Document処理用のバッファ用意
Stream s = Targetfile.OpenReadStream();
byte[] file = new byte[Targetfile.Length];
MemoryStream ms = new MemoryStream(file);
s.CopyTo(ms);

//AWSに解析させるDocumentオブジェクトの準備
Document doc = new Document();
doc.Bytes = ms;

//リクエストの作成
DetectDocumentTextRequest req = new DetectDocumentTextRequest();
req.Document = doc;

//処理実行
var response = client.DetectDocumentTextAsync(req);
response.Wait();

//結果を見る
//ここまでくれば、結果はresponse.Result.Blocksに入っています。
//BlocksというのはTextractが解析してくれた結果リストで、発見されたオブジェクトが入っています。
//ここではテキストだけですが、表や項目を解析すればそれもBlocksに入ってきます。
//詳しくはこちら。https://docs.aws.amazon.com/ja_jp/textract/latest/dg/how-it-works-detecting.html
}
}

※もちろんエラー処理とかは書いてないので、必要に応じて書いてください。