我有一个使用 tesseract 的 Web 应用程序(模型视图控制器),但我不知道如何将 tesseract 上传到 azure Web 应用程序服务。我需要 tesseract 才能在 azure web 应用程序上工作,因为目前,如果我运行该 web 应用程序,tesseract 功能将不起作用。 如果我通过 azure devops 发布 Web 应用程序,它会说我的解决方案之外有文件,我认为这是导致问题的 tesseract。
我预计,当我上传网络应用程序时,我认为它可以工作,因为它可以在我的本地设备上工作,但是,当涉及到超立方体功能时,从 Azure 运行它,我收到错误“此页面不可用” ”等等。
我需要 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
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
)部署状态:
结果: