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 相关文章推荐
ie 7/8不支持trim的属性的解决方案
May 23 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
js 截取或者替换字符串中的数字实现方法
Jun 13 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
Dec 06 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
Mar 19 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
图片文字识别(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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
php写入txt乱码的解决方法
2019/09/17 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
用jquery来定位
2007/02/20 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python写的ARP攻击代码实例
2014/06/04 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python计算文本文件行数的方法
2015/07/06 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
python基于SMTP协议发送邮件
2019/05/31 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
深入了解python列表(LIST)
2020/06/08 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
我的中国梦演讲稿600字
2014/08/19 职场文书
小学生志愿者活动方案
2014/08/23 职场文书