Nicomsoft OCR调用示例(NSOCR)
By
admin
at 2021-03-07 • 0人收藏 • 1904人看过
NISOFT OCR SDK 是一款目前免费图文识别开发库, 目前支持28国语言包括简体和繁体中文识别, 能够识别条形码/二维码,
图片支持: BMP, JPEG, PNG, TIFF, and GIF. 当然也支持内存图片识别.
识别出的结果可以保存成PDF, PDF/A (PDF/A-1a or PDF/A-1b), RTF, Text or XML
详情请看官方:https://www.nicomsoft.com/products/ocr/features/
我这里测试中文识别, 准确率堪忧!
测试英文识别, 准确率不错!
免费注册码: AB2A4DD5FF2A
相关dll和帮助文档:
链接:https://pan.baidu.com/s/1BvgNmLwqR3NR2QJFD-RnkQ
提取码:v9wq

这个OCR有两种调用方式, 一种是com组件形式, 一种是dll直接引用.
如果用com组件形式, 需要regsvr32 NSOCR.dll 注册下.
com组件形式简单测试代码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="NSOCR - aardio示例";right=796;bottom=406)
mainForm.add(
button={cls="button";text="加载图片并识别";left=0;top=16;right=171;bottom=46;dl=1;dt=1;z=1};
edit={cls="edit";left=400;top=54;right=797;bottom=406;border=1;db=1;dl=0.5;dr=1;dt=1;multiline=1;z=2};
plus={cls="plus";left=0;top=54;right=397;bottom=406;border={color=-16777216;width=1};db=1;dl=1;dr=0.5;dt=1;repeat="scale";z=3};
progress={cls="progress";left=179;top=17;right=793;bottom=45;dl=1;dr=1;dt=1;edge=1;max=100;min=0;z=4}
)
/*}}*/
import fsys.dlg;
import win.timer
var timer = win.timer( mainForm );
timer.setInterval(20);
thread.set("successFlag", false);
var NsOCR = com.CreateObject("NSOCRLib.NSOCR.1");
var ret = NsOCR.Engine_SetLicenseKey("AB2A4DD5FF2A");
ret = NsOCR.Engine_Initialize();
ret,CfgObj = NsOCR.Cfg_Create();
ret = NsOCR.Cfg_LoadOptions(CfgObj, "Config.dat");
ret,OcrObj = NsOCR.Ocr_Create(CfgObj);
ret,ImgObj = NsOCR.Img_Create(OcrObj);
mainForm.button.oncommand = function(id,event){
mainForm.progress.pos = 0;
thread.set("successFlag", false);
var path = fsys.dlg.open("图像文件|*.png;*.bmp;*.jpg;*.tiff;*.gif","请选择图像文件");
if(!#path) return;
mainForm.plus.setBackground(path,false);
var ret = NsOCR.Img_LoadFile(ImgObj, path);
if(ret>0){
mainForm.msgboxErr("Err");
}else {
ret = NsOCR.Img_OCR(ImgObj, 0, 255, 1);
timer.enable();
win.invoke(
function(){
while(!thread.get("successFlag")){};
}
)
ret,txt = NsOCR.Img_GetImgText(ImgObj, 0);
mainForm.edit.text = txt;
}
}
timer.onTimer = function(hwnd,msg,id,tick){
var val = NsOCR.Img_OCR(ImgObj, 0, 0, 3);
if(mainForm.progress.pos!=val){
mainForm.progress.pos = val;
if(val>=100){
timer.disable();
thread.set("successFlag", true);
}
}
}
mainForm.onClose = function(hwnd,message,wParam,lParam){
NsOCR.Img_Destroy(ImgObj);
NsOCR.Ocr_Destroy(OcrObj);
NsOCR.Cfg_Destroy(CfgObj);
}
mainForm.show();
return win.loopMessage();登录后方可回帖