Metadata-Version: 2.4
Name: azcrawlerpy-recaptcha-google
Version: 2.0.0
Summary: Default weights for azcrawlerpy's reCAPTCHA v2 image-grid solver: TesseraNet's graphs, head and provenance card.
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: pytest>=8.2; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: ruff>=0.5; extra == "dev"
Dynamic: license-file

# azcrawlerpy-recaptcha-google

The default model for [azcrawlerpy](https://pypi.org/project/azcrawlerpy/)'s `recaptcha_v2` captcha
solver: TesseraNet, one network for both grid kinds, as `tesseranet_3x3.onnx` and `tesseranet_4x4.onnx`
(one graph per grid kind, from the same weights), `cell_head.json` naming each channel's category and
threshold, and the provenance card `tesseranet_3x3.json` written when a model is promoted through
`captcha-training`. `azcrawlerpy[recaptcha]` installs it; there is nothing to import.

It is published apart from azcrawlerpy so that code releases do not upload the weights again, and
a retrained model ships without an azcrawlerpy release.

## Versions

- **Major**: the contract azcrawlerpy relies on (file name, format, class names, input size).
  azcrawlerpy pins the major it reads, so a major bump needs an azcrawlerpy release that accepts it.
- **Minor**: retrained weights. Existing azcrawlerpy installs pick them up on upgrade.

## Releasing a model

`promote()` in `captcha-training` writes the weights and card into `azcrawlerpy_recaptcha_google/`
in this checkout, only when they beat the model already here. Commit both, bump the minor version,
check with `uv sync --extra dev && uv run pytest`, and publish with `build.txt`. It builds the
wheel only: an sdist would upload the same weights a second time against the project's PyPI quota.
