文字单行唯一特征

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)

  

posted @ 2021-11-26 19:09  无工时代  阅读(39)  评论(0)    收藏  举报