{"id":20392001,"url":"https://github.com/inevitable-team/image-classification-benchmarker","last_synced_at":"2025-07-31T15:36:41.790Z","repository":{"id":38289508,"uuid":"214217070","full_name":"inevitable-team/image-classification-benchmarker","owner":"inevitable-team","description":"This is an open source benchmarking tool for Machine Learning practitioners, the purpose of which is to accurately compare multiple Machine Learning algorithms and techniques against one another, under a standardised condition.","archived":false,"fork":false,"pushed_at":"2025-06-13T20:02:55.000Z","size":2315,"stargazers_count":0,"open_issues_count":41,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-13T21:19:15.142Z","etag":null,"topics":["ai","artificial-intelligence","benchmarking","image-classification","machine-learning","ml","tensorflow","tfjs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inevitable-team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-10T15:19:16.000Z","updated_at":"2020-06-19T09:34:21.000Z","dependencies_parsed_at":"2024-09-18T15:19:41.691Z","dependency_job_id":"8ff49685-d876-4c08-a57b-e22a05f79cc3","html_url":"https://github.com/inevitable-team/image-classification-benchmarker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/inevitable-team/image-classification-benchmarker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inevitable-team%2Fimage-classification-benchmarker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inevitable-team%2Fimage-classification-benchmarker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inevitable-team%2Fimage-classification-benchmarker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inevitable-team%2Fimage-classification-benchmarker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inevitable-team","download_url":"https://codeload.github.com/inevitable-team/image-classification-benchmarker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inevitable-team%2Fimage-classification-benchmarker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268065766,"owners_count":24190184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","artificial-intelligence","benchmarking","image-classification","machine-learning","ml","tensorflow","tfjs"],"created_at":"2024-11-15T03:38:20.863Z","updated_at":"2025-07-31T15:36:41.737Z","avatar_url":"https://github.com/inevitable-team.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Image Classification Benchmarker\n\nThis is an open source benchmarking tool for Machine Learning practitioners, the purpose of which is to accurately compare multiple Machine Learning algorithms and techniques against one another, under a standardised condition.\n\n![Screenshot](https://i.imgur.com/1YqqU7K.jpg)\n\n## Setup\n\nSome implemented algorithms use TensorFlow.js, which require you to install the [`windows-build-tools`](https://www.npmjs.com/package/windows-build-tools) for the TFJS binaries to build from Python.\n\nOnce downloaded, run `npm i` to install the dependencies, execute `npm start` to start the server and then visit `http://localhost:5000/`.\n\n### Using Different Algorithms\n\nYou will find the controller for loading the various algorithms in `~/server/models/index.js`, this will then load all of the JavaScript files in the `~/server/models/wrappers` directory.\n\nThese wrappers are exported classes that require a name, description with a create function. The `create` function will be used to return a new instance of a model, which will be ran per each API call, which will return the results.\n\nAlso, along with a `run` function in the instance, a `predictOne` function is also needed, which takes a file buffer as in input to return a prediction of the class.\n\nAn example of which would be:\n\n```js\nconst fs = require(\"fs\");\n\nclass exampleWrapper {\n    constructor() {\n        this.name = \"Algorithm #1\";\n        this.desc = \"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quam vel labore quos sit minus corrupti voluptatibus.\";\n    }\n\n    create(imagePercentage, imageAbsPath, params) {\n        params.classCount = fs.readdirSync(imageAbsPath).length;\n        return new e(params);\n    }\n}\n\nclass e {\n    constructor(params) {\n        this.params = params;\n    }\n\n    async predictOne(fileBuffer) {\n        return \"N/A\";\n    }\n\n    async run() {\n        return {\n            setUpTime: 0,\n            trainTime: 0,\n            evaluateTime: 0,\n            confusionMatrix: Array.from({ length: this.params.classCount }).map(() =\u003e Array.from({ length: this.params.classCount }).fill(0)),\n            accuracy: 0\n        };\n    }\n}\n\nmodule.exports = exampleWrapper;\n```\n\n### Using Image Datasets\n\nThe directory the image datasets should be placed in is `~/server/imageDatasets/datasets/`, which then should have the following folder structure:\n\n```\ndatasets\n+-- cifar10\n|   +-- airplane\n|   |   +-- image_x.jpeg\n|   |   +-- image_z.png\n|   |   +-- image_l.png\n|   +-- automobile\n|   |   +-- image_q.png\n|   |   +-- image_a.jpg\n|   |   +-- image_d.jpeg\n+-- MNIST\n|   +-- 0\n|   |   +-- image_er.png\n|   |   +-- image_do.jpg\n|   |   +-- image_b.jpg\n|   +-- 1\n|   |   +-- ima_0.jpeg\n|   |   +-- imatg.jpg\n```\n\nYou can find the following images datasets by clicking the following links:\ncifar10 - [https://pjreddie.com/projects/cifar-10-dataset-mirror/](https://pjreddie.com/projects/cifar-10-dataset-mirror/)\nMNIST - [https://www.kaggle.com/scolianni/mnistasjpg/download](https://www.kaggle.com/scolianni/mnistasjpg/download)\n\n### Using `@tensorflow/tfjs-node-gpu`\n\nIn the various model wrappers there are lines of code to use the gpu version of tfjs, these might require further debugging to install on a local machine, but will increase performance once `npm i @tensorflow/tfjs-node-gpu` is ran successfully on a machine.\n\nIf you get the following error:\n\n```\ninternal/modules/cjs/loader.js:805\n  return process.dlopen(module, path.toNamespacedPath(filename));\n```\n\nTry rebuilding the package from source (`npm rebuild @tensorflow/tfjs-node-gpu --build-from-source`).\n\n## Roadmap\n\nBelow is our current plan for this project:\n\n![Roadmap](https://i.imgur.com/MCYvNhx.jpg)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finevitable-team%2Fimage-classification-benchmarker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finevitable-team%2Fimage-classification-benchmarker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finevitable-team%2Fimage-classification-benchmarker/lists"}