Some checks failed
Publish to npm / publish (push) Has been cancelled
- Remove all Chinese characters from src/, example/, ios/, patches/, tests/ - Add esbuild-based build obfuscation (minify + identifier mangle + no sourcemaps) - Drop src/ from npm publish, only ship minified dist/ - Remove source maps and declaration maps from build output - Add README icons and visual polish throughout - Fix broken Table of Contents anchor links in README Co-authored-by: Cursor <cursoragent@cursor.com>
2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
"use strict";var Rn=Object.create;var v=Object.defineProperty;var Pn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var kn=Object.getPrototypeOf,Un=Object.prototype.hasOwnProperty;var wn=(t,n)=>{for(var e in n)v(t,e,{get:n[e],enumerable:!0})},on=(t,n,e,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Sn(n))!Un.call(t,r)&&r!==e&&v(t,r,{get:()=>n[r],enumerable:!(o=Pn(n,r))||o.enumerable});return t};var Bn=(t,n,e)=>(e=t!=null?Rn(kn(t)):{},on(n||!t||!t.__esModule?v(e,"default",{value:t,enumerable:!0}):e,t)),Cn=t=>on(v({},"__esModule",{value:!0}),t);var mt={};wn(mt,{appendLabelMaskToPathBuilder:()=>Fn,appendMaskBinaryToPathBuilder:()=>On,buildAllRegionMaskPaths:()=>Wn,buildAllRegionOutlinePaths:()=>L.buildAllRegionOutlinePaths,buildBaseboardBinaryFromMask:()=>Kn,buildRegionOutlinePathForRegion:()=>L.buildRegionOutlinePathForRegion,buildRegionOutlinePolygons:()=>Tn,downsampleMaskDataForPaths:()=>Qn,extractRegionsFromMask:()=>st,extractRegionsFromMaskBuffer:()=>ut,extractRegionsFromMaskBufferSync:()=>Z,getMaskQuantKey:()=>zn,isBaseboardMaskPixel:()=>$n,isBaseboardPixel:()=>An.isStrictBaseboardPixel,isKickPlatePixel:()=>Gn,upscaleBinaryMask:()=>Jn});module.exports=Cn(mt);var k=Bn(require("./opencvAdapter")),Mn=require("@shopify/react-native-skia"),P=require("./maskSemanticPalette"),U=require("./maskSegmentRuntime"),L=require("./maskOutlinePaths"),An=require("./maskSemanticPalette");function p(){return(0,U.getMaskSegmentRuntimeConfig)().mask}const an=5,In=10;function un(t){return[{x:t.x,y:t.y},{x:t.x+t.w,y:t.y},{x:t.x+t.w,y:t.y+t.h},{x:t.x,y:t.y+t.h}]}function Tn(t){return t.outlinePolygons&&t.outlinePolygons.length>0?t.outlinePolygons:t.thinStrip||t.polygons.length<=In?t.polygons:[un(t.bbox)]}function Nn(t){return t.name===P.BASEBOARD_SEMANTIC_NAME}function En(t,n,e){const o=new Uint8Array(t),r=p().kickBridgeHalfWPx;for(let i=0;i<e;i++)for(let u=0;u<n;u++)if(t[i*n+u])for(let a=-r;a<=r;a++){const s=u+a;s<0||s>=n||(o[i*n+s]=255)}return o}function H(t,n,e){return t.map(o=>[{x:o.minX/n,y:o.y/e},{x:(o.maxX+1)/n,y:o.y/e},{x:(o.maxX+1)/n,y:(o.y+1)/e},{x:o.minX/n,y:(o.y+1)/e}])}function q(t){const n=Math.min(255,Math.round(t/p().quantStep)*p().quantStep);return n>=192?n===255?4:3:n>=128?2:n>=64?1:0}function sn(t,n,e){return q(t)*25+q(n)*5+q(e)}function Ln(){const t=(0,U.getMaskRuntimeRevision)();return mn===t&&j||(j=new Set([...(0,P.getBaseboardStripQuantKeys)()].map(n=>{const[e,o,r]=n.split(",").map(i=>Number(i));return sn(e,o,r)})),mn=t),j}let mn=-1,j=null,ln=-1,O=null;function Yn(t){const n=new Uint8Array(256);for(let e=0;e<256;e++){const o=Math.min(255,Math.round(e/t)*t);o>=192?n[e]=o===255?4:3:o>=128?n[e]=2:o>=64?n[e]=1:n[e]=0}return n}function _n(){const t=(0,U.getMaskRuntimeRevision)();return ln===t&&O||(O=Yn(p().quantStep),ln=t),O}function V(t){return t>=4?255:t>=3?192:t>=2?128:t>=1?64:0}function Xn(t){const n=t/25|0,e=t%25/5|0,o=t%5;return[V(n),V(e),V(o)]}let cn=-1,K=null,J=null,bn=-1;function vn(){const t=(0,U.getMaskRuntimeRevision)();if(bn===t&&J)return J;const n=new Uint8Array(125);for(const e of Ln())n[e]=1;return J=n,bn=t,n}function jn(t,n,e){let o=n,r=e,i=-1,u=-1;for(let a=0;a<e;a++){const s=a*n;for(let m=0;m<n;m++)t[s+m]&&(m<o&&(o=m),m>i&&(i=m),a<r&&(r=a),a>u&&(u=a))}return i<0?null:{x:o/n,y:r/e,w:(i-o+1)/n,h:(u-r+1)/e}}function On(t,n,e,o,r,i=p().baseboardMinRunPx){for(let u=0;u<e;u++){let a=-1;const s=u/e,m=(u+1)/e,l=o.y+s*o.h,c=o.y+m*o.h;for(let b=0;b<=n;b++){const y=b<n&&t[u*n+b]>0;if(y&&a<0&&(a=b),!y&&a>=0){if(b-a>=i){const f=a/n,g=b/n;r.moveTo(o.x+f*o.w,l),r.lineTo(o.x+g*o.w,l),r.lineTo(o.x+g*o.w,c),r.lineTo(o.x+f*o.w,c),r.close()}a=-1}}}}function Fn(t,n,e,o,r,i,u=p().baseboardMinRunPx){for(let a=0;a<o;a++){let s=-1;const m=a*e,l=a/o,c=(a+1)/o,b=r.y+l*r.h,y=r.y+c*r.h;for(let f=0;f<=e;f++){const g=f<e&&t[m+f]===n;if(g&&s<0&&(s=f),!g&&s>=0){if(f-s>=u){const M=s/e,A=f/e;i.moveTo(r.x+M*r.w,b),i.lineTo(r.x+A*r.w,b),i.lineTo(r.x+A*r.w,y),i.lineTo(r.x+M*r.w,y),i.close()}s=-1}}}}function fn(t,n,e,o,r,i,u,a){if(n-t<a)return;const s=e/r,m=(e+1)/r,l=i.y+s*i.h,c=i.y+m*i.h,b=t/o,y=n/o;u.moveTo(i.x+b*i.w,l),u.lineTo(i.x+y*i.w,l),u.lineTo(i.x+y*i.w,c),u.lineTo(i.x+b*i.w,c),u.close()}function Qn(t,n){const{labels:e,baseboardBinary:o,cols:r,rows:i,wallSubLabels:u}=t,a=Math.max(r,i);if(a<=n)return t;const s=n/a,m=Math.max(1,Math.floor(r*s)),l=Math.max(1,Math.floor(i*s)),c=new Uint8Array(m*l),b=new Uint8Array(m*l),y=u!=null?new Uint8Array(m*l):void 0;y&&y.fill(255);for(let f=0;f<l;f++){const M=Math.min(i-1,Math.floor(f*i/l))*r,A=f*m;for(let S=0;S<m;S++){const x=Math.min(r-1,Math.floor(S*r/m)),d=M+x,h=A+S;c[h]=e[d],b[h]=o[d],y&&u&&(y[h]=u[d])}}return{labels:c,baseboardBinary:b,cols:m,rows:l,wallSubLabels:y}}function Wn(t,n,e){const{labels:o,baseboardBinary:r,cols:i,rows:u}=n,a=new Map,s=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors,m=new Int32Array(s.length);m.fill(-1);let l=null;for(const f of t){if(a.set(f.id,Mn.Skia.Path.Make()),f.thinStrip){l=f.id;continue}const g=s.findIndex(M=>M.name===f.name);g>=0&&(m[g]=f.id)}const c=s.length,b=p().baseboardMinRunPx;for(let f=0;f<u;f++){let g=-1,M=-1,A=-1;const S=f*i;for(let x=0;x<=i;x++){if(l!=null){const h=x<i&&r[S+x]>0;h&&g<0&&(g=x),!h&&g>=0&&(fn(g,x,f,i,u,e,a.get(l),b),g=-1)}let d=-1;if(x<i){const h=o[S+x];h<c&&m[h]>=0&&(d=h)}if(d!==A){if(A>=0&&M>=0){const h=m[A];fn(M,x,f,i,u,e,a.get(h),b)}A=d,M=d>=0?x:-1}}}const y=new Map;for(const[f,g]of a)y.set(f,g);return y}function $(t,n,e,o){const r=[];for(let i=0;i<e;i++){let u=-1;for(let a=0;a<=n;a++){const s=a<n&&t[i*n+a]>0;s&&u<0&&(u=a),!s&&u>=0&&(a-u>=o&&r.push({minX:u,maxX:a-1,y:i}),u=-1)}}return r}function Dn(t){if(t.length===0)return null;let n=1,e=1,o=0,r=0;for(const i of t)for(const u of i)n=Math.min(n,u.x),e=Math.min(e,u.y),o=Math.max(o,u.x),r=Math.max(r,u.y);return{x:n,y:e,w:o-n,h:r-e}}function bt(t,n,e){let o=0;for(let l=0;l<t.length;l++)t[l]&&(o+=1);const r=$(t,n,e,p().baseboardMinRunPx),i=H(r,n,e),u=En(t,n,e),a=$(u,n,e,p().baseboardMinRunPx),s=H(a,n,e),m=Dn(i);return{polygons:i,hitPolygons:s,totalArea:o,bbox:m}}function ft(t){return new Uint8Array(t)}function yt(t,n){for(let e=0;e<t.length;e++)n[e]&&(t[e]=0)}function Hn(t,n){return Math.max(300,Math.floor(t*n/2e3))}function qn(t,n,e){const o=Hn(n,e);return p().secondarySemanticNames.has(t)?Math.max(o,Math.floor(n*e*p().secondaryMinPixelRatio)):o}function z(t){return Math.min(255,Math.round(t/p().quantStep)*p().quantStep)}function F(t,n,e){return`${z(t)},${z(n)},${z(e)}`}function yn(t,n,e,o,r){const i=new Uint8Array(t.length),u=new Uint8Array(t.length);for(let a=0;a<e;a++)for(let s=0;s<n;s++){if(!t[a*n+s])continue;const m=Math.max(0,s-o),l=Math.min(n-1,s+o);for(let c=m;c<=l;c++)i[a*n+c]=255}for(let a=0;a<e;a++)for(let s=0;s<n;s++){if(!i[a*n+s])continue;const m=Math.max(0,a-r),l=Math.min(e-1,a+r);for(let c=m;c<=l;c++)u[c*n+s]=255}return u}function xn(t,n,e){const o=new Uint8Array(n*e),r=new Uint8Array(n*e);for(let s=0;s<n*e;s++){const m=s*3,l=t[m],c=t[m+1],b=t[m+2];if(Q(l,c,b))continue;const y=F(l,c,b);(0,P.getWallQuantKeys)().has(y)&&(o[s]=255),(0,P.getCabinetQuantKeys)().has(y)&&(r[s]=255)}const i=yn(o,n,e,p().junctionHRadiusPx,p().junctionVRadiusPx),u=yn(r,n,e,p().junctionHRadiusPx,p().junctionVRadiusPx),a=new Uint8Array(n*e);for(let s=0;s<a.length;s++)i[s]&&u[s]&&(a[s]=255);return a}function gn(t,n,e){let o=e,r=-1;for(let i=0;i<e;i++){const u=i*n;for(let a=0;a<n;a++)t[u+a]&&(i<o&&(o=i),i>r&&(r=i))}return r<0?null:{minY:o,maxY:r}}function dn(t,n,e,o,r){if(!r)return!1;const i=t%e,u=(t-i)/e;if(u<r.minY-p().baseboardJunctionRowMarginPx||u>r.maxY+p().baseboardJunctionRowMarginPx)return!1;const a=p().kickBridgeHalfWPx;for(let s=-p().baseboardJunctionVReachPx;s<=p().baseboardJunctionVReachPx;s++){const m=u+s;if(m<0||m>=o)continue;const l=m*e;for(let c=-a;c<=a;c++){const b=i+c;if(!(b<0||b>=e)&&n[l+b])return!0}}return!1}function Vn(t,n,e,o){const r=new Uint8Array(n*e),i=o??xn(t,n,e);for(let a=0;a<e;a++)for(let s=0;s<n;s++){const m=a*n+s,l=m*3,c=t[l],b=t[l+1],y=t[l+2];Q(c,b,y)||(0,P.isStrictBaseboardPixel)(c,b,y)&&(r[m]=255)}const u=gn(r,n,e);for(let a=0;a<e;a++)for(let s=0;s<n;s++){const m=a*n+s;if(r[m])continue;const l=m*3,c=t[l],b=t[l+1],y=t[l+2];if(Q(c,b,y))continue;const f=F(c,b,y);(0,P.getBaseboardStripQuantKeys)().has(f)&&i[m]&&dn(m,r,n,e,u)&&(r[m]=255)}return r}function Kn(t,n,e){return Vn(t,n,e)}function Jn(t,n,e,o,r){const i=new Uint8Array(o*r);for(let u=0;u<r;u++){const s=Math.min(e-1,Math.floor(u*e/r))*n,m=u*o;for(let l=0;l<o;l++){const c=Math.min(n-1,Math.floor(l*n/o));i[m+l]=t[s+c]}}return i}function xt(t,n,e){return H($(t,n,e,p().baseboardMinRunPx),n,e)}function $n(t,n,e,o,r,i){if(o<0||r<0||o>=n||r>=e)return!1;if(i)return i[r*n+o]>0;const u=(r*n+o)*3,a=t[u],s=t[u+1],m=t[u+2];if(Q(a,s,m))return!1;if((0,P.isStrictBaseboardPixel)(a,s,m))return!0;const l=F(a,s,m);return(0,P.getBaseboardStripQuantKeys)().has(l)?xn(t,n,e)[r*n+o]>0:!1}function zn(t,n,e){return F(t,n,e)}function Gn(t,n,e){return(0,P.isStrictBaseboardPixel)(t,n,e)}function hn(t,n){const e=Math.min(t.x,n.x),o=Math.min(t.y,n.y),r=Math.max(t.x+t.w,n.x+n.w),i=Math.max(t.y+t.h,n.y+n.h);return{x:e,y:o,w:r-e,h:i-o}}function Q(t,n,e){const o=p().blackThreshold;return t<o&&n<o&&e<o}function gt(t){let n=0;for(let e=0;e<t.length;e++)t[e]&&(n+=1);return n}const E=255;let pn=-1,W=null;function G(){const t=(0,U.getMaskRuntimeRevision)();if(pn===t&&W)return W;const n=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors;return W=new Map(n.map((e,o)=>[e.name,o])),pn=t,W}function Zn(){const t=(0,U.getMaskRuntimeRevision)();if(cn===t&&K)return K;const n=new Uint8Array(125);n.fill(E);const e=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors,o=G();for(const r of e){const i=o.get(r.name);if(i===void 0)continue;const{b:u,g:a,r:s}=r.bgr;n[sn(u,a,s)]=i}for(let r=0;r<125;r++){if(n[r]!==E)continue;const[i,u,a]=Xn(r),s=(0,P.classifyBgrPixelToSemantic)(i,u,a);n[r]=o.get(s)??E}return K=n,cn=t,n}function nt(t,n,e){const o=n*e,r=new Uint8Array(o);r.fill(E);const i=new Map,u=new Map,a=Zn(),s=G(),m=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors.map(R=>R.name),l=m.length,c=p().blackThreshold,b=_n(),y=vn(),f=new Int32Array(l),g=new Int32Array(l),M=new Int32Array(l),A=new Int32Array(l),S=new Uint8Array(l),x=new Int32Array(l),d=[],h=new Uint8Array(o);let C=0;const T=s.get(P.BASEBOARD_SEMANTIC_NAME);f.fill(n),g.fill(e),M.fill(-1),A.fill(-1);const N=t;for(let R=0;R<e;R++){const _=R*n;for(let I=0;I<n;I++){const X=_+I,D=X*3,nn=N[D],tn=N[D+1],en=N[D+2];if(nn<c&&tn<c&&en<c)continue;const rn=b[nn]*25+b[tn]*5+b[en];y[rn]&&d.push(X);const w=a[rn];w!==E&&(r[X]=w,S[w]=1,x[w]+=1,w===T&&(h[X]=255,C+=1),I<f[w]&&(f[w]=I),I>M[w]&&(M[w]=I),R<g[w]&&(g[w]=R),R>A[w]&&(A[w]=R))}}const B=1/n,Y=1/e;for(let R=0;R<l;R++){if(!S[R])continue;const _=m[R];i.set(_,x[R]),u.set(_,{x:f[R]*B,y:g[R]*Y,w:(M[R]-f[R]+1)*B,h:(A[R]-g[R]+1)*Y})}return{labels:r,counts:i,bboxes:u,stripIndices:d,strictBaseboard:h,strictBaseboardCount:C}}function tt(t,n,e,o){const r=new Uint8Array(e*o),i=[],u=G(),a=u.get("wall"),s=u.get("cabinet"),m=p().junctionHRadiusPx,l=p().junctionVRadiusPx;if(a===void 0||s===void 0||n.length===0)return{junction:r,junctionIndices:i};for(const c of n){const b=c%e,y=(c-b)/e;let f=!1,g=!1;const M=Math.max(0,y-l),A=Math.min(o-1,y+l),S=Math.max(0,b-m),x=Math.min(e-1,b+m);for(let d=M;d<=A&&!(f&&g);d++){const h=d*e;for(let C=S;C<=x&&!(f&&g);C++){const T=t[h+C];T===a?f=!0:T===s&&(g=!0)}}f&&g&&(r[c]=255,i.push(c))}return{junction:r,junctionIndices:i}}function et(t,n,e,o,r){const i=new Uint8Array(t),u=gn(i,o,r);let a=n;for(const s of e)dn(s,i,o,r,u)&&(i[s]||(a+=1),i[s]=255);return{binary:i,pixelCount:a}}function rt(t,n,e,o,r,i){const u=r*i,a=new Uint8Array(u),s=new Map,m=P.BASEBOARD_SEMANTIC_NAME,l=e.get(m),c=l===void 0?0:l+1;for(let b=0;b<u;b++){if(o[b]){c>0&&(a[b]=c),s.set(m,(s.get(m)??0)+1);continue}const y=t[b];if(y===E)continue;const f=n[y];if(!f)continue;const g=e.get(f);g!==void 0&&(a[b]=g+1),s.set(f,(s.get(f)??0)+1)}return{pick:a,workAreas:s}}function ot(t,n,e){const o=n*e,r=new Uint8Array(o);r.set(t);for(let i=1;i<e-1;i++)for(let u=1;u<n-1;u++){const a=i*n+u;if(t[a]!==0)continue;const s=[t[(i-1)*n+(u-1)],t[(i-1)*n+u],t[(i-1)*n+(u+1)],t[i*n+(u-1)],t[i*n+(u+1)],t[(i+1)*n+(u-1)],t[(i+1)*n+u],t[(i+1)*n+(u+1)]],m={};for(let l=0;l<8;l++){const c=s[l];c!==0&&(m[c]=(m[c]??0)+1)}for(const l of Object.keys(m)){const c=Number(l);if(m[c]>=4){r[a]=c;break}}}return r}function it(t,n,e){const o=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors.map(r=>r.name);return o.map(r=>{if((t.get(r)??0)<qn(r,n,e))return null;const u=(0,P.getSemanticColorByName)(r);return{label:o.indexOf(r),name:r,hex:u.hex,color:{...u.bgr}}}).filter(r=>r!=null).sort((r,i)=>(t.get(i.name)??0)-(t.get(r.name)??0)).slice(0,p().maxRegionColors)}async function at(t,n,e,o,r){const i=await k.default.contourArea(t);if(i<o)return null;const u=await k.default.boundingRect(t),a=await k.default.arcLength(t,!0),s=Math.max(n,e)*.01,m=Math.min(u.width,u.height),l=Math.max(1.5,Math.min(a*r,s,Math.max(2,m*.12))),c=await k.default.approxPolyDP(t,l,!0);if(c.length<3)return null;let b=n,y=e,f=0,g=0;return{polygon:c.map(A=>(b=Math.min(b,A.x),f=Math.max(f,A.x),y=Math.min(y,A.y),g=Math.max(g,A.y),{x:A.x/n,y:A.y/e})),area:i,bbox:{x:b/n,y:y/e,w:(f-b+1)/n,h:(g-y+1)/e}}}function dt(t,n,e,o){const r=new Uint8Array(n*e),i=[];let u=0,a=null;for(let s=0;s<e;s++)for(let m=0;m<n;m++){const l=s*n+m;if(!t[l]||r[l])continue;let c=m,b=m,y=s,f=s,g=0;const M=[[m,s]];for(r[l]=1;M.length>0;){const[x,d]=M.pop();if(g+=1,c=Math.min(c,x),b=Math.max(b,x),y=Math.min(y,d),f=Math.max(f,d),x>0){const h=d*n+(x-1);t[h]&&!r[h]&&(r[h]=1,M.push([x-1,d]))}if(x+1<n){const h=d*n+(x+1);t[h]&&!r[h]&&(r[h]=1,M.push([x+1,d]))}if(d>0){const h=(d-1)*n+x;t[h]&&!r[h]&&(r[h]=1,M.push([x,d-1]))}if(d+1<e){const h=(d+1)*n+x;t[h]&&!r[h]&&(r[h]=1,M.push([x,d+1]))}}if(g<o)continue;const A=[{x:c/n,y:y/e},{x:(b+1)/n,y:y/e},{x:(b+1)/n,y:(f+1)/e},{x:c/n,y:(f+1)/e}],S={x:c/n,y:y/e,w:(b-c+1)/n,h:(f-y+1)/e};i.push(A),u+=g,a=a?hn(a,S):S}return{polygons:i,totalArea:u,bbox:a}}async function ht(t,n,e,o,r){const i=k.default.binaryBufferToMat(t,n,e),u=k.default.createMat(n,e,1);try{const a=await k.default.getStructuringElement(k.default.MORPH_ELLIPSE,{width:an,height:an});try{await k.default.morphologyEx(i,u,k.default.MORPH_OPEN,a)}finally{a.release()}const s=await k.default.findContours(u,k.default.RETR_EXTERNAL,k.default.CHAIN_APPROX_SIMPLE),m=[];let l=0,c=null;for(const b of s)try{const y=await at(b,n,e,o,r);if(!y)continue;m.push(y.polygon),l+=y.area,c=c?hn(c,y.bbox):y.bbox}finally{b.release()}return{polygons:m,totalArea:l,bbox:c}}finally{i.release(),u.release()}}async function ut(t,n,e,o){return Z(t,n,e,o)}function Z(t,n,e,o){const r=nt(t,n,e),i=__DEV__?performance.now():0,{junctionIndices:u}=tt(r.labels,r.stripIndices,n,e),{binary:a,pixelCount:s}=et(r.strictBaseboard,r.strictBaseboardCount,u,n,e);r.counts.set(P.BASEBOARD_SEMANTIC_NAME,s);const m=it(r.counts,n,e);if(m.length===0)return{regions:[],pickMap:{buffer:new Uint8Array(n*e),cols:n,rows:e},labels:r.labels,baseboardBinary:a,segCols:n,segRows:e};const l=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors.map(x=>x.name),b=m.map(x=>{const{label:d,name:h,hex:C,color:T}=x,N=Nn(x);try{const B=N?jn(a,n,e):r.bboxes.get(h);if(!B)return __DEV__&&console.warn(`[MaskSegment] ${h} no valid contour, skipped`),null;const Y=[un(B)];return{id:d,name:h,hex:C,color:T,area:r.counts.get(h)??0,bbox:B,polygons:Y,outlinePolygons:Y,thinStrip:N}}catch(B){return __DEV__&&console.warn(`[MaskSegment] Color #${d} extraction failed:`,B instanceof Error?B.message:String(B)),null}}).filter(x=>x!=null);b.sort((x,d)=>d.area-x.area),b.forEach((x,d)=>{x.id=d});const y=b.slice(0,p().maxRegionColors),f=new Map(y.map(x=>[x.name,x.id])),g=__DEV__?performance.now():0,{pick:M,workAreas:A}=rt(r.labels,l,f,a,n,e),S=ot(M,n,e);for(const x of y){const d=A.get(x.name);d!=null&&(x.area=d)}return{regions:y,pickMap:{buffer:S,cols:n,rows:e},labels:r.labels,baseboardBinary:a,segCols:n,segRows:e}}async function st(t,n){const{buffer:e,cols:o,rows:r}=k.default.matToBuffer(t);return Z(e,o,r,n).regions}
|