node如何实现ocr


本文小编为大家详细介绍“node如何实现ocr”,内容详细,步骤清晰,细节处理妥当,希望这篇“node如何实现ocr”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。tesserract.js 这个库提供了多个版本供选择,我这里使用的是离线的版本tesseract.js-offline,毕竟谁都由网络不好的时候。

默认示例代码

const{createWorker}=require('tesseract.js');
constpath=require('path');

constworker=createWorker({
langPath:path.join(__dirname,'..','lang-data'),
logger:m=>console.log(m),
});

(async()=>{
awaitworker.load();
awaitworker.loadLanguage('eng');
awaitworker.initialize('eng');
const{data:{text}}=awaitworker.recognize(path.join(__dirname,'..','images','testocr.png'));
console.log(text);
awaitworker.terminate();
})();

tesseract.js 离线版本默认示例代码只支持识别英文,如果识别中文,结果会是一堆问号。但是幸运的是你可以导入多个训练好的语言模型,让它支持多个语言的识别。从https://github.com/naptha/tessdata/tree/gh-pages/4.0.0这里下载你需要的对应语言模型,放入到根目录下的lang-data目录下
我这里选择了中(chi_sim.traineddata.gz)日(jpn.traineddata.gz)英(eng.traineddata.gz)三国语言模型。修改代码中加载和初始化模型的语言项配置,来同时支持中日英三国语言。

awaitworker.loadLanguage('chi_sim+jpn+eng');
awaitworker.initialize('chi_sim+jpn+eng');

如果你运行了离线的版本,你会发现模型的加载和ocr的识别有点慢。可以通过这两个步骤优化。web项目中,你可以在应用一启动的时候就加载模型,这样后续接收到ocr请求的时候就可以不用等待模型加载了。参照Why I refactor tesseract.js v2?这篇博客,可以通过createScheduler方法添加多个worker线程来并发的处理ocr请求。多线程并发处理ocr请求示例

constKoa=require('koa')
constRouter=require('koa-router')
constrouter=newRouter()
constapp=newKoa()
constpath=require('path')
constmoment=require('moment')
const{createWorker,createScheduler}=require('tesseract.js')

;(async()=>{
constscheduler=createScheduler()
for(leti=0;iconsole.log(`${moment().format('YYYY-MM-DDHH:mm:ss')}-${JSON.stringify(m)}`)
})
awaitworker.load()
awaitworker.loadLanguage('chi_sim+jpn+eng')
awaitworker.initialize('chi_sim+jpn+eng')
scheduler.addWorker(worker)
}
app.context.scheduler=scheduler
})()

router.get('/test',async(ctx)=>{
const{data:{text}}=awaitctx.scheduler.addJob('recognize',path.join(__dirname,'.','images','chinese.png'))
//awaitctx.scheduler.terminate()
ctx.body=text
})

app.use(router.routes(),router.allowedMethods())
app.listen(3002)

发起并发请求,可以看到多个worker再并发执行ocr任务ab -n 4 -c 4 localhost:3002/test效果展示中的前端代码主要是用了elementui组件和vue-cropper这个组件实现。vue-cropper组件具体的使用可以参考我的这篇博客vue图片裁剪:使用vue-cropper做图片裁剪ps: 上传图片的时候可以先在前端加载上传图片的base64,先看到上传的图片,再请求后端上传图片 ,对用户的体验比较好完整代码如下

读到这里,这篇“node如何实现ocr”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: bitcoin-cli命令怎么使用

这篇文章主要介绍“bitcoin-cli命令怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“bitcoin-cli命令怎么使用”文章能帮助大家解决问题。关于“bitcoin-cli命令怎么使用”的内容就介绍到这里…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/17 17:05
下一篇 02/17 17:25

相关推荐