{"id":25397381,"url":"https://github.com/hasnainroopawalla/scribblenet","last_synced_at":"2026-04-07T18:32:28.346Z","repository":{"id":45175109,"uuid":"233629520","full_name":"hasnainroopawalla/ScribbleNet","owner":"hasnainroopawalla","description":"A Python library that classifies hand-drawn doodles into distinct classes (trained on the QuickDraw dataset by Google).","archived":false,"fork":false,"pushed_at":"2022-01-04T20:51:06.000Z","size":54890,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T03:58:01.093Z","etag":null,"topics":["android","cnn","doodle-classifier","flask","javascript","keras","python","restful-api","tensorflow"],"latest_commit_sha":null,"homepage":"https://www.hasnainr.com/projects/scribblenet.html#demonstration","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hasnainroopawalla.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-13T15:35:58.000Z","updated_at":"2022-01-03T20:35:38.000Z","dependencies_parsed_at":"2022-09-05T18:12:27.030Z","dependency_job_id":null,"html_url":"https://github.com/hasnainroopawalla/ScribbleNet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hasnainroopawalla/ScribbleNet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnainroopawalla%2FScribbleNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnainroopawalla%2FScribbleNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnainroopawalla%2FScribbleNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnainroopawalla%2FScribbleNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hasnainroopawalla","download_url":"https://codeload.github.com/hasnainroopawalla/ScribbleNet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnainroopawalla%2FScribbleNet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31524525,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["android","cnn","doodle-classifier","flask","javascript","keras","python","restful-api","tensorflow"],"created_at":"2025-02-15T21:47:45.815Z","updated_at":"2026-04-07T18:32:28.321Z","avatar_url":"https://github.com/hasnainroopawalla.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eScribbleNet\u003c/h1\u003e\n\n\n[![Linting](https://github.com/hasnainroopawalla/ScribbleNet/actions/workflows/linting.yml/badge.svg)](https://github.com/hasnainroopawalla/ScribbleNet/actions/workflows/linting.yml)\n[![Python 3.9](https://img.shields.io/badge/python-3.9-blue.svg)](https://www.python.org/downloads/release/python-390/)\n![Status](https://img.shields.io/badge/status-stable-green.svg)\n\n\nCheck out [the demo](https://www.hasnainr.com/projects/scribblenet.html#demonstration)!\n\n\u003ci\u003eScribbleNet\u003c/i\u003e is Python library that classifies hand-drawn doodles into distinct classes (trained on the [QuickDraw dataset by Google](https://github.com/googlecreativelab/quickdraw-dataset)).\n\nThis Python package is bundled as a REST API using [Flask](https://flask.palletsprojects.com/en/2.0.x/) and deployed on [Heroku](https://www.heroku.com/).\n\nThe front-end is built using vanilla JavaScript, HTML and CSS.\n\nDownload the Android App here ([Google Play](https://play.google.com/store/apps/details?id=doodle.classifier)).\n\u003e  The repository has recently been refactored and thus, the Android application currently doesn't work.\n\n## 📝 Table of Contents\n- [Getting Started](#gettingstarted)\n- [Machine Learning Stuff](#ml)\n\n\n## 🏁 Getting Started \u003ca name = \"gettingstarted\"\u003e\u003c/a\u003e\n[Working demo](https://www.hasnainr.com/projects/scribblenet.html#demonstration)\n\n\nTo run locally:\n1.  ```\n    $ git clone https://github.com/hasnainroopawalla/ScribbleNet.git\n    $ pip install -r requirements.txt\n    $ python3 scribblenet/server.py\n    ```\n2. Navigate to `127.0.0.1:5000` in your browser.\n\n\n## 🧮 Machine Learning Stuff \u003ca name = \"ml\"\u003e\u003c/a\u003e\n\n### Pre-processing\n- Two pre-processing pipelines (for training, predicting on external data) have been created. Refer to `scribblenet.preprocessor.PreProcessor` ([source](https://github.com/hasnainroopawalla/ScribbleNet/blob/b645e1c1299784faebbce4f7efbbdd67758bae0b/scribblenet/preprocessing/preprocessor.py#L19)).\n\n### Training\n- A `Jupyter` notebook for training the model on the Quickdraw Dataset can be found [here](https://github.com/hasnainroopawalla/ScribbleNet/blob/master/scribblenet/ml/training.ipynb).\n- The notebook uses utility methods from the `scribblenet` package for loading and preprocessing the data.\n- The `load_classes()` method accepts `100` or `all` as an argument to indicate if 100 classes or all 345 classes should be loaded.\n- The `load_dataset()` method accepts `num_samples_per_class` as an argument to indicate how many samples of each class should be loaded.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasnainroopawalla%2Fscribblenet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhasnainroopawalla%2Fscribblenet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasnainroopawalla%2Fscribblenet/lists"}