分享更有价值
被信任是一种快乐

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”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注云技术行业资讯频道。

相关推荐: 怎么使用CSS设置图片背景透明

这篇文章主要介绍了怎么使用CSS设置图片背景透明的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用CSS设置图片背景透明文章都会有所收免费云主机、域名获,下面我们一起来看看吧。 首先,设置图片的背景透明需要使用CSS属性opa…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册