DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: a12315
今日帖子: 48
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 delphiqiw (delphi我不会) ▲▲▲△△ -
普通会员
2022/5/22 21:42:36
标题:
一个高效跨平台的OCR库 浏览:2485
加入我的收藏
楼主: https://github.com/DayBreak-u/chineseocr_lite
测试了demo速度准确率都很不错,比TesseractOCR效率高。
我想用delphi调用这个库的dll,请教以下c++中的定义转到delphi要怎么写
struct OCR_DETECT_CONFIG {
  int padding; 
  int maxSideLen; 
  float boxScoreThresh; 
  float boxThresh; 
  float unClipRatio; 
  int doAngle;
  int mostAngle;
};

struct OCR_DETECT_RESULT_POINT {
  int x;
  int y;
};
 
struct OCR_DETECT_RESULT_TEXTBLOCK { 
  char * text;
  float boxScore;
  unsigned int charScoreSize;
  float *charScores;
  OCR_DETECT_RESULT_POINT boxPoint[4];
};

struct OCR_DETECT_RESULT {
  unsigned int blockSize;
  char * text;
  char * resultImageBuffer;
  unsigned int resultImageBufferSize;
  OCR_DETECT_RESULT_TEXTBLOCK  blocks[0];
};
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2022/5/22 21:46:33
1楼: web服务启动


对于老平台的支持问题(主要指windows平台):

    opencv通过自行编译,最老可以支持xp。
    ncnn(cpu)通过自行编译,最老也能支持xp。
    onnxruntime只能支持windows7~10。
    所以想上老windows平台,则只能选择ncnn版。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 delphiqiw (delphi我不会) ▲▲▲△△ -
普通会员
2022/5/22 21:50:55
1楼: 链接:https://pan.baidu.com/s/16pwsvH80l9z5ym-1U7Umdg 
提取码:mpob
模型及dll源码
angle_net.onnx
crnn lite Istm.onnx
dbnet.onnx
keys.txt
OcrLiteOnnx.dll
此帖子包含附件:
PNG 图像
大小:204.1K
----------------------------------------------
-
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/5/23 0:31:32
2楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/5/23 0:34:30
3楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 l_star (l.star) ★☆☆☆☆ -
普通会员
2022/5/23 9:07:02
5楼: TesseractOCR中文识别差,paddleocr数字(是指金额超大超长的那种)识别差。建议学paddleocr,它的中文识别效果好
----------------------------------------------
-
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/5/23 9:47:21
6楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 9:48:47
7楼: OCR_DETECT_Con_FIG=record
   padding:integer; 
   maxSideLen:integer; 
   boxScoreThresh:float; 
   boxThresh:float; 
   unClipRatio:float; 
   doAngle:integer;
   mostAngle:integer;
end;

 OCR_DETECT_RESULT_POINT=record
  x:integer;
  y:integer;
end;
 
OCR_DETECT_RESULT_TEXTBLOCK=record
  text:Pchar;
   boxScore:float;
   charScoreSize:cardinal;
  charScores:Pfloat;
   boxPoint:array[0..3] of OCR_DETECT_RESULT_POINT;
end;

 OCR_DETECT_RESULT=record
   blockSize:cardinal;
   text:pchar
   resultImageBuffer:pchar;
  resultImageBufferSize:cardinal;
   blocks:array[0] of OCR_DETECT_RESULT_TEXTBLOCK;//注意这个的应用,这个可能是用指针的
end;
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 11:16:24
8楼: 把楼上的PChar改成PAnsiChar就可以了

PChar会出事
----------------------------------------------
-
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 11:18:34
9楼: 是的,我用的是d2007下的,在D10中pchar是双字的,但DLL的char *都是单字的,所以在D10中必须要用pansichar
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 11:53:30
9楼: 那个OCR_DETECT_RESULT_TEXTBLOCK  blocks[0]的定义,是保留让C代码越界访问数组的,实际上不占用内存。所以这个结构体实际长度不定,只能在堆分配空间操作。

在Delphi中你可以定义为blocks : array[0..0] of OCR_DETECT_RESULT_TEXTBLOCK;

这不会影响程序运行,但是对这个结构体进行sizeof操作得到的结果会与C版本不一致(因为这个结构体本质是变长,所以sizeof数值实际上并无意义)。

假如你非要一个一致的SizeOf运算结果不可,可以补充以下定义:
OCR_DETECT_RESULT_TEXTBLOCK_ARRAY = array[0..$ffffff] of OCR_DETECT_RESULT_TEXTBLOCK_ARRAY;
POCR_DETECT_RESULT_TEXTBLOCK_ARRAY = ^OCR_DETECT_RESULT_TEXTBLOCK_ARRAY;

然后,在OCR_DETECT_RESULT里定义:
function blocks : POCR_DETECT_RESULT_TEXTBLOCK_ARRAY; inline;

函数实现部分:
function OCR_DETECT_RESULT.blocks : POCR_DETECT_RESULT_TEXTBLOCK_ARRAY;
begin
  Result := POCR_DETECT_RESULT_TEXTBLOCK_ARRAY(NativeInt(@Self)+SizeOf(Self)); 
end;

这样,你可以用一致的 myvar.blocks[a] := b;语法去操作这个blocks字段,而且可以得到与C版结构体一致的sizeof结果,但是对blocks取地址值的语法将不能保持一致,@myvar.blocks需要改成直接调用myvar.blocks;
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2022/5/23 14:58:10
10楼: 其实还有一个百度深度,基于这个训练库的github项目,识别文字更精准。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 delphiqiw (delphi我不会) ▲▲▲△△ -
普通会员
2022/5/23 18:35:14
11楼: 谢谢几位老师解答按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 surdon (马) ★☆☆☆☆ -
盒子活跃会员
2022/11/3 17:22:32
12楼: 楼主搞定了吗 我也想搞这个  能不能分享一下
----------------------------------------------
-
作者:
男 surdon (马) ★☆☆☆☆ -
盒子活跃会员
2022/11/3 17:22:58
13楼: 楼主搞定了吗 我也想搞这个  能不能分享一下
 35071927@qq.com
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2022/11/3 21:28:04
14楼: github上有这个项目的python封装 成exe 批量图片ocr成文字的版本,可以参考下,弄成dll,让delphi调用。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 surdon (马) ★☆☆☆☆ -
盒子活跃会员
2022/11/4 15:43:11
15楼: 整了一个易语言调用的DLL 基本都翻译成D的了 

type
  OCR_DETECT_RESULT_POINT = record
    x: integer;
    y: integer;
  end;

  TOCR_DETECT_Con_FIG = record
    padding: Cardinal;
    maxSideLen: Cardinal;
    boxScoreThresh: Single;
    boxThresh: Single;
    unClipRatio: Single;
    doAngle: byte;
    mostAngle: byte;
  end;

  OCR_ESULT = record
    blockSize: Integer;
    text: PAnsiChar;
    resultImageBuffer: Pointer;
    resultImageBufferSize: integer;
    //blocks : integer;

  end;

 // POCR_text = ^TOCR_DETECT_RESULT_TEXTBLOCK;

  TOCR_DETECT_RESULT_TEXTBLOCK = record
    text: pansichar;
    boxScore: Single;
    charScoreSize: cardinal;
    charScores: Integer;
    boxPoint: array[0..3] of OCR_DETECT_RESULT_POINT;
  end;

  OCR_DETECT_RESULT = record
    blockSize: Integer;
    text: PAnsiChar;
    resultImageBuffer: Pointer;
    resultImageBufferSize: integer;
    //blocks : integer;

  end;
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行101.5625毫秒 RSS