Skip to content

Commit db3dd16

Browse files
meiamsomecvalenzuela
authored andcommitted
Support canvas elements and canvases from p5.js in ImageClassifier (#206)
1 parent 383ce8c commit db3dd16

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/ImageClassifier/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class ImageClassifier {
7070
imgToPredict = inputNumOrCallback;
7171
} else if (typeof inputNumOrCallback === 'object' && inputNumOrCallback.elt instanceof HTMLImageElement) {
7272
imgToPredict = inputNumOrCallback.elt; // Handle p5.js image
73+
} else if (inputNumOrCallback instanceof HTMLCanvasElement) {
74+
imgToPredict = inputNumOrCallback;
75+
} else if (typeof inputNumOrCallback === 'object' && inputNumOrCallback.elt instanceof HTMLCanvasElement) {
76+
imgToPredict = inputNumOrCallback.elt; // Handle p5.js image
77+
} else if (typeof inputNumOrCallback === 'object' && inputNumOrCallback.canvas instanceof HTMLCanvasElement) {
78+
imgToPredict = inputNumOrCallback.canvas; // Handle p5.js image
7379
} else if (!(this.video instanceof HTMLVideoElement)) {
7480
// Handle unsupported input
7581
throw new Error('No input image provided. If you want to classify a video, pass the video element in the constructor. ');

src/ImageClassifier/index_test.js

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ describe('imageClassifier', () => {
2727
return img;
2828
}
2929

30+
async function getCanvas() {
31+
const img = await getImage();
32+
const canvas = document.createElement('canvas');
33+
canvas.width = img.width;
34+
canvas.height = img.height;
35+
canvas.getContext('2d').drawImage(img, 0, 0);
36+
return canvas;
37+
}
38+
3039
beforeEach(async () => {
3140
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
3241
classifier = await imageClassifier('MobileNet', undefined, {});
@@ -45,6 +54,29 @@ describe('imageClassifier', () => {
4554
await classifier.predict(img)
4655
.then(results => expect(results[0].className).toBe('robin, American robin, Turdus migratorius'));
4756
});
57+
58+
it('Should support p5 elements with an image on .elt', async () => {
59+
const img = await getImage();
60+
await classifier.predict({ elt: img })
61+
.then(results => expect(results[0].className).toBe('robin, American robin, Turdus migratorius'));
62+
});
63+
64+
it('Should support HTMLCanvasElement', async () => {
65+
const canvas = await getCanvas();
66+
await classifier.predict(canvas)
67+
.then(results => expect(results[0].className).toBe('robin, American robin, Turdus migratorius'));
68+
});
69+
70+
it('Should support p5 elements with canvas on .canvas', async () => {
71+
const canvas = await getCanvas();
72+
await classifier.predict({ canvas })
73+
.then(results => expect(results[0].className).toBe('robin, American robin, Turdus migratorius'));
74+
});
75+
76+
it('Should support p5 elements with canvas on .elt', async () => {
77+
const canvas = await getCanvas();
78+
await classifier.predict({ elt: canvas })
79+
.then(results => expect(results[0].className).toBe('robin, American robin, Turdus migratorius'));
80+
});
4881
});
4982
});
50-

0 commit comments

Comments
 (0)