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
}
}
※もちろんエラー処理とかは書いてないので、必要に応じて書いてください。