@@ -19,44 +19,21 @@ const DEFAULTS = {
19
19
} ;
20
20
21
21
class ImageClassifier {
22
- constructor ( modelName , videoOrOptionsOrCallback , optionsOrCallback , cb = null ) {
23
- let options = { } ;
24
- let callback = cb ;
25
-
26
- if ( videoOrOptionsOrCallback instanceof HTMLVideoElement ) {
27
- this . video = videoOrOptionsOrCallback ;
28
- } else if ( typeof videoOrOptionsOrCallback === 'object' && videoOrOptionsOrCallback . elt instanceof HTMLVideoElement ) {
29
- this . video = videoOrOptionsOrCallback . elt ; // Handle a p5.js video element
30
- } else if ( videoOrOptionsOrCallback === 'object' ) {
31
- options = videoOrOptionsOrCallback ;
32
- } else if ( videoOrOptionsOrCallback === 'function' ) {
33
- callback = videoOrOptionsOrCallback ;
34
- }
35
-
36
- if ( typeof optionsOrCallback === 'object' ) {
37
- options = optionsOrCallback ;
38
- } else if ( typeof optionsOrCallback === 'function' ) {
39
- callback = optionsOrCallback ;
40
- }
41
-
42
- if ( typeof modelName === 'string' ) {
43
- this . modelName = modelName . toLowerCase ( ) ;
44
- this . version = options . version || DEFAULTS [ this . modelName ] . version ;
45
- this . alpha = options . alpha || DEFAULTS [ this . modelName ] . alpha ;
46
- this . topk = options . topk || DEFAULTS [ this . modelName ] . topk ;
47
- this . modelLoaded = false ;
48
- this . model = null ;
49
- if ( this . modelName === 'mobilenet' ) {
50
- this . modelToUse = mobilenet ;
51
- } else {
52
- this . modelToUse = null ;
53
- }
54
-
55
- // Load the model
56
- this . modelLoaded = this . loadModel ( callback ) ;
22
+ constructor ( modelName , video , options , callback ) {
23
+ this . modelName = modelName ;
24
+ this . video = video ;
25
+ this . version = options . version || DEFAULTS [ this . modelName ] . version ;
26
+ this . alpha = options . alpha || DEFAULTS [ this . modelName ] . alpha ;
27
+ this . topk = options . topk || DEFAULTS [ this . modelName ] . topk ;
28
+ this . modelLoaded = false ;
29
+ this . model = null ;
30
+ if ( this . modelName === 'mobilenet' ) {
31
+ this . modelToUse = mobilenet ;
57
32
} else {
58
- console . error ( 'Please specify a model to use. E.g: "Mobilenet"' ) ;
33
+ this . modelToUse = null ;
59
34
}
35
+ // Load the model
36
+ this . modelLoaded = this . loadModel ( callback ) ;
60
37
}
61
38
62
39
async loadModel ( callback ) {
@@ -121,4 +98,35 @@ class ImageClassifier {
121
98
}
122
99
}
123
100
124
- export default ImageClassifier ;
101
+ const imageClassifier = ( modelName , videoOrOptionsOrCallback , optionsOrCallback , cb = null ) => {
102
+ let model ;
103
+ let video ;
104
+ let options = { } ;
105
+ let callback = cb ;
106
+
107
+ if ( typeof modelName === 'string' ) {
108
+ model = modelName . toLowerCase ( ) ;
109
+ } else {
110
+ throw new Error ( 'Please specify a model to use. E.g: "MobileNet"' ) ;
111
+ }
112
+
113
+ if ( videoOrOptionsOrCallback instanceof HTMLVideoElement ) {
114
+ video = videoOrOptionsOrCallback ;
115
+ } else if ( typeof videoOrOptionsOrCallback === 'object' && videoOrOptionsOrCallback . elt instanceof HTMLVideoElement ) {
116
+ video = videoOrOptionsOrCallback . elt ; // Handle a p5.js video element
117
+ } else if ( videoOrOptionsOrCallback === 'object' ) {
118
+ options = videoOrOptionsOrCallback ;
119
+ } else if ( videoOrOptionsOrCallback === 'function' ) {
120
+ callback = videoOrOptionsOrCallback ;
121
+ }
122
+
123
+ if ( typeof optionsOrCallback === 'object' ) {
124
+ options = optionsOrCallback ;
125
+ } else if ( typeof optionsOrCallback === 'function' ) {
126
+ callback = optionsOrCallback ;
127
+ }
128
+
129
+ return new ImageClassifier ( model , video , options , callback ) ;
130
+ } ;
131
+
132
+ export default imageClassifier ;
0 commit comments