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}");

以上代码实现已经上传至 GitHub.
参考
Kernel Memory 中使用 PaddleSharp OCR的更多相关文章
- [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中?
[Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中? 以如下方法来查看 POPULATE_STATUS 是不行的. SQL> select ins ...
- Kernel Memory Layout on ARM Linux
这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...
- kernel memory code learn
mem alloc page Noticeble: 1. there are two kind of page: virtual page, physical page. 2. the page st ...
- #define barrier() __asm__ __volatile__("": : :"memory") 中的memory是gcc的东西
gcc内嵌汇编简介 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作 ...
- 【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC
2013-12-04 19:07:05 将在CCS中仿真的数据导入电脑上时,可以选择不同的数据类型,以便分析,具体方法如下: 在CCS菜单中,选择File—>Data—>Save,弹出以下 ...
- RPA中房产证的 OCR 识别
客户需求,识别一些证件内容,包括身份证.户口本.营业执照.银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 RPA 还是百度的 OCR 都有接口,直接调用即可,但是都没有房产证的 OCR 识别,只 ...
- 在Mac上 python中使用tesseract OCR (Pytesser) 识别图片中的文字
仓库地址:https://github.com/RobinDavid/Pytesser brew install tesseract sudo pip install opencv-python 安装 ...
- laravel App\Kernel.php中的middleware、middlewareGroups、routeMiddleware
万事万物总逃不出一个理字,程序尤其如此,你之所以活得轻松,是因为有人替你负重前行,帮你屏蔽掉了很多乱七八糟的事情,但总有一天你要直面这些事情.程序亦是如此,某个框架你用的很轻松,那是因为底层逻辑已经有 ...
- 【语义分割】large kernel matters中GCN模块的pytorch实现
GCN模块的实现比较简单,在giuhub上看到两种实现,轻微不同 实现一:https://github.com/ycszen/pytorch-segmentation/blob/master/gcn. ...
- Linux Context , Interrupts 和 Context Switching 说明
一. 进程Context 定义 当一个进程在执行时, CPU的所有寄存器中的值.进程的状态以及堆栈中的内容,比如各个变量和数据,包括所有的寄存器变量.进程打开的文件.内存信息等.这些信息被称为该进程的 ...
随机推荐
- 「hdu - 5780」gcd
link. 钦定 \(i>j\),研究得 \((x^i-1,x^j-1)\rightleftharpoons(x^i-x^j,x^j-1)\rightleftharpoons(x^j(x^{i- ...
- dp_ppi转光纤模块连接200PLC组态王通信案例
DP_PPI转光纤模块连接200PLC组态王光纤通信在冷却塔控制系统案例 现场背景介绍: 西门子200 CPU226PLC通过兴达易控dp转光纤模块在200PLC系统中ppi转光纤实现PCL与组态王2 ...
- Python面向对象——property装饰器、继承(与python2不同点)、多继承(优缺点、Mixins)、属性查找、多继承带来的菱形问题
文章目录 内容回顾 property装饰器 继承 与python2的差别 多继承 为何要用继承 如何实现继承 属性查找 多继承带来的菱形问题 总结: 作业 内容回顾 1.封装=>整合 人的对象. ...
- 【Azure Function App】Python Function调用Powershell脚本在Azure上执行失败的案例
问题描述 编写Python Function,并且在Function中通过 subprocess 调用powershell.exe 执行 powershell脚本. import azure.fun ...
- C#/.NET/.NET Core优秀项目和框架精选(2023年10月更新,项目分类已整理完成欢迎大家踊跃提交PR一起完善让优秀的项目和框架不被埋没)
前言 帮助开发者发现功能强大.性能优越.创新前沿.简单易用的C#/.NET/.NET Core优秀项目和框架,无论你是寻找灵感.学习新技术.改进代码质量,还是想拓展自己的技术视野,都能为你提供有价值的 ...
- nodejs修改npm包安装位置
适用于非个人电脑.便携使用 npm config set cache D:\nodejs\node_cache npm config set prefix D:\nodejs npm config s ...
- 【2023年更新】git 常用口令
1.已关联远程 fatal: remote origin already exists. 先输入$ git remote rm origin(删除关联的origin的远程库) 2.关联新远程 ...
- QSplitter 自我总结
①.QSplitter(QWidget* parent = Q_NULLPTR); //构造函数 QSplitter(Qt::Orientation orientation , QWidget* pa ...
- [Python急救站课程]叠加等边三角形的绘制
叠加等边三角形的绘制 from turtle import * penup() fd(-100) pendown() pensize(10) seth(60) fd(200) seth(-60) fd ...
- Sealos 私有云正式发布,三倍性能 1/5 成本
马斯克将推特下云后可以节省 60% 成本,不代表你可以. 但是有了 Sealos 之后,你真的可以! Sealos 私有云正式发布,详情地址:https://sealos.run/zh-Hans/se ...