Kernel Memory 中使用 PaddleSharp OCR
Kernel Memory 中使用 PaddleSharp OCR
Kernel Memory 中進(jìn)行文檔處理的時(shí)候可以上傳圖片作為文檔,這時(shí)候就需要使用到 OCR 技術(shù)來識(shí)別圖片中的文字。
官方默認(rèn)的庫(kù)中,提供了 Azure Document Intelligence 的擴(kuò)展服務(wù),可以通過 Azure 的服務(wù)來進(jìn)行 OCR。
方法也非常簡(jiǎn)單,只需要在構(gòu)建 Kernel Memory 的時(shí)候,調(diào)用 WithAzureAIDocIntel 方法,提供相應(yīng)的參數(shù)即可。
var _ = new KernelMemoryBuilder(appBuilder.Services)
//...
.WithAzureAIDocIntel(new AzureAIDocIntelConfig()) // <- register azure document intelligence
.Build();
如果沒有Azure 服務(wù)的話,也可以使用自定義的 OCR 服務(wù),例如 PaddleSharp OCR。
實(shí)現(xiàn)自定義的 OCR 服務(wù),需要實(shí)現(xiàn) IOcrEngine 接口,該接口的定義相對(duì)比較簡(jiǎn)單,其中只有一個(gè)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
然后實(shí)現(xiàn) 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;
}
}
在構(gòu)建 Kernel Memory 的時(shí)候,注冊(cè)自定義的 OCR 服務(wù):
var model = LocalFullModels.EnglishV3;
var memory = new KernelMemoryBuilder(appBuilder.Services)
//...
.AddSingleton<IOcrEngine>(new PaddleSharpOcrEngine(model))// <- register paddle ocr
.Build();
注冊(cè)完成之后,后續(xù)處理圖片文件的過程中,就會(huì)自動(dòng)調(diào)用 PaddleSharp OCR 服務(wù)了。
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}");
以上代碼實(shí)現(xiàn)已經(jīng)上傳至 GitHub.
參考
- PaddleSharp Ocr
總結(jié)
以上是生活随笔為你收集整理的Kernel Memory 中使用 PaddleSharp OCR的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员创业该做什么产品?
- 下一篇: #11独立开发周总结|核心OKR1000