1
1
import * as tf from '@tensorflow/tfjs-core' ;
2
2
3
- import { fetchImage , fetchJson , IDimensions , isTensor3D , NetInput , Point , TMediaElement , toNetInput } from '../../../src' ;
3
+ import { createCanvasFromMedia , IDimensions , isTensor3D , NetInput , Point , TMediaElement , toNetInput } from '../../../src' ;
4
4
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68' ;
5
- import { createFaceLandmarkNet } from '../../../src/faceLandmarkNet' ;
6
5
import { FaceLandmark68Net } from '../../../src/faceLandmarkNet/FaceLandmark68Net' ;
6
+ import { loadImage , loadJson } from '../../env' ;
7
7
import { describeWithNets , expectAllTensorsReleased , expectMaxDelta , expectPointClose } from '../../utils' ;
8
8
9
9
function getInputDims ( input : tf . Tensor | TMediaElement ) : IDimensions {
@@ -24,12 +24,12 @@ describe('faceLandmark68Net', () => {
24
24
let faceLandmarkPositionsRect : Point [ ]
25
25
26
26
beforeAll ( async ( ) => {
27
- imgEl1 = await fetchImage ( 'base/ test/images/face1.png')
28
- imgEl2 = await fetchImage ( 'base/ test/images/face2.png')
29
- imgElRect = await fetchImage ( 'base/ test/images/face_rectangular.png')
30
- faceLandmarkPositions1 = await fetchJson < Point [ ] > ( 'base/ test/data/faceLandmarkPositions1.json' )
31
- faceLandmarkPositions2 = await fetchJson < Point [ ] > ( 'base/ test/data/faceLandmarkPositions2.json' )
32
- faceLandmarkPositionsRect = await fetchJson < Point [ ] > ( 'base/ test/data/faceLandmarkPositionsRect.json' )
27
+ imgEl1 = await loadImage ( ' test/images/face1.png')
28
+ imgEl2 = await loadImage ( ' test/images/face2.png')
29
+ imgElRect = await loadImage ( ' test/images/face_rectangular.png')
30
+ faceLandmarkPositions1 = await loadJson < Point [ ] > ( 'test/data/faceLandmarkPositions1.json' )
31
+ faceLandmarkPositions2 = await loadJson < Point [ ] > ( 'test/data/faceLandmarkPositions2.json' )
32
+ faceLandmarkPositionsRect = await loadJson < Point [ ] > ( 'test/data/faceLandmarkPositionsRect.json' )
33
33
} )
34
34
35
35
describeWithNets ( 'quantized weights' , { withFaceLandmark68Net : { quantized : true } } , ( { faceLandmark68Net } ) => {
@@ -85,14 +85,14 @@ describe('faceLandmark68Net', () => {
85
85
expect ( result . shift . x ) . toEqual ( 0 )
86
86
expect ( result . shift . y ) . toEqual ( 0 )
87
87
result . positions . forEach ( ( { x, y } , i ) => {
88
- expectMaxDelta ( x , faceLandmarkPositions [ batchIdx ] [ i ] . x , 2 )
89
- expectMaxDelta ( y , faceLandmarkPositions [ batchIdx ] [ i ] . y , 2 )
88
+ expectMaxDelta ( x , faceLandmarkPositions [ batchIdx ] [ i ] . x , 5 )
89
+ expectMaxDelta ( y , faceLandmarkPositions [ batchIdx ] [ i ] . y , 5 )
90
90
} )
91
91
} )
92
92
} )
93
93
94
94
it ( 'computes face landmarks for batch of tf.Tensor3D' , async ( ) => {
95
- const inputs = [ imgEl1 , imgEl2 , imgElRect ] . map ( el => tf . fromPixels ( el ) )
95
+ const inputs = [ imgEl1 , imgEl2 , imgElRect ] . map ( el => tf . fromPixels ( createCanvasFromMedia ( el ) ) )
96
96
97
97
const faceLandmarkPositions = [
98
98
faceLandmarkPositions1 ,
@@ -117,7 +117,7 @@ describe('faceLandmark68Net', () => {
117
117
} )
118
118
119
119
it ( 'computes face landmarks for batch of mixed inputs' , async ( ) => {
120
- const inputs = [ imgEl1 , tf . fromPixels ( imgEl2 ) , tf . fromPixels ( imgElRect ) ]
120
+ const inputs = [ imgEl1 , tf . fromPixels ( createCanvasFromMedia ( imgEl2 ) ) , tf . fromPixels ( createCanvasFromMedia ( imgElRect ) ) ]
121
121
122
122
const faceLandmarkPositions = [
123
123
faceLandmarkPositions1 ,
@@ -145,18 +145,6 @@ describe('faceLandmark68Net', () => {
145
145
146
146
describeWithNets ( 'no memory leaks' , { withFaceLandmark68Net : { quantized : true } } , ( { faceLandmark68Net } ) => {
147
147
148
- describe ( 'NeuralNetwork, quantized model' , ( ) => {
149
-
150
- it ( 'disposes all param tensors' , async ( ) => {
151
- await expectAllTensorsReleased ( async ( ) => {
152
- const net = new FaceLandmark68Net ( )
153
- await net . load ( 'base/weights' )
154
- net . dispose ( )
155
- } )
156
- } )
157
-
158
- } )
159
-
160
148
describe ( 'forwardInput' , ( ) => {
161
149
162
150
it ( 'single image element' , async ( ) => {
@@ -176,7 +164,7 @@ describe('faceLandmark68Net', () => {
176
164
} )
177
165
178
166
it ( 'single tf.Tensor3D' , async ( ) => {
179
- const tensor = tf . fromPixels ( imgEl1 )
167
+ const tensor = tf . fromPixels ( createCanvasFromMedia ( imgEl1 ) )
180
168
181
169
await expectAllTensorsReleased ( async ( ) => {
182
170
const netInput = new NetInput ( [ tensor ] )
@@ -188,7 +176,7 @@ describe('faceLandmark68Net', () => {
188
176
} )
189
177
190
178
it ( 'multiple tf.Tensor3Ds' , async ( ) => {
191
- const tensors = [ imgEl1 , imgEl1 , imgEl1 ] . map ( el => tf . fromPixels ( el ) )
179
+ const tensors = [ imgEl1 , imgEl1 , imgEl1 ] . map ( el => tf . fromPixels ( createCanvasFromMedia ( el ) ) )
192
180
193
181
await expectAllTensorsReleased ( async ( ) => {
194
182
const netInput = new NetInput ( tensors )
@@ -200,7 +188,7 @@ describe('faceLandmark68Net', () => {
200
188
} )
201
189
202
190
it ( 'single batch size 1 tf.Tensor4Ds' , async ( ) => {
203
- const tensor = tf . tidy ( ( ) => tf . fromPixels ( imgEl1 ) . expandDims ( ) ) as tf . Tensor4D
191
+ const tensor = tf . tidy ( ( ) => tf . fromPixels ( createCanvasFromMedia ( imgEl1 ) ) . expandDims ( ) ) as tf . Tensor4D
204
192
205
193
await expectAllTensorsReleased ( async ( ) => {
206
194
const outTensor = await faceLandmark68Net . forwardInput ( await toNetInput ( tensor ) )
@@ -212,7 +200,7 @@ describe('faceLandmark68Net', () => {
212
200
213
201
it ( 'multiple batch size 1 tf.Tensor4Ds' , async ( ) => {
214
202
const tensors = [ imgEl1 , imgEl1 , imgEl1 ]
215
- . map ( el => tf . tidy ( ( ) => tf . fromPixels ( el ) . expandDims ( ) ) ) as tf . Tensor4D [ ]
203
+ . map ( el => tf . tidy ( ( ) => tf . fromPixels ( createCanvasFromMedia ( el ) ) . expandDims ( ) ) ) as tf . Tensor4D [ ]
216
204
217
205
await expectAllTensorsReleased ( async ( ) => {
218
206
const outTensor = await faceLandmark68Net . forwardInput ( await toNetInput ( tensors ) )
@@ -239,7 +227,7 @@ describe('faceLandmark68Net', () => {
239
227
} )
240
228
241
229
it ( 'single tf.Tensor3D' , async ( ) => {
242
- const tensor = tf . fromPixels ( imgEl1 )
230
+ const tensor = tf . fromPixels ( createCanvasFromMedia ( imgEl1 ) )
243
231
244
232
await expectAllTensorsReleased ( async ( ) => {
245
233
await faceLandmark68Net . detectLandmarks ( tensor )
@@ -249,7 +237,7 @@ describe('faceLandmark68Net', () => {
249
237
} )
250
238
251
239
it ( 'multiple tf.Tensor3Ds' , async ( ) => {
252
- const tensors = [ imgEl1 , imgEl1 , imgEl1 ] . map ( el => tf . fromPixels ( el ) )
240
+ const tensors = [ imgEl1 , imgEl1 , imgEl1 ] . map ( el => tf . fromPixels ( createCanvasFromMedia ( el ) ) )
253
241
254
242
255
243
await expectAllTensorsReleased ( async ( ) => {
@@ -260,7 +248,7 @@ describe('faceLandmark68Net', () => {
260
248
} )
261
249
262
250
it ( 'single batch size 1 tf.Tensor4Ds' , async ( ) => {
263
- const tensor = tf . tidy ( ( ) => tf . fromPixels ( imgEl1 ) . expandDims ( ) ) as tf . Tensor4D
251
+ const tensor = tf . tidy ( ( ) => tf . fromPixels ( createCanvasFromMedia ( imgEl1 ) ) . expandDims ( ) ) as tf . Tensor4D
264
252
265
253
await expectAllTensorsReleased ( async ( ) => {
266
254
await faceLandmark68Net . detectLandmarks ( tensor )
@@ -271,7 +259,7 @@ describe('faceLandmark68Net', () => {
271
259
272
260
it ( 'multiple batch size 1 tf.Tensor4Ds' , async ( ) => {
273
261
const tensors = [ imgEl1 , imgEl1 , imgEl1 ]
274
- . map ( el => tf . tidy ( ( ) => tf . fromPixels ( el ) . expandDims ( ) ) ) as tf . Tensor4D [ ]
262
+ . map ( el => tf . tidy ( ( ) => tf . fromPixels ( createCanvasFromMedia ( el ) ) . expandDims ( ) ) ) as tf . Tensor4D [ ]
275
263
276
264
await expectAllTensorsReleased ( async ( ) => {
277
265
await faceLandmark68Net . detectLandmarks ( tensors )
0 commit comments