Unverified Commit 604bf38f authored by Vincent Mühler's avatar Vincent Mühler Committed by GitHub

Merge pull request #258 from justadudewhohacks/webgl-test-fixes

minor webgl precision fixes + dispose webgl backends in between test …
parents b3011959 3f40b44f
import { createCanvasFromMedia, extractFaceTensors, Rect, tf } from '../../../src';
import { loadImage } from '../../env';
import { describeWithBackend } from '../../utils';
describe('extractFaceTensors', () => {
describeWithBackend('extractFaceTensors', () => {
let imgTensor: tf.Tensor3D
......
......@@ -3,9 +3,9 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
import { FaceExpressionPrediction } from '../../../src/faceExpressionNet/types';
import { loadImage } from '../../env';
import { describeWithNets, expectAllTensorsReleased } from '../../utils';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
describe('faceExpressionNet', () => {
describeWithBackend('faceExpressionNet', () => {
let imgElAngry: HTMLImageElement
let imgElSurprised: HTMLImageElement
......
......@@ -2,9 +2,14 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { FaceLandmark68Net } from '../../../src/faceLandmarkNet/FaceLandmark68Net';
import { loadImage, loadJson } from '../../env';
import { describeWithNets, expectAllTensorsReleased, expectMaxDelta, expectPointClose } from '../../utils';
import {
describeWithBackend,
describeWithNets,
expectAllTensorsReleased,
expectMaxDelta,
expectPointClose,
} from '../../utils';
function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
if (input instanceof tf.Tensor) {
......@@ -14,7 +19,7 @@ function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
return input
}
describe('faceLandmark68Net', () => {
describeWithBackend('faceLandmark68Net', () => {
let imgEl1: HTMLImageElement
let imgEl2: HTMLImageElement
......@@ -44,7 +49,7 @@ describe('faceLandmark68Net', () => {
expect(result.shift.y).toEqual(0)
result.positions.forEach((pt, i) => {
const { x, y } = faceLandmarkPositions1[i]
expectPointClose(pt, { x, y }, 2)
expectPointClose(pt, { x, y }, 3)
})
})
......
import { Point } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env';
import { describeWithNets, expectPointClose } from '../../utils';
import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils';
describe('faceLandmark68Net, uncompressed', () => {
describeWithBackend('faceLandmark68Net, uncompressed', () => {
let imgEl1: HTMLImageElement
let imgElRect: HTMLImageElement
......
......@@ -3,7 +3,7 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env';
import { describeWithNets, expectAllTensorsReleased, expectPointClose } from '../../utils';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased, expectPointClose } from '../../utils';
function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
if (input instanceof tf.Tensor) {
......@@ -13,7 +13,7 @@ function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
return input
}
describe('faceLandmark68TinyNet', () => {
describeWithBackend('faceLandmark68TinyNet', () => {
let imgEl1: HTMLImageElement
let imgEl2: HTMLImageElement
......
import { Point } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env';
import { describeWithNets, expectPointClose } from '../../utils';
import { describeWithNets, expectPointClose, describeWithBackend } from '../../utils';
describe('faceLandmark68TinyNet, uncompressed', () => {
describeWithBackend('faceLandmark68TinyNet, uncompressed', () => {
let imgEl1: HTMLImageElement
let imgElRect: HTMLImageElement
......
......@@ -3,9 +3,9 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
import { euclideanDistance } from '../../../src/euclideanDistance';
import { loadImage, loadJson } from '../../env';
import { describeWithNets, expectAllTensorsReleased } from '../../utils';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
describe('faceRecognitionNet', () => {
describeWithBackend('faceRecognitionNet', () => {
let imgEl1: HTMLCanvasElement
let imgEl2: HTMLCanvasElement
......
import { createCanvasFromMedia } from '../../../src';
import { euclideanDistance } from '../../../src/euclideanDistance';
import { loadImage, loadJson } from '../../env';
import { describeWithNets } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
describe('faceRecognitionNet, uncompressed', () => {
describeWithBackend('faceRecognitionNet, uncompressed', () => {
let imgEl1: HTMLCanvasElement
let imgElRect: HTMLCanvasElement
......
import { IPoint } from '../../../src';
import { loadImage, loadJson } from '../../env';
import { describeWithNets } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
import { expectMtcnnResults } from './expectMtcnnResults';
describe('mtcnn.forward', () => {
describeWithBackend('mtcnn.forward', () => {
let imgEl: HTMLImageElement
let expectedMtcnnLandmarks: IPoint[][]
......
import { IPoint } from '../../../src';
import { loadImage, loadJson } from '../../env';
import { describeWithNets } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
import { expectMtcnnResults } from './expectMtcnnResults';
describe('mtcnn.forward', () => {
describeWithBackend('mtcnn.forward', () => {
let imgEl: HTMLImageElement
let expectedMtcnnLandmarks: IPoint[][]
......
......@@ -6,13 +6,14 @@ import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWit
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import {
assembleExpectedFullFaceDescriptions,
describeWithBackend,
describeWithNets,
expectAllTensorsReleased,
ExpectedFullFaceDescription,
} from '../../utils';
import { expectedMtcnnBoxes } from './expectMtcnnResults';
describe('mtcnn', () => {
describeWithBackend('mtcnn', () => {
let imgEl: HTMLImageElement
let expectedFullFaceDescriptions: ExpectedFullFaceDescription[]
......@@ -91,7 +92,7 @@ describe('mtcnn', () => {
maxLandmarksDelta: 6,
maxDescriptorDelta: 0.2
}
expect(!!result).toBeTruthy()
expectFullFaceDescriptions(
result ? [result] : [],
......
import * as faceapi from '../../../src';
import { loadImage } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithNets, expectAllTensorsReleased } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedSsdBoxes } from './expectedBoxes';
describe('ssdMobilenetv1.locateFaces', () => {
describeWithBackend('ssdMobilenetv1.locateFaces', () => {
let imgEl: HTMLImageElement
......
import * as faceapi from '../../../src';
import { loadImage } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithNets, expectAllTensorsReleased } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedSsdBoxes } from './expectedBoxes';
describe('ssdMobilenetv1.locateFaces, uncompressed', () => {
describeWithBackend('ssdMobilenetv1.locateFaces, uncompressed', () => {
let imgEl: HTMLImageElement
......
import * as faceapi from '../../../src';
import { describeWithNets, expectAllTensorsReleased, assembleExpectedFullFaceDescriptions, ExpectedFullFaceDescription } from '../../utils';
import { fetchImage, SsdMobilenetv1Options } from '../../../src';
import { describeWithNets, expectAllTensorsReleased, assembleExpectedFullFaceDescriptions, ExpectedFullFaceDescription, describeWithBackend } from '../../utils';
import { SsdMobilenetv1Options } from '../../../src';
import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectedSsdBoxes } from './expectedBoxes';
import { loadImage } from '../../env';
describe('ssdMobilenetv1', () => {
describeWithBackend('ssdMobilenetv1', () => {
let imgEl: HTMLImageElement
let expectedFullFaceDescriptions: ExpectedFullFaceDescription[]
......@@ -45,7 +45,7 @@ describe('ssdMobilenetv1', () => {
const deltas = {
maxScoreDelta: 0.05,
maxBoxDelta: 5,
maxLandmarksDelta: 2
maxLandmarksDelta: 3
}
expect(results.length).toEqual(6)
expectFaceDetectionsWithLandmarks(results, expectedFullFaceDescriptions, expectedScores, deltas)
......@@ -64,7 +64,7 @@ describe('ssdMobilenetv1', () => {
const deltas = {
maxScoreDelta: 0.05,
maxBoxDelta: 5,
maxLandmarksDelta: 2,
maxLandmarksDelta: 3,
maxDescriptorDelta: 0.2
}
expect(results.length).toEqual(6)
......@@ -84,7 +84,7 @@ describe('ssdMobilenetv1', () => {
const deltas = {
maxScoreDelta: 0.05,
maxBoxDelta: 5,
maxLandmarksDelta: 2,
maxLandmarksDelta: 3,
maxDescriptorDelta: 0.2
}
......
import * as faceapi from '../../../src';
import { loadImage } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithNets, expectAllTensorsReleased } from '../../utils';
import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedTinyFaceDetectorBoxes } from './expectedBoxes';
describe('tinyFaceDetector.locateFaces', () => {
describeWithBackend('tinyFaceDetector.locateFaces', () => {
let imgEl: HTMLImageElement
......
import * as faceapi from '../../../src';
import { describeWithNets, expectAllTensorsReleased, assembleExpectedFullFaceDescriptions, ExpectedFullFaceDescription } from '../../utils';
import { describeWithNets, expectAllTensorsReleased, assembleExpectedFullFaceDescriptions, ExpectedFullFaceDescription, describeWithBackend } from '../../utils';
import { TinyFaceDetectorOptions } from '../../../src';
import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
......@@ -24,7 +24,7 @@ function expectFaceExpressions(results: WithFaceExpressions<{}>[]) {
})
}
describe('tinyFaceDetector', () => {
describeWithBackend('tinyFaceDetector', () => {
let imgEl: HTMLImageElement
let expectedFullFaceDescriptions: ExpectedFullFaceDescription[]
......
......@@ -132,6 +132,35 @@ export type DescribeWithNetsOptions = {
withTinyYolov2?: WithTinyYolov2Options
}
const gpgpu = tf.ENV.backend['gpgpu']
export function describeWithBackend(description: string, specDefinitions: () => void) {
if (!(gpgpu instanceof tf.webgl.GPGPUContext)) {
describe(description, specDefinitions)
return
}
const defaultBackendName = tf.getBackend()
const newBackendName = 'testBackend'
const backend = new tf.webgl.MathBackendWebGL(gpgpu)
describe(description, () => {
beforeAll(() => {
tf.ENV.registerBackend(newBackendName, () => backend)
tf.setBackend(newBackendName)
})
afterAll(() => {
tf.setBackend(defaultBackendName)
tf.ENV.removeBackend(newBackendName)
backend.dispose()
})
specDefinitions()
})
}
export function describeWithNets(
description: string,
options: DescribeWithNetsOptions,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment