using Amazon.Textract;
using Amazon.Textract.Model;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Text;
using System.Text.Encodings.Web;
namespace AIServicesDemo.Pages
{
public class TextractModel : PageModel
{
[BindProperty]
public IFormFile? FormFile { get; set; }
public string FileName { get; set; } = string.Empty;
public string Result { get; set; } = String.Empty;
private readonly IAmazonTextract _textractClient;
private readonly IWebHostEnvironment _hostenvironment;
public TextractModel(IAmazonTextract textractClient, IWebHostEnvironment hostenvironment)
{
_textractClient = textractClient;
_hostenvironment = hostenvironment;
}
public void OnGet()
{
}
public async Task OnPostAsync()
{
if (FormFile == null)
{
return;
}
// save image to display it
var fileName = String.Format("{0}{1}", Guid.NewGuid().ToString(), Path.GetExtension(FormFile.FileName));
using (var stream = new FileStream(Path.Combine(_hostenvironment.WebRootPath, "uploads", fileName), FileMode.Create))
{
await FormFile.CopyToAsync(stream);
FileName = fileName;
}
var memoryStream = new MemoryStream();
await FormFile.CopyToAsync(memoryStream);
var request = new AnalyzeExpenseRequest()
{
Document = new Document { Bytes = memoryStream }
};
var response = await _textractClient.AnalyzeExpenseAsync(request);
var stringBuilder = new StringBuilder();
foreach (var document in response.ExpenseDocuments)
{
stringBuilder.AppendLine("Summary:
");
stringBuilder.AppendLine("==========================
");
foreach (var field in document.SummaryFields)
{
if (field.Type.Text != "OTHER")
{
stringBuilder.AppendFormat(
"Type: {0}, Text: {1}
",
field.Type.Text,
field.ValueDetection.Text);
}
}
stringBuilder.AppendLine("==========================
");
stringBuilder.AppendLine("Items:
");
stringBuilder.AppendLine("==========================
");
foreach (var itemGroup in document.LineItemGroups)
{
foreach (var item in itemGroup.LineItems)
{
var price = item.LineItemExpenseFields.FirstOrDefault(i => i.Type.Text == "PRICE")?.ValueDetection?.Text;
var title = item.LineItemExpenseFields.FirstOrDefault(i => i.Type.Text == "ITEM")?.ValueDetection?.Text;
stringBuilder.AppendFormat(
"Item: {0}, Price: {1}
",
title,
price);
}
}
}
Result = stringBuilder.ToString();
}
}
}