如何在Node中使用OCR實(shí)現(xiàn)圖像文字識(shí)別功能?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、永和網(wǎng)站維護(hù)、網(wǎng)站推廣。環(huán)境需求
1.Express 是一個(gè)非常流行的node.js的web框架?;赾onnect(node中間件框架)。提供了很多便于處理http請(qǐng)求等web開(kāi)發(fā)相關(guān)的擴(kuò)展。
2.OCR:
通用文字識(shí)別 Node SDK目錄結(jié)構(gòu):
├── src
│ ├── auth //授權(quán)相關(guān)類
│ ├── http //Http通信相關(guān)類
│ ├── client //公用類
│ ├── util //工具類
│ └── const //常量類
├── AipOcr.js //通用文字識(shí)別交互類
├── index.js //入口文件
└── package.json //npm包描述文件
支持 node 版本 4.0+
直接使用node開(kāi)發(fā)包步驟如下:
1.在官方網(wǎng)站下載node SDK壓縮包。
2.將下載的aip-node-sdk-version.zip解壓后,復(fù)制到工程文件夾中。
3.進(jìn)入目錄,運(yùn)行npm install安裝sdk依賴庫(kù)
4.把目錄當(dāng)做模塊依賴
其中,version為版本號(hào),添加完成后,用戶就可以在工程中使用通用文字識(shí)別 Node SDK。
直接使用npm安裝依賴:
npm install baidu-aip-sdk(嘗試沒(méi)有成功)
AipOcrClient是Optical Character Recognition的node客戶端,為使用Optical Character Recognition的開(kāi)發(fā)人員提供了一系列的交互方法。
用戶可以參考如下代碼新建一個(gè)AipOcrClient:
var AipOcrClient = require("baidu-aip-sdk").ocr; // 設(shè)置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搭建就不再做詳細(xì)介紹了,上一篇博客已有哦~~
功能實(shí)現(xiàn)
前端上傳圖片后端處理:
router.route("/uploadPhoto").get(function(req,res){ // 到達(dá)此路徑則渲染register文件,并傳出title值供 register.html使用 res.render("uploadPhoto",{title:'圖片文字識(shí)別',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; // 保留擴(kuò)展名 form.maxFieldsSize = 2 * 1024 * 1024; // 文件大小 form.uploadDir = 'F:/nodejs/ocrCheck/assets/OCR' // 存儲(chǔ)路徑 form.parse(req,function(err,fileds,files){ // 解析 formData數(shù)據(jù) 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){ // 存儲(chǔ)文件 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圖片數(shù)據(jù)和res對(duì)象作為闡述傳遞給ocr提供好的方法, 回調(diào)產(chǎn)生的數(shù)據(jù)將作為結(jié)果返回給前端。
####小彩蛋:
nodeJs中commonJs規(guī)范如何實(shí)現(xiàn)的?
1.Node程序由許多個(gè)模塊組成,每個(gè)模塊就是一個(gè)文件。Node模塊采用了CommonJS規(guī)范。
2.module對(duì)象,Node內(nèi)部提供一個(gè)Module構(gòu)建函數(shù)。所有模塊都是Module的實(shí)例。每個(gè)模塊內(nèi)部,都有一個(gè)module對(duì)象,代表當(dāng)前模塊。它有以下屬性。
module.id 模塊的識(shí)別符,通常是帶有絕對(duì)路徑的模塊文件名。 module.filename 模塊的文件名,帶有絕對(duì)路徑。 module.loaded 返回一個(gè)布爾值,表示模塊是否已經(jīng)完成加載。 module.parent 返回一個(gè)對(duì)象,表示調(diào)用該模塊的模塊。 module.children 返回一個(gè)數(shù)組,表示該模塊要用到的其他模塊。 module.exports 表示模塊對(duì)外輸出的值。
3.調(diào)用:根據(jù)模塊名稱作為對(duì)象調(diào)用其內(nèi)自定義的方法即可。
global.nodeServer.getResult(res,imgName);
看完上述內(nèi)容,你們掌握如何在Node中使用OCR實(shí)現(xiàn)圖像文字識(shí)別功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!