Skip to content

Commit 70f174f

Browse files
committed
change to ImageClassifier to work as a method and not a class
1 parent 2546bbb commit 70f174f

File tree

3 files changed

+48
-41
lines changed

3 files changed

+48
-41
lines changed

src/ImageClassifier/index.js

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,44 +19,21 @@ const DEFAULTS = {
1919
};
2020

2121
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;
5732
} else {
58-
console.error('Please specify a model to use. E.g: "Mobilenet"');
33+
this.modelToUse = null;
5934
}
35+
// Load the model
36+
this.modelLoaded = this.loadModel(callback);
6037
}
6138

6239
async loadModel(callback) {
@@ -121,4 +98,35 @@ class ImageClassifier {
12198
}
12299
}
123100

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;

src/ImageClassifier/index.test.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ const DEFAULTS = {
1111
};
1212

1313
describe('Create an image classifier', () => {
14-
//let classifier;
14+
// let classifier;
1515

16-
1716
it('true', () => {
1817
expect(true).toBe(true);
1918
});

src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as tf from '@tensorflow/tfjs';
77
import Crepe from './Crepe/';
8-
import ImageClassifier from './ImageClassifier/';
8+
import imageClassifier from './ImageClassifier/';
99
import FeatureExtractor from './FeatureExtractor/';
1010
import Word2Vec from './Word2vec/';
1111
import YOLO from './YOLO';
@@ -15,7 +15,7 @@ import StyleTransfer from './StyleTransfer/';
1515
import LSTMGenerator from './LSTM/';
1616

1717
module.exports = {
18-
ImageClassifier,
18+
imageClassifier,
1919
FeatureExtractor,
2020
Crepe,
2121
YOLO,

0 commit comments

Comments
 (0)