diff --git a/package-lock.json b/package-lock.json index ba995c6..300be7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "tfjs-image-node", - "version": "0.0.1", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tfjs-image-node", - "version": "0.0.1", + "version": "1.0.2", "license": "MIT", "dependencies": { "@tensorflow/tfjs": "^4.12.0", "jimp": "^0.22.10" }, "devDependencies": { + "@types/mocha": "^10.0.3", "@types/node": "^20.8.7", "mocha": "^10.2.0", "ts-node": "^10.9.1", @@ -692,6 +693,12 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", "license": "MIT" }, + "node_modules/@types/mocha": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.3.tgz", + "integrity": "sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==", + "dev": true + }, "node_modules/@types/node": { "version": "20.8.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", diff --git a/package.json b/package.json index e7d942e..0504f3b 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ ], "scripts": { "build": "tsup", - "test": "mocha" + "test": "mocha --require ts-node/register 'test/*.test.ts' --timeout 6000" }, "homepage": "https://github.com/kevinanielsen/tfjs-image-node/", "repository": { diff --git a/src/index.ts b/src/index.ts index ca8b1ec..d94d523 100644 --- a/src/index.ts +++ b/src/index.ts @@ -71,4 +71,4 @@ const classifyImage: ClassifyImageType = async ( return result.sort((a, b) => Number(b.probability) - Number(a.probability)); }; -module.exports = classifyImage; +export default classifyImage; diff --git a/test/classifyImage.test.ts b/test/classifyImage.test.ts new file mode 100644 index 0000000..1ed3129 --- /dev/null +++ b/test/classifyImage.test.ts @@ -0,0 +1,30 @@ +import { describe } from "mocha"; +import classifyImage from "../src/index"; +import assert from "assert"; + +const metadata = require("./testMetadata.json"); +const model = "https://teachablemachine.withgoogle.com/models/jAIOHvmge"; +const imageHand = + "https://www.stgeorges.nhs.uk/wp-content/uploads/2014/03/hand-2.jpeg"; +const imageNoHand = + "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Black_colour.jpg/640px-Black_colour.jpg"; + +describe("classifyImage function", async () => { + it("returns hand when shown a picture of a hand", async () => { + const result = await classifyImage(model, imageHand, metadata); + + assert.equal(result[0].label, "Hand"); + }); + + it("returns 'No hand' when shown a picture not including hand", async () => { + const result = await classifyImage(model, imageNoHand, metadata); + + assert.equal(result[0].label, "No hand"); + }); + + it("returns a probability level", async () => { + const result = await classifyImage(model, imageNoHand, metadata); + + assert.notEqual(result[0].probability, null); + }); +}); diff --git a/test/testMetadata.json b/test/testMetadata.json new file mode 100644 index 0000000..e9a6292 --- /dev/null +++ b/test/testMetadata.json @@ -0,0 +1 @@ +{"tfjsVersion":"1.3.1","tmVersion":"2.4.7","packageVersion":"0.8.4-alpha2","packageName":"@teachablemachine/image","timeStamp":"2023-10-21T07:45:22.875Z","userMetadata":{},"modelName":"tm-my-image-model","labels":["Hand","No hand"],"imageSize":224} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 41a0e18..8df8c17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -429,6 +429,11 @@ resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== +"@types/mocha@^10.0.3": + version "10.0.3" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.3.tgz" + integrity sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ== + "@types/node-fetch@^2.1.2": version "2.6.7" resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.7.tgz"