seg-cam 0.4.7 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Q=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var Ee=Object.prototype.hasOwnProperty;var De=(e,n)=>{for(var u in n)Q(e,u,{get:n[u],enumerable:!0})},be=(e,n,u,T)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of Te(n))!Ee.call(e,s)&&s!==u&&Q(e,s,{get:()=>n[s],enumerable:!(T=he(n,s))||T.enumerable});return e};var ke=e=>be(Q({},"__esModule",{value:!0}),e);var O=(e,n,u)=>new Promise((T,s)=>{var x=l=>{try{I(u.next(l))}catch(w){s(w)}},b=l=>{try{I(u.throw(l))}catch(w){s(w)}},I=l=>l.done?T(l.value):Promise.resolve(l.value).then(x,b);I((u=u.apply(e,n)).next())});var Re={};De(Re,{DEFAULT_CONFIG:()=>c,JerseyDetector:()=>re,useJerseyWorker:()=>z});module.exports=ke(Re);var t=require("react");var g=require("react");var f=null,S=!1,G=null,Z=0,ee=null,D=new Map,Ie=0,$=new Map;function z(e,n){let u=(0,g.useRef)(!1),[T,s]=(0,g.useState)(!1),[x,b]=(0,g.useState)(null),I=(0,g.useRef)(!0),l=(0,g.useRef)(!1),w=(0,g.useRef)(`instance_${Math.random().toString(36).substr(2,9)}`),A=(0,g.useRef)(0);(0,g.useEffect)(()=>{var _;if(!e)return;I.current=!0,A.current++;let v=A.current,C=w.current,H=(_=$.get(C))!=null?_:0;return v>H&&(Z++,$.set(C,v)),O(null,null,function*(){var p;if(!f||!we(ee,e)){f&&(f.terminate(),f=null,S=!1);try{l.current=(p=e.verbose)!=null?p:l.current;let a=n||"/jersey-detector-worker.js";f=new Worker(a),ee=e,S=!1,G=null,s(!1),b(null),f.onmessage=y=>{let i=y.data;switch(i.type){case"ready":S=!0,s(!0);break;case"loading_progress":l.current&&console.log(`[v0 useJerseyWorker] Loaded ${i.progress}% of ${i.file}`);break;case"debug":l.current&&console.log(i.debug_message);break;case"error":let M=i.error_message||"Unknown worker error";console.error("[v0 useJerseyWorker] Worker sent error message:",M),S=!1,G=M,s(!1),b(M);break;case"detect_response":if(i.requestId&&D.has(i.requestId)){let E=D.get(i.requestId);E&&(E.resolve(i),D.delete(i.requestId))}else if(D.size>0){let E=D.entries().next();if(!E.done){let[J,N]=E.value;N.resolve(i),D.delete(J)}}break}},f.onerror=y=>{let i=y.message||"Worker initialization error";console.error("[useJerseyWorker] Worker error:",i),S=!1,G=i,s(!1),b(i)},f.postMessage({type:"init",config:e})}catch(a){let y=(a==null?void 0:a.message)||String(a);console.error("[useJerseyWorker] Failed to create worker:",y),s(!1),b(y)}}else s(S),b(G)}),()=>{I.current=!1;let p=w.current,a=$.get(p),y=A.current;a===y&&(Z--,$.delete(p),Z<=0&&f&&(f.terminate(),f=null,S=!1,G=null,ee=null,D.clear()))}},[]);let V=(0,g.useCallback)((v,C,H=.5)=>O(null,null,function*(){if(!f||!S)throw new Error("Worker not ready");if(u.current)return null;let R=`req_${++Ie}_${Date.now()}`;return new Promise((_,p)=>{D.set(R,{resolve:_,reject:p});try{u.current=!0,f.postMessage({type:"detect",requestId:R,dimensions:C,bitmap:v,threshold:H},[v])}catch(a){D.delete(R);let y=`Failed to send detect: ${a==null?void 0:a.message}`;p(new Error(y))}finally{u.current=!1}setTimeout(()=>{D.has(R)&&(D.delete(R),p(new Error("Detection timeout")))},1e4)})}),[T]);return{isReady:T,workerReady:T,lastError:x,detect:V}}function we(e,n){return e?JSON.stringify(e)===JSON.stringify(n):!1}var c={TASK:"image-segmentation",MODEL:"BodyPix",BODYPIX_ARCHITECTURE:"MobileNetV1",BODYPIX_MULTIPLIER:.75,BODYPIX_QUANT_BYTES:2,BODYPIX_STRIDE:16,MULTI_SEGMENTATION:!0,SEGMENT_BODY_PARTS:!0,BACKGROUND_SHADE:0,SHIRT_SHADE:170,DETECTION_THRESHOLD:.5,TARGET_PART_ID:12,IMAGES_TO_RETURN:"mask",VERBOSE:!1};var ue=require("react/jsx-runtime"),re=(0,t.forwardRef)(({videoRef:e,onWorkerReady:n,onWorkerError:u,onStatsUpdate:T,onSegmentedImage:s,task:x=c.TASK,model:b=c.MODEL,verbose:I=c.VERBOSE,bodyPixArchitecture:l=c.BODYPIX_ARCHITECTURE,bodyPixMultiplier:w=c.BODYPIX_MULTIPLIER,bodyPixQuantBytes:A=c.BODYPIX_QUANT_BYTES,bodyPixStride:V=c.BODYPIX_STRIDE,multiSegmentation:v=c.MULTI_SEGMENTATION,segmentBodyParts:C=c.SEGMENT_BODY_PARTS,backgroundShade:H=c.BACKGROUND_SHADE,shirtShade:R=c.SHIRT_SHADE,threshold:_=c.DETECTION_THRESHOLD,targetPartId:p=c.TARGET_PART_ID,imagesToReturn:a=c.IMAGES_TO_RETURN,workerUrl:y},i)=>{var ne,se;let M=(0,t.useRef)(null),E=(0,t.useRef)(null),J=(0,t.useRef)(!1),N=(0,t.useRef)([]),le=(0,t.useRef)(null),L=(0,t.useRef)(!1),Y=(0,t.useRef)(void 0);Y.current=u;let K=(0,t.useRef)({jerseyCount:0,confidence:0,fps:0,processingTime:0}),te=(0,t.useRef)(0),me=500,de=(0,t.useMemo)(()=>({task:x,model:b,verbose:I,bodyPixArchitecture:l,bodyPixMultiplier:w,bodyPixQuantBytes:A,bodyPixStride:V,multiSegmentation:v,segmentBodyParts:C,backgroundShade:H,shirtShade:R,threshold:_,targetPartId:p,imagesToReturn:a}),[x,b,I,l,w,A,V,v,C,H,R,_,p,a]),fe=(0,t.useMemo)(()=>{var r,o;return{width:((r=e.current)==null?void 0:r.videoWidth)||0,height:((o=e.current)==null?void 0:o.videoHeight)||0}},[(ne=e.current)==null?void 0:ne.videoWidth,(se=e.current)==null?void 0:se.videoHeight]),{isReady:P,workerReady:W,lastError:U,detect:ge}=z(de,y);(0,t.useEffect)(()=>{n==null||n(W)},[W,n]),(0,t.useEffect)(()=>{var r;U&&(L.current=!0,(r=Y.current)==null||r.call(Y,U))},[U]);let pe=()=>O(null,null,function*(){var B,oe,ie;let r=e.current,o=M.current;if(L.current||!P||!W||!r||!o||J.current||r.readyState<2||r.paused||r.ended||r.videoWidth===0||r.videoHeight===0)return;let d=o.getContext("2d");if(!d||o.width<=0||o.height<=0)return;let h=null,m=null;try{J.current=!0;let F=r.videoWidth,j=r.videoHeight;le.current={width:F,height:j},h=yield createImageBitmap(r);let k=yield ge(h,fe,_);if((k==null?void 0:k.type)==="detect_response"&&k.bitmap){m=k.bitmap,(o.width!==F||o.height!==j)&&(o.width=F,o.height=j),a==="mask"&&d.clearRect(0,0,F,j),m&&d.drawImage(m,0,0),N.current.push(Date.now()),N.current=N.current.filter(X=>Date.now()-X<1e3);let q={jerseyCount:((B=k.stats)==null?void 0:B.detectionCount)||0,confidence:((oe=k.stats)==null?void 0:oe.averageConfidence)||0,fps:N.current.length,processingTime:((ie=k.stats)==null?void 0:ie.processingTime)||0},ae=K.current;K.current=q;let ce=Date.now();if((ce-te.current>me||q.jerseyCount!==ae.jerseyCount||q.confidence!==ae.confidence)&&T&&(T(q),te.current=ce),k.segmentedImages){let X=k.segmentedImages;O(null,null,function*(){try{yield s==null?void 0:s(X)}finally{X.forEach(ye=>ye.close())}})}}}catch(F){L.current=!0}finally{h==null||h.close(),m==null||m.close(),J.current=!1}});return(0,t.useImperativeHandle)(i,()=>({get isReady(){return P},get lastError(){return U},get stats(){return K.current},capture:(r="image/jpeg",o=.92)=>{let d=e.current,h=M.current;if(!d||d.videoWidth<=0||d.videoHeight<=0)throw new Error("Video not ready for capture");let m=document.createElement("canvas");m.width=d.videoWidth,m.height=d.videoHeight;let B=m.getContext("2d");if(!B)throw new Error("Failed to get context for capture canvas");return B.drawImage(d,0,0,m.width,m.height),h&&h.width>0&&h.height>0?B.drawImage(h,0,0,m.width,m.height):console.warn("[capture] Mask canvas not available \u2014 returning raw video frame"),m.toDataURL(r,o)}}),[P,U,W]),(0,t.useEffect)(()=>{if(!W||!P||L.current)return;let r=e.current,o=M.current;if(!r||!o||r.videoWidth===0||r.videoHeight===0){let h=setTimeout(()=>{E.current=requestAnimationFrame(()=>{})},100);return()=>clearTimeout(h)}(o.width!==r.videoWidth||o.height!==r.videoHeight)&&(o.width=r.videoWidth,o.height=r.videoHeight);let d=()=>O(null,null,function*(){!W||!P||L.current||(yield pe(),E.current=requestAnimationFrame(d))});return E.current=requestAnimationFrame(d),()=>{E.current&&cancelAnimationFrame(E.current)}},[W,P]),(0,ue.jsx)("canvas",{ref:M,className:"absolute inset-0 pointer-events-none",style:{zIndex:10,width:"100%",height:"100%"}})});re.displayName="JerseyDetector";0&&(module.exports={DEFAULT_CONFIG,JerseyDetector,useJerseyWorker});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var W=(t,y,h)=>new Promise((w,c)=>{var O=o=>{try{D(h.next(o))}catch(b){c(b)}},T=o=>{try{D(h.throw(o))}catch(b){c(b)}},D=o=>o.done?w(o.value):Promise.resolve(o.value).then(O,T);D((h=h.apply(t,y)).next())});import{forwardRef as ke,useImperativeHandle as Ie,useRef as I,useEffect as ee,useMemo as ue}from"react";import{useEffect as Te,useState as ce,useCallback as Ee,useRef as F}from"react";var l=null,M=!1,G=null,K=0,Q=null,p=new Map,De=0,$=new Map;function Z(t,y){let h=F(!1),[w,c]=ce(!1),[O,T]=ce(null),D=F(!0),o=F(!1),b=F(`instance_${Math.random().toString(36).substr(2,9)}`),x=F(0);Te(()=>{var v;if(!t)return;D.current=!0,x.current++;let R=x.current,S=b.current,A=(v=$.get(S))!=null?v:0;return R>A&&(K++,$.set(S,R)),W(null,null,function*(){var m;if(!l||!be(Q,t)){l&&(l.terminate(),l=null,M=!1);try{o.current=(m=t.verbose)!=null?m:o.current;let s=y||"/jersey-detector-worker.js";l=new Worker(s),Q=t,M=!1,G=null,c(!1),T(null),l.onmessage=d=>{let n=d.data;switch(n.type){case"ready":M=!0,c(!0);break;case"loading_progress":o.current&&console.log(`[v0 useJerseyWorker] Loaded ${n.progress}% of ${n.file}`);break;case"debug":o.current&&console.log(n.debug_message);break;case"error":let _=n.error_message||"Unknown worker error";console.error("[v0 useJerseyWorker] Worker sent error message:",_),M=!1,G=_,c(!1),T(_);break;case"detect_response":if(n.requestId&&p.has(n.requestId)){let g=p.get(n.requestId);g&&(g.resolve(n),p.delete(n.requestId))}else if(p.size>0){let g=p.entries().next();if(!g.done){let[B,H]=g.value;H.resolve(n),p.delete(B)}}break}},l.onerror=d=>{let n=d.message||"Worker initialization error";console.error("[useJerseyWorker] Worker error:",n),M=!1,G=n,c(!1),T(n)},l.postMessage({type:"init",config:t})}catch(s){let d=(s==null?void 0:s.message)||String(s);console.error("[useJerseyWorker] Failed to create worker:",d),c(!1),T(d)}}else c(M),T(G)}),()=>{D.current=!1;let m=b.current,s=$.get(m),d=x.current;s===d&&(K--,$.delete(m),K<=0&&l&&(l.terminate(),l=null,M=!1,G=null,Q=null,p.clear()))}},[]);let V=Ee((R,S,A=.5)=>W(null,null,function*(){if(!l||!M)throw new Error("Worker not ready");if(h.current)return null;let k=`req_${++De}_${Date.now()}`;return new Promise((v,m)=>{p.set(k,{resolve:v,reject:m});try{h.current=!0,l.postMessage({type:"detect",requestId:k,dimensions:S,bitmap:R,threshold:A},[R])}catch(s){p.delete(k);let d=`Failed to send detect: ${s==null?void 0:s.message}`;m(new Error(d))}finally{h.current=!1}setTimeout(()=>{p.has(k)&&(p.delete(k),m(new Error("Detection timeout")))},1e4)})}),[w]);return{isReady:w,workerReady:w,lastError:O,detect:V}}function be(t,y){return t?JSON.stringify(t)===JSON.stringify(y):!1}var a={TASK:"image-segmentation",MODEL:"BodyPix",BODYPIX_ARCHITECTURE:"MobileNetV1",BODYPIX_MULTIPLIER:.75,BODYPIX_QUANT_BYTES:2,BODYPIX_STRIDE:16,MULTI_SEGMENTATION:!0,SEGMENT_BODY_PARTS:!0,BACKGROUND_SHADE:0,SHIRT_SHADE:170,DETECTION_THRESHOLD:.5,TARGET_PART_ID:12,IMAGES_TO_RETURN:"mask",VERBOSE:!1};import{jsx as we}from"react/jsx-runtime";var le=ke(({videoRef:t,onWorkerReady:y,onWorkerError:h,onStatsUpdate:w,onSegmentedImage:c,task:O=a.TASK,model:T=a.MODEL,verbose:D=a.VERBOSE,bodyPixArchitecture:o=a.BODYPIX_ARCHITECTURE,bodyPixMultiplier:b=a.BODYPIX_MULTIPLIER,bodyPixQuantBytes:x=a.BODYPIX_QUANT_BYTES,bodyPixStride:V=a.BODYPIX_STRIDE,multiSegmentation:R=a.MULTI_SEGMENTATION,segmentBodyParts:S=a.SEGMENT_BODY_PARTS,backgroundShade:A=a.BACKGROUND_SHADE,shirtShade:k=a.SHIRT_SHADE,threshold:v=a.DETECTION_THRESHOLD,targetPartId:m=a.TARGET_PART_ID,imagesToReturn:s=a.IMAGES_TO_RETURN,workerUrl:d},n)=>{var te,ne;let _=I(null),g=I(null),B=I(!1),H=I([]),me=I(null),J=I(!1),Y=I(void 0);Y.current=h;let z=I({jerseyCount:0,confidence:0,fps:0,processingTime:0}),re=I(0),de=500,fe=ue(()=>({task:O,model:T,verbose:D,bodyPixArchitecture:o,bodyPixMultiplier:b,bodyPixQuantBytes:x,bodyPixStride:V,multiSegmentation:R,segmentBodyParts:S,backgroundShade:A,shirtShade:k,threshold:v,targetPartId:m,imagesToReturn:s}),[O,T,D,o,b,x,V,R,S,A,k,v,m,s]),ge=ue(()=>{var e,r;return{width:((e=t.current)==null?void 0:e.videoWidth)||0,height:((r=t.current)==null?void 0:r.videoHeight)||0}},[(te=t.current)==null?void 0:te.videoWidth,(ne=t.current)==null?void 0:ne.videoHeight]),{isReady:N,workerReady:C,lastError:L,detect:pe}=Z(fe,d);ee(()=>{y==null||y(C)},[C,y]),ee(()=>{var e;L&&(J.current=!0,(e=Y.current)==null||e.call(Y,L))},[L]);let ye=()=>W(null,null,function*(){var P,se,oe;let e=t.current,r=_.current;if(J.current||!N||!C||!e||!r||B.current||e.readyState<2||e.paused||e.ended||e.videoWidth===0||e.videoHeight===0)return;let u=r.getContext("2d");if(!u||r.width<=0||r.height<=0)return;let f=null,i=null;try{B.current=!0;let U=e.videoWidth,j=e.videoHeight;me.current={width:U,height:j},f=yield createImageBitmap(e);let E=yield pe(f,ge,v);if((E==null?void 0:E.type)==="detect_response"&&E.bitmap){i=E.bitmap,(r.width!==U||r.height!==j)&&(r.width=U,r.height=j),s==="mask"&&u.clearRect(0,0,U,j),i&&u.drawImage(i,0,0),H.current.push(Date.now()),H.current=H.current.filter(X=>Date.now()-X<1e3);let q={jerseyCount:((P=E.stats)==null?void 0:P.detectionCount)||0,confidence:((se=E.stats)==null?void 0:se.averageConfidence)||0,fps:H.current.length,processingTime:((oe=E.stats)==null?void 0:oe.processingTime)||0},ie=z.current;z.current=q;let ae=Date.now();if((ae-re.current>de||q.jerseyCount!==ie.jerseyCount||q.confidence!==ie.confidence)&&w&&(w(q),re.current=ae),E.segmentedImages){let X=E.segmentedImages;W(null,null,function*(){try{yield c==null?void 0:c(X)}finally{X.forEach(he=>he.close())}})}}}catch(U){J.current=!0}finally{f==null||f.close(),i==null||i.close(),B.current=!1}});return Ie(n,()=>({get isReady(){return N},get lastError(){return L},get stats(){return z.current},capture:(e="image/jpeg",r=.92)=>{let u=t.current,f=_.current;if(!u||u.videoWidth<=0||u.videoHeight<=0)throw new Error("Video not ready for capture");let i=document.createElement("canvas");i.width=u.videoWidth,i.height=u.videoHeight;let P=i.getContext("2d");if(!P)throw new Error("Failed to get context for capture canvas");return P.drawImage(u,0,0,i.width,i.height),f&&f.width>0&&f.height>0?P.drawImage(f,0,0,i.width,i.height):console.warn("[capture] Mask canvas not available \u2014 returning raw video frame"),i.toDataURL(e,r)}}),[N,L,C]),ee(()=>{if(!C||!N||J.current)return;let e=t.current,r=_.current;if(!e||!r||e.videoWidth===0||e.videoHeight===0){let f=setTimeout(()=>{g.current=requestAnimationFrame(()=>{})},100);return()=>clearTimeout(f)}(r.width!==e.videoWidth||r.height!==e.videoHeight)&&(r.width=e.videoWidth,r.height=e.videoHeight);let u=()=>W(null,null,function*(){!C||!N||J.current||(yield ye(),g.current=requestAnimationFrame(u))});return g.current=requestAnimationFrame(u),()=>{g.current&&cancelAnimationFrame(g.current)}},[C,N]),we("canvas",{ref:_,className:"absolute inset-0 pointer-events-none",style:{zIndex:10,width:"100%",height:"100%"}})});le.displayName="JerseyDetector";export{a as DEFAULT_CONFIG,le as JerseyDetector,Z as useJerseyWorker};
|