文字单行唯一特征
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | 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) |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步