C/C++教程

Kernel Memory 中使用 PaddleSharp OCR

本文主要是介绍Kernel Memory 中使用 PaddleSharp OCR,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Kernel Memory 中使用 PaddleSharp OCR

Kernel Memory 中进行文档处理的时候可以上传图片作为文档,这时候就需要使用到 OCR 技术来识别图片中的文字。

官方默认的库中,提供了 Azure Document Intelligence 的扩展服务,可以通过 Azure 的服务来进行 OCR。

方法也非常简单,只需要在构建 Kernel Memory 的时候,调用 WithAzureAIDocIntel 方法,提供相应的参数即可。

var _ = new KernelMemoryBuilder(appBuilder.Services)
    //...
    .WithAzureAIDocIntel(new AzureAIDocIntelConfig()) // <- register azure document intelligence
    .Build();

如果没有Azure 服务的话,也可以使用自定义的 OCR 服务,例如 PaddleSharp OCR。

实现自定义的 OCR 服务,需要实现 IOcrEngine 接口,该接口的定义相对比较简单,其中只有一个ExtractTextFromImageAsync方法。

public interface IOcrEngine
{
    Task<string> ExtractTextFromImageAsync(Stream imageContent, CancellationToken cancellationToken = default(CancellationToken));
}

使用 PaddleSharp 我们需要安装以下 Nuget 包:

Sdcb.PaddleInference
Sdcb.PaddleOCR
Sdcb.PaddleInference.runtime.win64.mkl
OpenCvSharp4.runtime.win
Sdcb.PaddleOCR.Models.Local

然后实现 IOcrEngine 接口:

    public class PaddleSharpOcrEngine(FullOcrModel model) : IOcrEngine
    {
        private readonly FullOcrModel _model = model;

        public async Task<string> ExtractTextFromImageAsync(Stream imageContent, CancellationToken cancellationToken = default)
        {
            using var all = new PaddleOcrAll(_model, PaddleDevice.Mkldnn());
            using var memoryStream = new MemoryStream();
            await imageContent.CopyToAsync(memoryStream);
            using Mat src = Cv2.ImDecode(memoryStream.ToArray(), ImreadModes.Color);
            PaddleOcrResult result = all.Run(src);
            return result.Text;
        }
    }

在构建 Kernel Memory 的时候,注册自定义的 OCR 服务:

var model = LocalFullModels.EnglishV3;
var memory = new KernelMemoryBuilder(appBuilder.Services)
    //...
    .AddSingleton<IOcrEngine>(new PaddleSharpOcrEngine(model))// <- register paddle ocr
    .Build();

注册完成之后,后续处理图片文件的过程中,就会自动调用 PaddleSharp OCR 服务了。

await memory.ImportDocumentAsync("./kernel_memory_readme.png");

var question = "What's Kernel Memory?";

var answer = await memory.AskAsync(question);

Console.WriteLine($"Q: {question}");
Console.WriteLine($"A: {answer.Result}");

Alt text

以上代码实现已经上传至 GitHub.

参考

  • PaddleSharp Ocr
这篇关于Kernel Memory 中使用 PaddleSharp OCR的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!