Skip to content

Commit 6080112

Browse files
update tfjs-core to latest
1 parent 3a314e8 commit 6080112

31 files changed

+568
-1027
lines changed

jasmine-node.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
let spec_files = ['**/*.test.ts'].concat(
32
process.env.EXCLUDE_UNCOMPRESSED
43
? ['!**/*.uncompressed.test.ts']

karma.conf.js

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ exclude = exclude.concat(
3838

3939
// exclude nodejs tests
4040
exclude = exclude.concat(['**/*.node.test.ts'])
41+
exclude = exclude.concat(['test/env.node.ts'])
4142

4243

4344
module.exports = function(config) {

package-lock.json

+398-890
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+14-14
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"build": "rm -rf ./build && rm -rf ./dist && npm run rollup && npm run rollup-min && npm run tsc && npm run tsc-es6",
1414
"test": "karma start",
1515
"test-browser": "karma start --single-run",
16-
"test-node": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine-node.js",
16+
"test-node": "ts-node -r ./test/env.node.ts node_modules/jasmine/bin/jasmine --config=jasmine-node.js",
1717
"test-all": "npm run test-browser-exclude-uncompressed && npm run test-node-exclude-uncompressed",
1818
"test-all-include-uncompressed": "npm run test-browser && npm run test-node",
1919
"test-facelandmarknets": "set UUT=faceLandmarkNet&& karma start",
@@ -26,7 +26,7 @@
2626
"test-cpu": "set BACKEND_CPU=true&& karma start",
2727
"test-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start",
2828
"test-browser-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start --single-run",
29-
"test-node-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& ts-node node_modules/jasmine/bin/jasmine --config=jasmine-node.js",
29+
"test-node-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& npm run test-node",
3030
"docs": "typedoc --options ./typedoc.config.js ./src"
3131
},
3232
"keywords": [
@@ -39,27 +39,27 @@
3939
"author": "justadudewhohacks",
4040
"license": "MIT",
4141
"dependencies": {
42-
"@tensorflow/tfjs-core": "1.2.2",
43-
"tfjs-image-recognition-base": "^0.6.1",
42+
"@tensorflow/tfjs-core": "1.2.9",
43+
"tfjs-image-recognition-base": "^0.6.2",
4444
"tslib": "^1.10.0"
4545
},
4646
"devDependencies": {
47-
"@tensorflow/tfjs-node": "^1.2.3",
48-
"@types/jasmine": "^3.3.13",
49-
"@types/node": "^12.0.10",
47+
"@tensorflow/tfjs-node": "^1.2.9",
48+
"@types/jasmine": "^3.4.0",
49+
"@types/node": "^12.7.5",
5050
"canvas": "2.5.0",
5151
"jasmine": "^3.4.0",
5252
"jasmine-core": "^3.4.0",
53-
"karma": "^4.1.0",
53+
"karma": "^4.3.0",
5454
"karma-chrome-launcher": "^2.2.0",
5555
"karma-jasmine": "^2.0.1",
56-
"karma-typescript": "^4.1.0",
57-
"rollup": "^1.16.2",
58-
"rollup-plugin-commonjs": "^10.0.1",
59-
"rollup-plugin-node-resolve": "^5.1.0",
56+
"karma-typescript": "^4.1.1",
57+
"rollup": "^1.21.2",
58+
"rollup-plugin-commonjs": "^10.1.0",
59+
"rollup-plugin-node-resolve": "^5.2.0",
6060
"rollup-plugin-typescript2": "^0.21.2",
61-
"rollup-plugin-uglify": "^6.0.2",
61+
"rollup-plugin-uglify": "^6.0.3",
6262
"ts-node": "^8.3.0",
63-
"typescript": "^3.5.2"
63+
"typescript": "^3.6.3"
6464
}
6565
}

test/Environment.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { NeuralNetwork } from 'tfjs-image-recognition-base';
2+
3+
export type TestEnv = {
4+
loadImage: (uri: string) => Promise<HTMLImageElement>
5+
loadJson: <T> (uri: string) => Promise<T>
6+
initNet: <TNet extends NeuralNetwork<any>>(
7+
net: TNet,
8+
uncompressedFilename?: string | boolean,
9+
isUnusedModel?: boolean
10+
) => any
11+
}

test/env.node.ts

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import * as fs from 'fs';
2+
import * as path from 'path';
3+
import { NeuralNetwork } from 'tfjs-image-recognition-base';
4+
5+
import { env } from '../src';
6+
import { TestEnv } from './Environment';
7+
8+
require('@tensorflow/tfjs-node')
9+
const canvas = require('canvas')
10+
11+
const { Canvas, Image, ImageData } = canvas
12+
env.monkeyPatch({ Canvas, Image, ImageData })
13+
14+
async function loadImageNode(uri: string): Promise<HTMLImageElement> {
15+
return canvas.loadImage(path.resolve(__dirname, '../', uri))
16+
}
17+
18+
async function loadJsonNode<T>(uri: string): Promise<T> {
19+
return JSON.parse(fs.readFileSync(path.resolve(__dirname, '../', uri)).toString())
20+
}
21+
22+
export async function initNetNode<TNet extends NeuralNetwork<any>>(net: TNet) {
23+
await net.loadFromDisk(path.resolve(__dirname, '../weights'))
24+
}
25+
26+
const nodeTestEnv: TestEnv = {
27+
loadImage: loadImageNode,
28+
loadJson: loadJsonNode,
29+
initNet: initNetNode
30+
}
31+
32+
global['nodeTestEnv'] = nodeTestEnv

test/env.ts

+23-34
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,41 @@
11
import * as tf from '@tensorflow/tfjs-core';
22
import { fetchNetWeights, NeuralNetwork } from 'tfjs-image-recognition-base';
33

4-
import { env, fetchImage, fetchJson } from '../src';
5-
6-
export let fs: any, path: any, canvas: any
4+
import { fetchImage, fetchJson } from '../src';
5+
import { TestEnv } from './Environment';
76

87
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000
98

10-
if (env.isNodejs()) {
11-
require('@tensorflow/tfjs-node')
12-
fs = require('fs')
13-
path = require('path')
14-
canvas = require('canvas')
15-
16-
const { Canvas, Image, ImageData } = canvas
17-
env.monkeyPatch({ Canvas, Image, ImageData })
18-
} else {
19-
if ((window['__karma__'].config.jasmine.args as string[]).some(arg => arg === 'backend_cpu')) {
20-
tf.setBackend('cpu')
21-
}
9+
if (typeof window !== 'undefined' && window['__karma__'] && (window['__karma__'].config.jasmine.args as string[]).some(arg => arg === 'backend_cpu')) {
10+
tf.setBackend('cpu')
2211
}
2312

24-
export async function initNet<TNet extends NeuralNetwork<any>>(
13+
async function loadImageBrowser(uri: string): Promise<HTMLImageElement> {
14+
return fetchImage(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
15+
}
16+
17+
async function loadJsonBrowser<T>(uri: string): Promise<T> {
18+
return fetchJson<T>(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
19+
}
20+
21+
async function initNetBrowser<TNet extends NeuralNetwork<any>>(
2522
net: TNet,
2623
uncompressedFilename: string | boolean,
2724
isUnusedModel: boolean = false
2825
) {
29-
if (env.isNodejs()) {
30-
await net.loadFromDisk(path.resolve(__dirname, '../weights'))
31-
} else {
32-
const url = uncompressedFilename
33-
? await fetchNetWeights(`base/weights_uncompressed/${uncompressedFilename}`)
34-
: (isUnusedModel ? 'base/weights_unused' : 'base/weights')
35-
await net.load(url)
36-
}
26+
const url = uncompressedFilename
27+
? await fetchNetWeights(`base/weights_uncompressed/${uncompressedFilename}`)
28+
: (isUnusedModel ? 'base/weights_unused' : 'base/weights')
29+
await net.load(url)
3730
}
3831

39-
export async function loadImage(uri: string): Promise<HTMLImageElement> {
40-
if (env.isNodejs()) {
41-
return canvas.loadImage(path.resolve(__dirname, '../', uri))
42-
}
43-
return fetchImage(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
32+
const browserTestEnv: TestEnv = {
33+
loadImage: loadImageBrowser,
34+
loadJson: loadJsonBrowser,
35+
initNet: initNetBrowser
4436
}
4537

46-
export async function loadJson<T>(uri: string): Promise<T> {
47-
if (env.isNodejs()) {
48-
return JSON.parse(fs.readFileSync(path.resolve(__dirname, '../', uri)).toString())
49-
}
50-
return fetchJson<T>(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
38+
export function getTestEnv(): TestEnv {
39+
return global['nodeTestEnv'] || browserTestEnv
5140
}
5241

test/tests/ageGenderNet/ageGenderNet.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
22

33
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
44
import { AgeAndGenderPrediction } from '../../../src/ageGenderNet/types';
5-
import { loadImage } from '../../env';
5+
import { getTestEnv } from '../../env';
66
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
77

88
function expectResultsAngry(result: AgeAndGenderPrediction) {
@@ -25,8 +25,8 @@ describeWithBackend('ageGenderNet', () => {
2525
let imgElSurprised: HTMLImageElement
2626

2727
beforeAll(async () => {
28-
imgElAngry = await loadImage('test/images/angry_cropped.jpg')
29-
imgElSurprised = await loadImage('test/images/surprised_cropped.jpg')
28+
imgElAngry = await getTestEnv().loadImage('test/images/angry_cropped.jpg')
29+
imgElSurprised = await getTestEnv().loadImage('test/images/surprised_cropped.jpg')
3030
})
3131

3232
describeWithNets('quantized weights', { withAgeGenderNet: { quantized: true } }, ({ ageGenderNet }) => {

test/tests/dom/extractFaceTensors.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { createCanvasFromMedia, extractFaceTensors, Rect, tf } from '../../../src';
2-
import { loadImage } from '../../env';
2+
import { getTestEnv } from '../../env';
33
import { describeWithBackend } from '../../utils';
44

55
describeWithBackend('extractFaceTensors', () => {
66

77
let imgTensor: tf.Tensor3D
88

99
beforeAll(async () => {
10-
imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await loadImage('test/images/face1.png')))
10+
imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await getTestEnv().loadImage('test/images/face1.png')))
1111
})
1212

1313
describe('extracts tensors', () => {

test/tests/dom/extractFaces.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { createCanvasFromMedia, env, extractFaces, Rect } from '../../../src';
2-
import { loadImage } from '../../env';
2+
import { getTestEnv } from '../../env';
33

44
describe('extractFaces', () => {
55

66
let imgEl: HTMLImageElement, canvasEl: HTMLCanvasElement, Canvas: typeof HTMLCanvasElement
77

88
beforeAll(async () => {
9-
imgEl = await loadImage('test/images/face1.png')
9+
imgEl = await getTestEnv().loadImage('test/images/face1.png')
1010
canvasEl = createCanvasFromMedia(imgEl)
1111
Canvas = env.getEnv().Canvas
1212
})

test/tests/faceExpressionNet/faceExpressionNet.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import * as tf from '@tensorflow/tfjs-core';
22

33
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
4-
import { loadImage } from '../../env';
5-
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
64
import { FaceExpressions } from '../../../src/faceExpressionNet/FaceExpressions';
5+
import { getTestEnv } from '../../env';
6+
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
77

88
describeWithBackend('faceExpressionNet', () => {
99

1010
let imgElAngry: HTMLImageElement
1111
let imgElSurprised: HTMLImageElement
1212

1313
beforeAll(async () => {
14-
imgElAngry = await loadImage('test/images/angry_cropped.jpg')
15-
imgElSurprised = await loadImage('test/images/surprised_cropped.jpg')
14+
imgElAngry = await getTestEnv().loadImage('test/images/angry_cropped.jpg')
15+
imgElSurprised = await getTestEnv().loadImage('test/images/surprised_cropped.jpg')
1616
})
1717

1818
describeWithNets('quantized weights', { withFaceExpressionNet: { quantized: true } }, ({ faceExpressionNet }) => {

test/tests/faceLandmarkNet/faceLandmark68Net.test.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
22

33
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
44
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
5-
import { loadImage, loadJson } from '../../env';
5+
import { getTestEnv } from '../../env';
66
import {
77
describeWithBackend,
88
describeWithNets,
@@ -29,12 +29,12 @@ describeWithBackend('faceLandmark68Net', () => {
2929
let faceLandmarkPositionsRect: Point[]
3030

3131
beforeAll(async () => {
32-
imgEl1 = await loadImage('test/images/face1.png')
33-
imgEl2 = await loadImage('test/images/face2.png')
34-
imgElRect = await loadImage('test/images/face_rectangular.png')
35-
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
36-
faceLandmarkPositions2 = await loadJson<Point[]>('test/data/faceLandmarkPositions2.json')
37-
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
32+
imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
33+
imgEl2 = await getTestEnv().loadImage('test/images/face2.png')
34+
imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
35+
faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
36+
faceLandmarkPositions2 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions2.json')
37+
faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
3838
})
3939

4040
describeWithNets('quantized weights', { withFaceLandmark68Net: { quantized: true } }, ({ faceLandmark68Net }) => {

test/tests/faceLandmarkNet/faceLandmark68Net.uncompressed.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Point } from '../../../src';
22
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
3-
import { loadImage, loadJson } from '../../env';
3+
import { getTestEnv } from '../../env';
44
import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils';
55

66
describeWithBackend('faceLandmark68Net, uncompressed', () => {
@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68Net, uncompressed', () => {
1111
let faceLandmarkPositionsRect: Point[]
1212

1313
beforeAll(async () => {
14-
imgEl1 = await loadImage('test/images/face1.png')
15-
imgElRect = await loadImage('test/images/face_rectangular.png')
16-
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
17-
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
14+
imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
15+
imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
16+
faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
17+
faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
1818
})
1919

2020
describeWithNets('uncompressed weights', { withFaceLandmark68Net: { quantized: false } }, ({ faceLandmark68Net }) => {

test/tests/faceLandmarkNet/faceLandmark68TinyNet.test.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
22

33
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
44
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
5-
import { loadImage, loadJson } from '../../env';
5+
import { getTestEnv } from '../../env';
66
import { describeWithBackend, describeWithNets, expectAllTensorsReleased, expectPointClose } from '../../utils';
77

88
function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
@@ -23,12 +23,12 @@ describeWithBackend('faceLandmark68TinyNet', () => {
2323
let faceLandmarkPositionsRect: Point[]
2424

2525
beforeAll(async () => {
26-
imgEl1 = await loadImage('test/images/face1.png')
27-
imgEl2 = await loadImage('test/images/face2.png')
28-
imgElRect = await loadImage('test/images/face_rectangular.png')
29-
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
30-
faceLandmarkPositions2 = await loadJson<Point[]>('test/data/faceLandmarkPositions2Tiny.json')
31-
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
26+
imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
27+
imgEl2 = await getTestEnv().loadImage('test/images/face2.png')
28+
imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
29+
faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
30+
faceLandmarkPositions2 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions2Tiny.json')
31+
faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
3232
})
3333

3434
describeWithNets('quantized weights', { withFaceLandmark68TinyNet: { quantized: true } }, ({ faceLandmark68TinyNet }) => {

test/tests/faceLandmarkNet/faceLandmark68TinyNet.uncompressed.test.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Point } from '../../../src';
22
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
3-
import { loadImage, loadJson } from '../../env';
4-
import { describeWithNets, expectPointClose, describeWithBackend } from '../../utils';
3+
import { getTestEnv } from '../../env';
4+
import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils';
55

66
describeWithBackend('faceLandmark68TinyNet, uncompressed', () => {
77

@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68TinyNet, uncompressed', () => {
1111
let faceLandmarkPositionsRect: Point[]
1212

1313
beforeAll(async () => {
14-
imgEl1 = await loadImage('test/images/face1.png')
15-
imgElRect = await loadImage('test/images/face_rectangular.png')
16-
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
17-
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
14+
imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
15+
imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
16+
faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
17+
faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
1818
})
1919

2020
describeWithNets('uncompressed weights', { withFaceLandmark68TinyNet: { quantized: false } }, ({ faceLandmark68TinyNet }) => {

test/tests/faceRecognitionNet/faceRecognitionNet.test.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
22

33
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
44
import { euclideanDistance } from '../../../src/euclideanDistance';
5-
import { loadImage, loadJson } from '../../env';
5+
import { getTestEnv } from '../../env';
66
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
77

88
describeWithBackend('faceRecognitionNet', () => {
@@ -15,12 +15,12 @@ describeWithBackend('faceRecognitionNet', () => {
1515
let faceDescriptorRect: number[]
1616

1717
beforeAll(async () => {
18-
imgEl1 = createCanvasFromMedia(await loadImage('test/images/face1.png'))
19-
imgEl2 = createCanvasFromMedia(await loadImage('test/images/face2.png'))
20-
imgElRect = createCanvasFromMedia(await loadImage('test/images/face_rectangular.png'))
21-
faceDescriptor1 = await loadJson<number[]>('test/data/faceDescriptor1.json')
22-
faceDescriptor2 = await loadJson<number[]>('test/data/faceDescriptor2.json')
23-
faceDescriptorRect = await loadJson<number[]>('test/data/faceDescriptorRect.json')
18+
imgEl1 = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face1.png'))
19+
imgEl2 = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face2.png'))
20+
imgElRect = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face_rectangular.png'))
21+
faceDescriptor1 = await getTestEnv().loadJson<number[]>('test/data/faceDescriptor1.json')
22+
faceDescriptor2 = await getTestEnv().loadJson<number[]>('test/data/faceDescriptor2.json')
23+
faceDescriptorRect = await getTestEnv().loadJson<number[]>('test/data/faceDescriptorRect.json')
2424
})
2525

2626
describeWithNets('quantized weights', { withFaceRecognitionNet: { quantized: true } }, ({ faceRecognitionNet }) => {

0 commit comments

Comments
 (0)