Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
face
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Кубота
face
Commits
9cd6d13f
Commit
9cd6d13f
authored
Jun 21, 2018
by
vincent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
unit tests for quanzized face detection and face landmark net
parent
61b702a6
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
151 additions
and
59 deletions
+151
-59
FaceDetectionNet.d.ts
dist/faceDetectionNet/FaceDetectionNet.d.ts
+1
-1
FaceDetectionNet.js.map
dist/faceDetectionNet/FaceDetectionNet.js.map
+2
-2
FaceLandmarkNet.js.map
dist/faceLandmarkNet/FaceLandmarkNet.js.map
+2
-2
FaceDetectionNet.ts
src/faceDetectionNet/FaceDetectionNet.ts
+1
-1
faceDetectionNet.test.ts
test/e2e/faceDetectionNet.test.ts
+90
-37
faceLandmarkNet.test.ts
test/e2e/faceLandmarkNet.test.ts
+50
-14
utils.ts
test/utils.ts
+5
-2
No files found.
dist/faceDetectionNet/FaceDetectionNet.d.ts
View file @
9cd6d13f
...
...
@@ -4,7 +4,7 @@ import { TNetInput } from '../types';
import
{
FaceDetection
}
from
'./FaceDetection'
;
export
declare
class
FaceDetectionNet
{
private
_params
;
load
(
weightsOrUrl
:
Float32Array
|
string
|
undefined
):
Promise
<
void
>
;
load
(
weightsOrUrl
?:
Float32Array
|
string
):
Promise
<
void
>
;
extractWeights
(
weights
:
Float32Array
):
void
;
private
forwardTensor
(
imgTensor
);
forward
(
input
:
tf
.
Tensor
|
NetInput
|
TNetInput
):
{
...
...
dist/faceDetectionNet/FaceDetectionNet.js.map
View file @
9cd6d13f
{"version":3,"file":"FaceDetectionNet.js","sourceRoot":"","sources":["../../src/faceDetectionNet/FaceDetectionNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"FaceDetectionNet.js","sourceRoot":"","sources":["../../src/faceDetectionNet/FaceDetectionNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
dist/faceLandmarkNet/FaceLandmarkNet.js.map
View file @
9cd6d13f
{"version":3,"file":"FaceLandmarkNet.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/FaceLandmarkNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"FaceLandmarkNet.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/FaceLandmarkNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
src/faceDetectionNet/FaceDetectionNet.ts
View file @
9cd6d13f
...
...
@@ -19,7 +19,7 @@ export class FaceDetectionNet {
private
_params
:
NetParams
public
async
load
(
weightsOrUrl
:
Float32Array
|
string
|
undefined
):
Promise
<
void
>
{
public
async
load
(
weightsOrUrl
?:
Float32Array
|
string
):
Promise
<
void
>
{
if
(
weightsOrUrl
instanceof
Float32Array
)
{
this
.
extractWeights
(
weightsOrUrl
)
return
...
...
test/e2e/faceDetectionNet.test.ts
View file @
9cd6d13f
import
*
as
faceapi
from
'../../src'
;
import
{
FaceDetection
}
from
'../../src/faceDetectionNet/FaceDetection'
;
import
{
IRect
}
from
'../../src/Rect'
;
import
{
expectMaxDelta
}
from
'../utils'
;
function
expectFaceDetectionEquals
(
result
:
FaceDetection
,
score
:
number
,
expectedBox
:
IRect
)
{
const
{
x
,
y
,
width
,
height
}
=
result
.
getBox
()
expect
(
result
.
getScore
()).
toBeCloseTo
(
score
,
2
)
expect
(
Math
.
floor
(
x
)).
toEqual
(
expectedBox
.
x
)
expect
(
Math
.
floor
(
y
)).
toEqual
(
expectedBox
.
y
)
expect
(
Math
.
floor
(
width
)).
toEqual
(
expectedBox
.
width
)
expect
(
Math
.
floor
(
height
)).
toEqual
(
expectedBox
.
height
)
function
expectRectClose
(
result
:
IRect
,
expectedBox
:
IRect
,
maxDelta
:
number
)
{
const
{
x
,
y
,
width
,
height
}
=
result
expectMaxDelta
(
x
,
expectedBox
.
x
,
maxDelta
)
expectMaxDelta
(
y
,
expectedBox
.
y
,
maxDelta
)
expectMaxDelta
(
width
,
expectedBox
.
width
,
maxDelta
)
expectMaxDelta
(
height
,
expectedBox
.
height
,
maxDelta
)
}
const
expectedBoxes
=
[
{
x
:
48
,
y
:
253
,
width
:
104
,
height
:
129
},
{
x
:
260
,
y
:
227
,
width
:
76
,
height
:
117
},
{
x
:
466
,
y
:
165
,
width
:
88
,
height
:
130
},
{
x
:
234
,
y
:
36
,
width
:
84
,
height
:
119
},
{
x
:
577
,
y
:
65
,
width
:
84
,
height
:
105
},
{
x
:
84
,
y
:
14
,
width
:
79
,
height
:
132
}
]
describe
(
'faceDetectionNet'
,
()
=>
{
let
faceDetectionNet
:
faceapi
.
FaceDetectionNet
,
imgEl
:
HTMLImageElement
let
imgEl
:
HTMLImageElement
beforeAll
(
async
()
=>
{
const
res
=
await
fetch
(
'base/weights/uncompressed/face_detection_model.weights'
)
const
weights
=
new
Float32Array
(
await
res
.
arrayBuffer
())
faceDetectionNet
=
faceapi
.
faceDetectionNet
(
weights
)
const
img
=
await
(
await
fetch
(
'base/test/images/faces.jpg'
)).
blob
()
imgEl
=
await
faceapi
.
bufferToImage
(
img
)
})
it
(
'scores > 0.8'
,
async
()
=>
{
const
{
width
,
height
}
=
imgEl
describe
(
'uncompressed weights'
,
()
=>
{
let
faceDetectionNet
:
faceapi
.
FaceDetectionNet
const
expectedScores
=
[
0.98
,
0.89
,
0.82
,
0.75
,
0.58
,
0.55
]
const
maxBoxDelta
=
1
beforeAll
(
async
()
=>
{
const
res
=
await
fetch
(
'base/weights/uncompressed/face_detection_model.weights'
)
const
weights
=
new
Float32Array
(
await
res
.
arrayBuffer
())
faceDetectionNet
=
faceapi
.
faceDetectionNet
(
weights
)
})
const
result
=
await
faceDetectionNet
.
locateFaces
(
imgEl
)
as
FaceDetection
[]
expect
(
result
.
length
).
toEqual
(
3
)
it
(
'scores > 0.8'
,
async
()
=>
{
const
detections
=
await
faceDetectionNet
.
locateFaces
(
imgEl
)
as
FaceDetection
[]
result
.
forEach
(
res
=>
{
expect
(
res
.
getImageWidth
()).
toEqual
(
width
)
expect
(
res
.
getImageHeight
()).
toEqual
(
height
)
expect
(
detections
.
length
).
toEqual
(
3
)
detections
.
forEach
((
det
,
i
)
=>
{
expect
(
det
.
getImageWidth
()).
toEqual
(
imgEl
.
width
)
expect
(
det
.
getImageHeight
()).
toEqual
(
imgEl
.
height
)
expect
(
det
.
getScore
()).
toBeCloseTo
(
expectedScores
[
i
],
2
)
expectRectClose
(
det
.
getBox
(),
expectedBoxes
[
i
],
maxBoxDelta
)
})
})
const
[
d0
,
d1
,
d2
]
=
result
expectFaceDetectionEquals
(
d0
,
0.98
,
{
x
:
48
,
y
:
253
,
width
:
104
,
height
:
129
})
expectFaceDetectionEquals
(
d1
,
0.89
,
{
x
:
260
,
y
:
227
,
width
:
76
,
height
:
117
})
expectFaceDetectionEquals
(
d2
,
0.82
,
{
x
:
466
,
y
:
165
,
width
:
88
,
height
:
130
})
it
(
'scores > 0.5'
,
async
()
=>
{
const
detections
=
await
faceDetectionNet
.
locateFaces
(
imgEl
,
0.5
)
as
FaceDetection
[]
expect
(
detections
.
length
).
toEqual
(
6
)
detections
.
forEach
((
det
,
i
)
=>
{
expect
(
det
.
getImageWidth
()).
toEqual
(
imgEl
.
width
)
expect
(
det
.
getImageHeight
()).
toEqual
(
imgEl
.
height
)
expect
(
det
.
getScore
()).
toBeCloseTo
(
expectedScores
[
i
],
2
)
expectRectClose
(
det
.
getBox
(),
expectedBoxes
[
i
],
maxBoxDelta
)
})
})
})
it
(
'scores > 0.5'
,
async
()
=>
{
const
{
width
,
height
}
=
imgEl
describe
(
'quantized weights'
,
()
=>
{
const
result
=
await
faceDetectionNet
.
locateFaces
(
imgEl
,
0.5
)
as
FaceDetection
[]
expect
(
result
.
length
).
toEqual
(
6
)
let
faceDetectionNet
:
faceapi
.
FaceDetectionNet
result
.
forEach
(
res
=>
{
expect
(
res
.
getImageWidth
()).
toEqual
(
width
)
expect
(
res
.
getImageHeight
()).
toEqual
(
height
)
const
expectedScores
=
[
0.97
,
0.88
,
0.83
,
0.82
,
0.59
,
0.52
]
const
maxBoxDelta
=
5
beforeAll
(
async
()
=>
{
faceDetectionNet
=
new
faceapi
.
FaceDetectionNet
()
await
faceDetectionNet
.
load
(
'base/weights'
)
})
const
[
d0
,
d1
,
d2
,
d3
,
d4
,
d5
]
=
result
expectFaceDetectionEquals
(
d0
,
0.98
,
{
x
:
48
,
y
:
253
,
width
:
104
,
height
:
129
})
expectFaceDetectionEquals
(
d1
,
0.89
,
{
x
:
260
,
y
:
227
,
width
:
76
,
height
:
117
})
expectFaceDetectionEquals
(
d2
,
0.82
,
{
x
:
466
,
y
:
165
,
width
:
88
,
height
:
130
})
expectFaceDetectionEquals
(
d3
,
0.75
,
{
x
:
234
,
y
:
36
,
width
:
84
,
height
:
119
})
expectFaceDetectionEquals
(
d4
,
0.58
,
{
x
:
577
,
y
:
65
,
width
:
84
,
height
:
105
})
expectFaceDetectionEquals
(
d5
,
0.55
,
{
x
:
84
,
y
:
14
,
width
:
79
,
height
:
132
})
it
(
'scores > 0.8'
,
async
()
=>
{
const
detections
=
await
faceDetectionNet
.
locateFaces
(
imgEl
)
as
FaceDetection
[]
expect
(
detections
.
length
).
toEqual
(
4
)
detections
.
forEach
((
det
,
i
)
=>
{
expect
(
det
.
getImageWidth
()).
toEqual
(
imgEl
.
width
)
expect
(
det
.
getImageHeight
()).
toEqual
(
imgEl
.
height
)
expect
(
det
.
getScore
()).
toBeCloseTo
(
expectedScores
[
i
],
2
)
expectRectClose
(
det
.
getBox
(),
expectedBoxes
[
i
],
maxBoxDelta
)
})
})
it
(
'scores > 0.5'
,
async
()
=>
{
const
detections
=
await
faceDetectionNet
.
locateFaces
(
imgEl
,
0.5
)
as
FaceDetection
[]
expect
(
detections
.
length
).
toEqual
(
6
)
detections
.
forEach
((
det
,
i
)
=>
{
expect
(
det
.
getImageWidth
()).
toEqual
(
imgEl
.
width
)
expect
(
det
.
getImageHeight
()).
toEqual
(
imgEl
.
height
)
expect
(
det
.
getScore
()).
toBeCloseTo
(
expectedScores
[
i
],
2
)
expectRectClose
(
det
.
getBox
(),
expectedBoxes
[
i
],
maxBoxDelta
)
})
})
})
})
\ No newline at end of file
test/e2e/faceLandmarkNet.test.ts
View file @
9cd6d13f
import
*
as
faceapi
from
'../../src'
;
import
{
FaceLandmarks
}
from
'../../src/faceLandmarkNet/FaceLandmarks'
;
import
{
Point
}
from
'../../src/Point'
;
import
{
expectMaxDelta
}
from
'../utils'
;
describe
(
'faceLandmarkNet'
,
()
=>
{
let
faceLandmarkNet
:
faceapi
.
FaceLandmarkNet
,
imgEl
:
HTMLImageElement
,
faceLandmarkPositions
:
Point
[]
let
imgEl
:
HTMLImageElement
beforeAll
(
async
()
=>
{
const
res
=
await
fetch
(
'base/weights/uncompressed/face_landmark_68_model.weights'
)
const
weights
=
new
Float32Array
(
await
res
.
arrayBuffer
())
faceLandmarkNet
=
faceapi
.
faceLandmarkNet
(
weights
)
const
img
=
await
(
await
fetch
(
'base/test/images/face.png'
)).
blob
()
imgEl
=
await
faceapi
.
bufferToImage
(
img
)
faceLandmarkPositions
=
await
(
await
fetch
(
'base/test/data/faceLandmarkPositions.json'
)).
json
()
})
it
(
'computes face descriptor'
,
async
()
=>
{
const
{
width
,
height
}
=
imgEl
describe
(
'uncompressed weights'
,
()
=>
{
let
faceLandmarkNet
:
faceapi
.
FaceLandmarkNet
,
faceLandmarkPositions
:
Point
[]
beforeAll
(
async
()
=>
{
const
res
=
await
fetch
(
'base/weights/uncompressed/face_landmark_68_model.weights'
)
const
weights
=
new
Float32Array
(
await
res
.
arrayBuffer
())
faceLandmarkNet
=
faceapi
.
faceLandmarkNet
(
weights
)
faceLandmarkPositions
=
await
(
await
fetch
(
'base/test/data/faceLandmarkPositions.json'
)).
json
()
})
it
(
'computes face landmarks'
,
async
()
=>
{
const
{
width
,
height
}
=
imgEl
const
result
=
await
faceLandmarkNet
.
detectLandmarks
(
imgEl
)
as
FaceLandmarks
expect
(
result
.
getImageWidth
()).
toEqual
(
width
)
expect
(
result
.
getImageHeight
()).
toEqual
(
height
)
expect
(
result
.
getShift
().
x
).
toEqual
(
0
)
expect
(
result
.
getShift
().
y
).
toEqual
(
0
)
expect
(
result
.
getPositions
().
map
(({
x
,
y
})
=>
({
x
,
y
}))).
toEqual
(
faceLandmarkPositions
)
})
const
result
=
await
faceLandmarkNet
.
detectLandmarks
(
imgEl
)
as
FaceLandmarks
expect
(
result
.
getImageWidth
()).
toEqual
(
width
)
expect
(
result
.
getImageHeight
()).
toEqual
(
height
)
expect
(
result
.
getShift
().
x
).
toEqual
(
0
)
expect
(
result
.
getShift
().
y
).
toEqual
(
0
)
expect
(
result
.
getPositions
().
map
(({
x
,
y
})
=>
({
x
,
y
}))).
toEqual
(
faceLandmarkPositions
)
})
describe
(
'quantized weights'
,
()
=>
{
let
faceLandmarkNet
:
faceapi
.
FaceLandmarkNet
,
faceLandmarkPositions
:
Point
[]
beforeAll
(
async
()
=>
{
faceLandmarkNet
=
new
faceapi
.
FaceLandmarkNet
()
await
faceLandmarkNet
.
load
(
'base/weights'
)
faceLandmarkPositions
=
await
(
await
fetch
(
'base/test/data/faceLandmarkPositions.json'
)).
json
()
})
it
(
'computes face landmarks'
,
async
()
=>
{
const
{
width
,
height
}
=
imgEl
const
result
=
await
faceLandmarkNet
.
detectLandmarks
(
imgEl
)
as
FaceLandmarks
expect
(
result
.
getImageWidth
()).
toEqual
(
width
)
expect
(
result
.
getImageHeight
()).
toEqual
(
height
)
expect
(
result
.
getShift
().
x
).
toEqual
(
0
)
expect
(
result
.
getShift
().
y
).
toEqual
(
0
)
result
.
getPositions
().
forEach
(({
x
,
y
},
i
)
=>
{
expectMaxDelta
(
x
,
faceLandmarkPositions
[
i
].
x
,
2
)
expectMaxDelta
(
y
,
faceLandmarkPositions
[
i
].
y
,
2
)
})
})
})
})
test/utils.ts
View file @
9cd6d13f
...
...
@@ -4,4 +4,8 @@ export function zeros(length: number): Float32Array {
export
function
ones
(
length
:
number
):
Float32Array
{
return
new
Float32Array
(
length
).
fill
(
1
)
}
\ No newline at end of file
}
export
function
expectMaxDelta
(
val1
:
number
,
val2
:
number
,
maxDelta
:
number
)
{
expect
(
Math
.
abs
(
val1
-
val2
)).
toBeLessThan
(
maxDelta
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment