{"id":28305521,"url":"https://github.com/roackb2/captcha-tensorflow","last_synced_at":"2025-10-07T18:02:49.473Z","repository":{"id":74069860,"uuid":"292906786","full_name":"roackb2/captcha-tensorflow","owner":"roackb2","description":null,"archived":false,"fork":false,"pushed_at":"2020-09-04T17:23:33.000Z","size":2054,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-21T03:38:46.486Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/roackb2.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-04T17:22:02.000Z","updated_at":"2020-09-04T17:23:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"69698539-694e-4eba-bfed-770cdec6ee33","html_url":"https://github.com/roackb2/captcha-tensorflow","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/roackb2/captcha-tensorflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roackb2%2Fcaptcha-tensorflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roackb2%2Fcaptcha-tensorflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roackb2%2Fcaptcha-tensorflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roackb2%2Fcaptcha-tensorflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roackb2","download_url":"https://codeload.github.com/roackb2/captcha-tensorflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roackb2%2Fcaptcha-tensorflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271143398,"owners_count":24706346,"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-08-19T02:00:09.176Z","response_time":63,"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":[],"created_at":"2025-05-24T02:12:48.020Z","updated_at":"2025-10-07T18:02:44.059Z","avatar_url":"https://github.com/roackb2.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Captcha Solving Using TensorFlow\n\n\n## Introduction\n\n1. Solve captcha using TensorFlow.\n2. Learn CNN and TensorFlow by a practical project.\n\nFollow the steps,\nrun the code,\nand it works!\n\nthe accuracy of 4 digits version can be as high as 99.8%!\n\nThere are several more steps to put this prototype on production.\n\n**Ping me for paid technical supports**.\n\n[i@jackon.me](mailto:i@jackon.me)\n\n\n## Solve Captcha Using CNN Model\n\n\nold code that using tensorflow 1.x is moved to [tensorflow_v1](tensorflow_v1).\n\n#### 4-digits Captcha\n\n```bash\n# generating test data\n$ python datasets/gen_captcha.py -d --npi=4 -n 6\n```\n\n- Model: AlexNet\n- datasets:\n    - training images: 21k\n    - testing images: 9k\n- Accuracy: 87.6%\n\nif we increase the dataset by 10x, the accuracy increases to 98.8%.\nwe can further increase the accuracy to 99.8% using 1M traning images.\n\nhere is the source code and running logs: [captcha-solver-tf2-4digits-AlexNet-98.8.ipynb](captcha-solver-tf2-4digits-AlexNet-98.8.ipynb)\n\nImages, Ground Truth and Predicted Values:\n\nthere is 1 predicton error out of the 20 examples below. 9871 -\u003e 9821\n\n![](img-doc/result-preview-4digits.png)\n\nAccuracy and Loss History:\n\n![](img-doc/history-4digits.png)\n\nModel Structure:\n\n- 3 convolutional layers, followed by 2x2 max pooling layer each.\n- 1 flatten layer\n- 2 dense layer\n\n![](img-doc/model-structure-alexnet-for-4digits.png)\n\n\n## Generate DataSet for Training\n\n#### Usage\n\n```bash\n$ python datasets/gen_captcha.py  -h\nusage: gen_captcha.py [-h] [-n N] [-t T] [-d] [-l] [-u] [--npi NPI]\n                      [--data_dir DATA_DIR]\n\noptional arguments:\n  -h, --help           show this help message and exit\n  -n N                 epoch number of character permutations.\n  -t T                 ratio of test dataset.\n  -d, --digit          use digits in dataset.\n  -l, --lower          use lowercase in dataset.\n  -u, --upper          use uppercase in dataset.\n  --npi NPI            number of characters per image.\n  --data_dir DATA_DIR  where data will be saved.\n```\n\nexamples:\n\n![](img-doc/data-set-example.png)\n\n#### Example 1: 1 character per captcha, use digits only.\n\n1 epoch will have 10 images, generate 2000 epoches for training.\n\ngenerating the dataset:\n\n```bash\n$ python datasets/gen_captcha.py -d --npi 1 -n 2000\n10 choices: 0123456789\ngenerating 2000 epoches of captchas in ./images/char-1-epoch-2000/train\ngenerating 400 epoches of captchas in ./images/char-1-epoch-2000/test\nwrite meta info in ./images/char-1-epoch-2000/meta.json\n```\n\npreview the dataset:\n\n```bash\n$ python datasets/base.py images/char-1-epoch-2000/\n========== Meta Info ==========\nnum_per_image: 1\nlabel_choices: 0123456789\nheight: 100\nwidth: 60\nn_epoch: 2000\nlabel_size: 10\n==============================\ntrain images: (20000, 100, 60), labels: (20000, 10)\ntest images: (4000, 100, 60), labels: (4000, 10)\n```\n\n#### Example 2: use digits/lower/upper cases, 2 digit per captcha image\n\n1 epoch will have `62*61=3782` images, generate 10 epoches for training.\n\ngenerating the dataset:\n\n```bash\n$ python datasets/gen_captcha.py -dlu --npi 2 -n 10\n62 choices: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\ngenerating 10 epoches of captchas in ./images/char-2-epoch-10/train\ngenerating 2 epoches of captchas in ./images/char-2-epoch-10/test\nwrite meta info in ./images/char-2-epoch-10/meta.json\n```\n\npreview the dataset:\n\n```bash\n========== Meta Info ==========\nnum_per_image: 2\nlabel_choices: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\nheight: 100\nwidth: 80\nn_epoch: 10\nlabel_size: 62\n==============================\ntrain images: (37820, 100, 80), labels: (37820, 124)\ntest images: (7564, 100, 80), labels: (7564, 124)\n```\n\n\n#### Example 3: use digits, 4 chars per captcha image\n\n1 epoch has `10*9*8*7=5040` images, generate 10 epoches for training.\n\ngenerating the dataset:\n\n```bash\n$ python datasets/gen_captcha.py -d --npi=4 -n 6\n10 choices: 0123456789\ngenerating 6 epoches of captchas in ./images/char-4-epoch-6/train\ngenerating 1 epoches of captchas in ./images/char-4-epoch-6/test\nwrite meta info in ./images/char-4-epoch-6/meta.json\n```\n\npreview the dataset:\n\n```bash\n$ python datasets/base.py images/char-4-epoch-6/\n========== Meta Info ==========\nnum_per_image: 4\nlabel_choices: 0123456789\nheight: 100\nwidth: 120\nn_epoch: 6\nlabel_size: 10\n==============================\ntrain images: (30240, 100, 120), labels: (30240, 40)\ntest images: (5040, 100, 120), labels: (5040, 40)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froackb2%2Fcaptcha-tensorflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froackb2%2Fcaptcha-tensorflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froackb2%2Fcaptcha-tensorflow/lists"}