Node+OCR实现图像文字识别功能


Posted in Javascript onNovember 26, 2018

开发目的

这算是node应用的第二个小应用吧,主要目的是熟悉node和express框架。原理很简单:在node搭建的环境下引用第三方包处理图片数据并返回给前台信息。

实现效果,百度提供的图片识别,经过测试识别车牌号等规范文字数字还是比较准确的

环境需求

1.Express 是一个非常流行的node.js的web框架。基于connect(node中间件框架)。提供了很多便于处理http请求等web开发相关的扩展。

2.OCR:

通用文字识别 Node SDK目录结构:

├── src
    │  ├── auth                                //授权相关类
    │  ├── http                                //Http通信相关类
    │  ├── client                              //公用类
    │  ├── util                                //工具类
    │  └── const                               //常量类
    ├── AipOcr.js                      //通用文字识别交互类
    ├── index.js                               //入口文件
    └── package.json                           //npm包描述文件 

支持 node 版本 4.0+
直接使用node开发包步骤如下:

1.在官方网站下载node SDK压缩包。
2.将下载的aip-node-sdk-version.zip解压后,复制到工程文件夹中。
3.进入目录,运行npm install安装sdk依赖库
4.把目录当做模块依赖

其中,version为版本号,添加完成后,用户就可以在工程中使用通用文字识别 Node SDK。

直接使用npm安装依赖:

npm install baidu-aip-sdk(尝试没有成功

AipOcrClient是Optical Character Recognition的node客户端,为使用Optical Character Recognition的开发人员提供了一系列的交互方法。

用户可以参考如下代码新建一个AipOcrClient:

var AipOcrClient = require("baidu-aip-sdk").ocr; 
// 设置APPID/AK/SK 
var APP_ID = "你的 App ID"; 
var API_KEY = "你的 Api Key"; 
var SECRET_KEY = "你的 Secret Key"; 
var client = new AipOcrClient(APP_ID, API_KEY, SECRET_KEY);

express搭建就不再做详细介绍了,上一篇博客已有哦~~

功能实现

前端上传图片后端处理:

router.route("/uploadPhoto").get(function(req,res){ // 到达此路径则渲染register文件,并传出title值供 register.html使用
 res.render("uploadPhoto",{title:'图片文字识别',message:""});
}).post(function(req,res){
 // 跨域
 res.header("Access-Control-Allow-Origin", "*");
 res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
 res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");

 let form = new formidable.IncomingForm();
 form.encoding = 'utf-8'; // 编码
 form.keepExtensions = true; // 保留扩展名
 form.maxFieldsSize = 2 * 1024 * 1024; // 文件大小
 form.uploadDir = 'F:/nodejs/ocrCheck/assets/OCR' // 存储路径
 form.parse(req,function(err,fileds,files){ // 解析 formData数据
  if(err){ return console.log(err) }

  let imgPath = files.img.path // 获取文件路径
  let imgName = "F:/nodejs/ocrCheck/assets/OCR/test." + files.img.type.split("/")[1] // 修改之后的名字
  let data = fs.readFileSync(imgPath) // 同步读取文件

  fs.writeFile(imgName,data,function(err){ // 存储文件
   if(err){ return console.log(err) }

   fs.unlink(imgPath,function(){}) // 删除文件
   //上传图片成功返回code:1
   //res.json({code:1})
   global.nodeServer.getResult(res,imgName);
  })
 });
});

图片处理核心模块:

module.exports = { 
 getResult : function(res,imgName){
  var image = fs.readFileSync(imgName);
  var base64Img = new Buffer(image).toString('base64');
  client.generalBasic(base64Img).then(function(result) {
   console.log(JSON.stringify(result));
   res.json(result);
  });
 }
}

获取到的base64图片数据和res对象作为阐述传递给ocr提供好的方法, 回调产生的数据将作为结果返回给前端。

####小彩蛋:

nodeJs中commonJs规范如何实现的?

1.Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
2.module对象,Node内部提供一个Module构建函数。所有模块都是Module的实例。每个模块内部,都有一个module对象,代表当前模块。它有以下属性。

module.id 模块的识别符,通常是带有绝对路径的模块文件名。
module.filename 模块的文件名,带有绝对路径。
module.loaded 返回一个布尔值,表示模块是否已经完成加载。
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 表示模块对外输出的值。

3.调用:根据模块名称作为对象调用其内自定义的方法即可。

global.nodeServer.getResult(res,imgName);

前端js代码就不贴了 so~easy

效果展示

Node+OCR实现图像文字识别功能

源码:Node_OCR

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
jquery创建div 实现代码
Apr 27 Javascript
checkbox全选所涉及到的知识点介绍
Dec 31 Javascript
Jquery实现Div上下移动示例
Apr 23 Javascript
动态设置form表单的action属性的值的简单方法
May 25 Javascript
浅谈JS函数定义方式的区别
Oct 30 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
Jan 21 Javascript
JavaScript中数组常见操作技巧
Sep 01 Javascript
React组件refs的使用详解
Feb 09 Javascript
Three.js实现简单3D房间布局
Dec 30 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 #Javascript
JS 验证码功能的三种实现方式
Nov 26 #Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 #Javascript
tracking.js页面人脸识别插件使用方法
Apr 16 #Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
Nov 26 #Javascript
Vue.js的动态组件模板的实现
Nov 26 #Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 #Javascript
You might like
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
js密码强度检测
2016/01/07 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
初二学习计划书范文
2014/04/27 职场文书
军训新闻稿范文
2015/07/17 职场文书
交通安全教育主题班会
2015/08/12 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技