如何在我的 azure Web 应用程序服务中使用 tesseract?

问题描述 投票:0回答:1

我有一个使用 tesseract 的 Web 应用程序(模型视图控制器),但我不知道如何将 tesseract 上传到 azure Web 应用程序服务。我需要 tesseract 才能在 azure web 应用程序上工作,因为目前,如果我运行该 web 应用程序,tesseract 功能将不起作用。 如果我通过 azure devops 发布 Web 应用程序,它会说我的解决方案之外有文件,我认为这是导致问题的 tesseract。

我预计,当我上传网络应用程序时,我认为它可以工作,因为它可以在我的本地设备上工作,但是,当涉及到超立方体功能时,从 Azure 运行它,我收到错误“此页面不可用” ”等等。

azure-web-app-service tesseract
1个回答
0
投票

我需要 tesseract 才能在 azure web 应用程序上工作,因为目前,如果我运行 web 应用程序,tesseract 功能将无法工作。

下载最新的 适用于 Windows 的 Tesseract 安装程序

  • tesseract.exe
    tessdata
    文件夹放在
    tesseract
    目录中,
    tessdata
    文件夹(包含
    eng.traineddata
    )位于
    tesseract
    目录内。

项目结构:

- WebApplication2
  - Controllers
    - OcrController.cs
  - tesseract
    - tesseract.exe
    - tessdata
      - eng.traineddata
  - Program.cs
  - WebApplication2.csproj
  • 将 Tesseract 文件包含在输出目录中。将以下
    ItemGroup
    添加到您的
    .csproj
    文件
<ItemGroup>
  <None Update="tesseract\tesseract.exe">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
  <None Update="tesseract\tessdata\**\*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

OcrController.cs:

using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Threading.Tasks;
using Tesseract;

namespace TesseractWebApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class OcrController : ControllerBase
    {
        [HttpPost("ocr")]
        public async Task<IActionResult> Ocr([FromForm] IFormFile image)
        {
            if (image == null || image.Length == 0)
            {
                return BadRequest("No image provided");
            }

            // Create a temporary file to store the uploaded image
            var tempFilePath = Path.GetTempFileName();
            await using (var stream = System.IO.File.Create(tempFilePath))
            {
                await image.CopyToAsync(stream);
            }

            // Perform OCR on the image
            var ocrResult = PerformOcr(tempFilePath);

            // Clean up the temporary file
            System.IO.File.Delete(tempFilePath);

            // Return the OCR result
            return Ok(ocrResult);
        }

        private string PerformOcr(string imagePath)
        {
            try
            {
                // Set the TESSDATA_PREFIX environment variable to the path of the tessdata directory
                var tessDataPath = Path.Combine(AppContext.BaseDirectory, "tesseract", "tessdata");
                Environment.SetEnvironmentVariable("TESSDATA_PREFIX", Path.GetDirectoryName(tessDataPath));

                // Initialize the Tesseract engine with the path to the tessdata directory and language
                using var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default);

                // Load the image and perform OCR
                using var img = Pix.LoadFromFile(imagePath);
                using var page = engine.Process(img);

                // Return the recognized text
                return page.GetText();
            }
            catch (Exception e)
            {
                // Return an error message if OCR fails
                return $"Error: {e.Message}";
            }
        }
    }
}

导航至

Configuration
>
Application settings.

  • 添加一个新的
    TESSDATA_PREFIX
    ,将值作为
    tessdata
    所在的路径(
    /home/site/wwwroot/tesseract/tessdata

部署状态:

enter image description here

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.