1- declare class CorrelationTracker {
1+ export declare class CorrelationTracker {
22 constructor ( a ?: number , b ?: number , c ?: number , d ?: number , e ?: number , f ?: number , g ?: number , h ?: number ) ;
3- startTrack ( img : Array2D , bbox : _Rectangle ) : void ;
4- predict ( img : Array2D ) : _Rectangle ;
5- update ( img : Array2D , guess : _Rectangle ) : _Rectangle ;
6- getPosition ( ) : _Rectangle ;
3+ startTrack ( img : Array2D , bbox : Rectangle ) : void ;
4+ predict ( img : Array2D ) : Rectangle ;
5+ update ( img : Array2D , guess : Rectangle ) : Rectangle ;
6+ getPosition ( ) : Rectangle ;
77}
8- declare class _Rectangle {
8+ export declare class Rectangle {
99 constructor ( l : number , t : number , r : number , b : number ) ;
1010 left : Readonly < number > ;
1111 right : Readonly < number > ;
@@ -14,103 +14,21 @@ declare class _Rectangle {
1414 width : Readonly < number > ;
1515 height : Readonly < number > ;
1616}
17- declare class Array2D {
17+ export declare class Array2D {
1818 constructor ( ) ;
1919 constructor ( h : number , w : number ) ;
2020 setSize ( h : number , w : number ) : void ;
2121 set ( y : number , x : number , value : number [ ] ) : void ;
2222 width : Readonly < number > ;
2323 height : Readonly < number > ;
2424}
25- declare interface dlib {
25+ export interface dlib {
2626 CorrelationTracker : typeof CorrelationTracker ;
2727 Array2D : typeof Array2D ;
28- Rectangle : typeof _Rectangle ;
28+ Rectangle : typeof Rectangle ;
2929 readImageData ( pointer : number , width : number , height : number ) : Array2D ;
3030
3131 HEAP8 : Int8Array ;
3232 _malloc ( size : number ) : number ;
3333 _free ( pointer : number ) : void ;
3434}
35-
36- const lib : dlib = require ( './dist/binding' ) ( ) ;
37-
38- let videoKeyInHeap : string | undefined ;
39- let cachedArray : Array2D | undefined ;
40- let canvas : HTMLCanvasElement | undefined ;
41-
42- const videoKey = ( video : HTMLVideoElement , pointer : number ) => pointer + video . src + video . currentTime ;
43-
44- function videoToArray2D ( video : HTMLVideoElement , pointer : number ) : Array2D {
45- const key = videoKey ( video , pointer ) ;
46- if ( key === videoKeyInHeap && cachedArray ) return cachedArray ;
47- if ( ! canvas ) canvas = document . createElement ( 'canvas' ) ;
48- const { videoWidth : width , videoHeight : height } = video ;
49- canvas . width = width ;
50- canvas . height = height ;
51- const ctx = canvas . getContext ( '2d' ) as CanvasRenderingContext2D ;
52- ctx . drawImage ( video , 0 , 0 ) ; CorrelationTracker
53- const pixels = ctx . getImageData ( 0 , 0 , width , height ) . data ;
54- lib . HEAP8 . set ( pixels , pointer ) ;
55- videoKeyInHeap = key ;
56- cachedArray = lib . readImageData ( pointer , width , height ) ;
57- return cachedArray ;
58- }
59-
60- interface Rectangle {
61- x : number ;
62- y : number ;
63- width : number ;
64- height : number ;
65- }
66-
67- export class VideoCorrelationTracker {
68- video : HTMLVideoElement ;
69- rect : Rectangle ;
70- tracker : CorrelationTracker ;
71-
72- private static ptr : number | undefined ;
73-
74- static freeMemory ( ) {
75- if ( this . ptr ) {
76- lib . _free ( this . ptr ) ;
77- this . ptr = undefined ;
78- }
79- }
80-
81- static reserveMemory ( video : HTMLVideoElement ) {
82- if ( this . ptr ) this . freeMemory ( ) ;
83- this . ptr = lib . _malloc ( video . videoWidth * video . videoHeight * 4 ) ;
84- }
85-
86- private get videoArray2D ( ) {
87- if ( ! VideoCorrelationTracker . ptr ) VideoCorrelationTracker . reserveMemory ( this . video ) ;
88- return videoToArray2D ( this . video , VideoCorrelationTracker . ptr as number ) ;
89- }
90-
91- get prediction ( ) : Rectangle {
92- const rect = this . tracker . predict ( this . videoArray2D ) ;
93- return {
94- x : rect . left ,
95- y : rect . top ,
96- width : rect . width ,
97- height : rect . height ,
98- } ;
99- }
100-
101- constructor ( video : HTMLVideoElement , rect : Rectangle ) {
102- this . video = video ;
103- this . rect = rect ;
104- if ( ! VideoCorrelationTracker . ptr ) VideoCorrelationTracker . reserveMemory ( video ) ;
105- this . tracker = new lib . CorrelationTracker ( ) ;
106- const _rect = new lib . Rectangle ( rect . x , rect . y , rect . x + rect . width , rect . y + rect . height ) ;
107- this . tracker . startTrack ( this . videoArray2D , _rect ) ;
108- }
109-
110- update ( rect : Rectangle ) {
111- const _rect = new lib . Rectangle ( rect . x , rect . y , rect . x + rect . width , rect . y + rect . height )
112- this . tracker . update ( this . videoArray2D , _rect ) ;
113- }
114- }
115-
116- export { lib } ;
0 commit comments