zoukankan      html  css  js  c++  java
  • 文字单行唯一特征

    const PNG = require("pngjs").PNG;
    const fs=require('fs')
    require('./sortAdd')
    const getGrayData=require('./getGrayData')
    const {getLbpData,getUniformLbpData}=require('./getLbpData')
    const getLineArrByGrayData=require('./getLineArrByGrayData')
    
    const getTextArr=require('./getTextArr')
    const getV=require('./getV')
    
    const buff=fs.readFileSync('../data/Arial32.png');
    const imageData=PNG.sync.read(buff)
    const grayData=getGrayData(imageData)
    const lbpData=getUniformLbpData(grayData)
    
    const posArr=getLineArrByGrayData(grayData)
    const textArr=getTextArr();
    
    const onceMap={};
    const list_key=[];
    const list_val=[];
    let noUseNum=0;
    posArr.forEach(function (pos,i) {
      // if(i>9){return}
    
      if(/[a-z]/i.test(textArr[i])){
        noUseNum++
        return;
      }
      const [x1,y1,x2,y2]=pos;
      const w=x2-x1
      const h=y2-y1
      for(let y=y1;y<y2;y++){
        const arr=[]
        for(let x=x1;x<x2;x++){
          const v=getV(x,y,lbpData)
          arr.push(v)
        }
        const key=arr.join('').replace(/^0*(.*?)0*$/,'$1');
        if(key){
          const [n,len,dis]=list_key.sortFindLen(key)
          const obj=[i]
          if(dis===1){
            list_key.splice(n+1,0,key)
            list_val.splice(n+1,0,obj)
          }else if(dis===-1){
            list_key.splice(n,0,key)
            list_val.splice(n,0,obj)
          }else{
            list_val[n].pushOnly(i)
          }
        }
      }
    })
    const twoArr=[]
    for(let i=list_val.length-1;i>=0;i--){
      const arr=list_val[i]
      if(arr.length>1){
        list_key.splice(i,1)
        list_val.splice(i,1)
        twoArr.push(arr)
      }
    }
    //单行唯一特征
    console.log(list_val)
    
    
    function getLine(x1,x2,y,lbpData) {
      const arr = [];
      for (let x = x1; x < x2; x++) {
        const v = getV(x, y, lbpData)
        arr.push(v)
      }
      return arr.join('');
    }
    
    function solve(lbpData) {
      const text_Arr=[]
      for(let y=0;y<lbpData.height;y++) {
        const line=getLine(0,lbpData.width,y,lbpData)
        let x=0;
        while (x<lbpData.width){
          const [n,len,dis]=list_key.sortFindLen(line,x);
    //命中了
          if(dis===0||dis===1&&len===list_key[n].length){
            const index=list_val[n][0];
            text_Arr.pushOnly(index)
            x=x+len
          }else{
            x++;
          }
        }
      }
      for(let i=0;i<textArr.length;i++){
        const tv=textArr[i]
        if(/[a-z]/i.test(tv)){
    
        }else{
          if(text_Arr.indexOf(i)===-1){
            console.log(i,tv)
          }
        }
      }
      console.log(text_Arr.length)
      console.log(textArr.length-noUseNum)
    }
    
    solve(lbpData)
    
    
    // console.log(list_key)
    // console.log(list_val)
    

      

  • 相关阅读:
    关系数据库&&NoSQL数据库
    NoSQL
    大数据时代的数据存储,非关系型数据库MongoDB
    判断是否为BST
    百度2017暑期实习生编程题
    memset()实现及细节
    在必须返回一个对象时,不要去尝试返回一个引用
    返回局部变量指针
    用引用返回值
    数组形参
  • 原文地址:https://www.cnblogs.com/caoke/p/15609237.html
Copyright © 2011-2022 走看看