Atitit 使用js nodejs进行图像处理ocr的解决方案attilax总结

Atitit 使用js nodejs进行图像处理ocr的解决方案attilax总结

 

 

1.1. 导出类库以及class的调用 1

1.2. Cli接口处理  var exec = require('child_process').exec; 1

1.3. Stdout的输出接受与乱码处理 1

1.4. 大批量数据下的数据接受exit事件可能在data事件之前执行,使用延时策略ok 2

1.5. 线程sleep的问题,使用setInterval解决setInterval(timeEvent,5000); 3

1.6. 线程池问题,cpu占用100%解决,监控进程数量即可 3

1.7. Code  D:\0workspace\atiplat_ee\com.attilax\core\process.js 3

 

 

大概是调用ocr类库接口,通过cli接口。。有一些问题一点点的解决了。。

脚本语言在图像处理领域也是一个非常好的一个选择,主流基本语言有js pythonphp等。。Attilax更加的看好js python的缩进很蛋疼。。脚本语言最大的优点就是不用编译啊,方便修改,体积小巧。部署友好性较好。。

 

编程语言的可读性与开发效率提升,也是从机器语言>>asm汇编》》native类型语言(vb pb c c++ delphi) >>vm类型语言(java c#) >>script脚本语言(js python php) >>dsl类型语言(halcon matlab脚本等)。。

 

但是成也编译,败也编译。。为了保护商业机密,源码外漏的脚本语言在商业中还是需要考虑的。。有时只好使用编译型语言了。一般轻编译的vm类型语言java c#.net系列即可满足需求了。。

 

 

 

 

 

 

 

1.1. 导出类库以及class的调用

function Process()
{
 this.dbg=false;
}


try{
    module.exports.Process = Process;
 }catch(e)
{

}

 

调用模块

var Prcs = require("./com.attilax/core/process.js");
var prc=new Prcs.Process();

 

 

1.2. Cli接口处理  var exec = require('child_process').exec;

1.3. Stdout的输出接受与乱码处理

通过data exit事件处理即可。。

  var exec = require('child_process').exec;
    var exeHandler = exec(cmd, {
        encoding: "binary"
    
});

    exeHandler.stdout.on('data', function (stdout_data) {
        var str = iconv.decode(stdout_data, 'GBK');
        if(this.dbg)
        console.log('-----stdout_data data:' + str);
        stdout_data_fun(str);
    });
//note ,if many data,,exit event maybe bef the data event ..,in many line data ret .should use timeout ..
    
exeHandler.on('exit', function (code) {
        console.log('---exit code:' + code);


        exit_fun(code);
    });

 

1.4. 大批量数据下的数据接受exit事件可能在data事件之前执行,使用延时策略ok

var cmd="wmic process get name";

this.exec(cmd,function(lines){
  
},function(code){
  //  retFun(li);
    
setTimeout(function(){
        retFun(li);
    },1000);
});

 

 

1.5. 线程sleep的问题,使用setInterval解决setInterval(timeEvent,5000);

sleep,不然以为js是异步的,会大量占用cpou

1.6. 线程池问题,cpu占用100%解决,监控进程数量即可

prc.listNgrep("tesseract.exe",function(prcs_arr){
    console.log("----listNgrep finish..")
    console.log(prcs_arr);
});

判断prcs_arrlenth解决。。在timeevent里面。。

1.7. Code  D:\0workspace\atiplat_ee\com.attilax\core\process.js

 

/**
 * Created by Administrator on 2017/1/31.
 * ns process
 */


function Process()
{
 this.dbg=false;
}
//var Process = function(){}


Process
.prototype.list=function()
{
    var cmd="";
    this.exec(cmd,function(line){

    },function(code){

    })
}

Process.prototype.exec=function(cmd,stdout_data_fun,exit_fun)
{
    var pM = require("../../com.attilax/io/path.js");
//    var cmd = 'D:\\0workspace\\Tesseract\\tesseract.exe "@jpg@"  "@rztName@" -l chi_sim';

   
;
    console.log('-----cmd data:' + cmd);
    var iconv = require('iconv-lite');
    var exec = require('child_process').exec;
    var exeHandler = exec(cmd, {
        encoding: "binary"
    
});

    exeHandler.stdout.on('data', function (stdout_data) {
        var str = iconv.decode(stdout_data, 'GBK');
        if(this.dbg)
        console.log('-----stdout_data data:' + str);
        stdout_data_fun(str);
    });
//note ,if many data,,exit event maybe bef the data event ..,in many line data ret .should use timeout ..
    
exeHandler.on('exit', function (code) {
        console.log('---exit code:' + code);


        exit_fun(code);
    });
}


Process.prototype.listNgrep=function(grepWord,retFun)
{
    var li=new Array();
    var cmd="wmic process get name";

    this.exec(cmd,function(lines){
        var a=lines.split("\r\n");
        for(idx in a)
        {
            var line=a[idx];
            line=line.replace("\r","");
            var logstr="line.indexOf_grepWord_, line:"+line;
            logstr+=", indexof:"+line.indexOf(grepWord);
            logstr+=", rzt:"+(line.indexOf(grepWord)>=0);
            console.log(logstr);
            var idx2=line.indexOf(grepWord);
            if(idx2>=0)
            {
                 console.log("--will add"+line);
                li.push(line);
            }else{}

        }

    },function(code){
      //  retFun(li);
        
setTimeout(function(){
            retFun(li);
        },1000);
    });

}


try{
    module.exports.Process = Process;
 }catch(e)
{

}

 

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher  kok  虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊

常用名:艾提拉(艾龙),  EMAIL:[email protected]

 

 

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

Emir Uke部落首席大酋长,

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

uke 首席cto  奶牛科技首席cto , 软件部门总监 技术部副总监  研发部门总监主管  产品部副经理 项目部副经理

uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

 Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长

 

uke终身教育学校副校长   Uke医院 与医学院方面的创始人

 uec学院校长, uecip图像处理机器视觉专业系主任   uke文档检索专业系主任

 Uke 户外运动协会理事长  度假村首席大村长  uke交友协会会长

 uke出版社编辑总编

 

转载请注明来源:attilax的专栏  ?http://blog.csdn.net/attilax

--Atiend  v6

 

你可能感兴趣的:(Atitit 使用js nodejs进行图像处理ocr的解决方案attilax总结)