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 相关文章推荐
Javascript 学习笔记 错误处理
Jul 30 Javascript
JavaScript 以对象为索引的关联数组
May 19 Javascript
移动节点的jquery代码
Jan 13 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
JavaScript中的getTime()方法使用详解
Jun 10 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
DatePickerDialog 自定义样式及使用全解
Jul 09 Javascript
在Webpack中用url-loader处理图片和字体的问题
Apr 28 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 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实现mysql同步的实现方法
2009/10/21 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
php简单统计中文个数的方法
2016/09/30 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python生成器常见问题及解决方案
2020/03/21 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
《观舞记》教学反思
2014/04/16 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
三峡导游词
2015/01/31 职场文书
新教师个人工作总结
2015/02/06 职场文书
结婚通知短信大全
2015/04/17 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
mysql 获取时间方式
2022/03/20 MySQL
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技