asprise ocr 识别

taohua300 2017-12-05 10:00:35
先下载
aocr.dll

最近需要一个仅仅识别1-2位数字的功能,现在使用office ocr,不过速度稍显不足,然后听说asprise ocr 挺好,所以想试试。

找了很多破解版什么的,没有帮助文件,资料不足,要么声明不对,要么参数个数不对,反正没有成功。

然后官网找的这个c/c++下面使用的dll,想在vfp中以Declare的方式来使用它。

现在的问题是,同样的方式,在c++下面调试成功,虽然返回的内容为空。但vfp下总会返回一个错误信息,无论怎么调试参数都不行

dll为原版,c++下有弹框,不知道是不是因为vfp下总是返回错误信息的缘故,没有弹框
Clear 

Declare integer _com_asprise_ocr_setup@4 In aocr.dll as ocr_setup integer
Declare integer _com_asprise_ocr_start@20 In aocr.dll as ocr_start string @ ,string @,string @,string @,string @
Declare integer _com_asprise_ocr_recognize@52 In aocr.dll as ocr_recognize integer,string @,integer,;
integer,integer,integer,integer,string @ ,string @,string @ ,string @ ,string @
Declare long _initaocr@0 In aocr.dll as initocr
Declare _com_asprise_ocr_stop@8 In aocr.dll as ocr_stop long

initocr()
ocr_setup(0)
lnOcr = ocr_start("eng","fast","" ,"","")

lcStrAdrr = ocr_recognize(lnOcr ,"H:\image\image\1z00-110.jpg",-1,-1,-1,-1,-1,"all","text","","","")
lcStr = Sys(2600,lcStrAdrr,100)
?lcStr
?At(Chr(0),lcStr)
ocr_stop(lnOcr)

对于参数的宏定义,可以参考下载页面的头文件

现在的问题是,什么原因造成的总是返回错误信息?
...全文
923 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taohua300 2017-12-05
  • 打赏
  • 举报
回复
第一个参数类型long long以为是兼容64位的,vfp中只要使用整型就可以了呢 回头我再用网上找的破解的老版本试试,再不行就用office的凑合用了
taohua300 2017-12-05
  • 打赏
  • 举报
回复
引用 2 楼 dkfdtf 的回复:
改成这样声明可以运行,具体原因还不清楚。不过好像不能识别中文 不会是头文件中丢了一个逗号吧,开玩笑了,示例中都是传完句柄接着传文件名的
Declare integer _com_asprise_ocr_recognize@52 In aocr.dll as ocr_recognize ;
	long,long,string @,integer,integer,integer,integer,integer,string @,string @,string @,string @,string @
然后这样调用
lcStrAdrr = ocr_recognize(lnOcr, 0, "H:\image\image\1z00-110.jpg",-1,-1,-1,-1,-1,"all","text","","","")
确实不能识别中文,这个只能识别英文还有个什么语言,要付费才能识别更多语言,不过还是没有中文。 因为只识别1-2位数字,所以才想试试这个,但目前的问题是识别图片的一块区域返回空值,或者图片太小也不行。 速度确实要比office的快 同样office里识别一个数字的时候大部分情况先出错,两位数字的偶尔出错
taohua300 2017-12-05
  • 打赏
  • 举报
回复
引用 1 楼 dkfdtf 的回复:
问题可能出在第一个句柄参数 long long 这地方,应该是 Int64 类型,vfp 没法传 64 位整数值
typedef char * (CALL_CONVENTION * func_type_com_asprise_ocr_recognize) (long long, const char *, int, int, int, int, int, const char *, const char *, const char *, const char *, const char *);
最开始的时候找的破解版反编译找参数的时候总以为是13个参数,但c的例子都是12个参数,一时没转过弯来
都市夜猫 2017-12-05
  • 打赏
  • 举报
回复
改成这样声明可以运行,具体原因还不清楚。不过好像不能识别中文
不会是头文件中丢了一个逗号吧,开玩笑了,示例中都是传完句柄接着传文件名的
Declare integer _com_asprise_ocr_recognize@52 In aocr.dll as ocr_recognize ;
long,long,string @,integer,integer,integer,integer,integer,string @,string @,string @,string @,string @

然后这样调用
lcStrAdrr = ocr_recognize(lnOcr, 0, "H:\image\image\1z00-110.jpg",-1,-1,-1,-1,-1,"all","text","","","")



都市夜猫 2017-12-05
  • 打赏
  • 举报
回复
问题可能出在第一个句柄参数 long long 这地方,应该是 Int64 类型,vfp 没法传 64 位整数值
typedef char * (CALL_CONVENTION * func_type_com_asprise_ocr_recognize) (long long, const char *, int, int, int, int, int, const char *, const char *, const char *, const char *, const char *);

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧