做了一个Serverless的仿discuz验证码识别器
在 Cloudflare Worker 中部署,纯原生 JavaScript 手写实现 2D 卷积、池化以及图像协议解码,最终将 AI 识别任务压缩到了极致的 ~ 100KB,且做到 0 依赖运行。可以识别 类discuz 的 BMP、PNG、GIF 的简单验证码(过于复杂的码识别能力很差)。
核心特性
- 微型模型:基于 MobileNetV3-Small 魔改,加入定制化 1D 序列融合头(OCR Sequence Head),来解决字符粘连与扭曲。
- QAT INT8 量化:使用 PyTorch QNNPACK 引擎进行量化感知训练 (Quantization-Aware Training),算子融合后导出纯净
.bin数据,体积 ~ 100KB。 - 手写图像解码引擎:
- BMP: 这个没啥说的。
- GIF: 手写 LZW 解码器,并自动抽取延迟最长的一帧。
- PNG: Web Crypto API 的
DecompressionStream替代 Zlib,纯手写 5 种查表逆滤波(Sub, Up, Average, Paeth)。
- 原生 V8 推理引擎:零第三方库,使用
Float32Array纯手搓含有 Padding、Stride 和分组卷积(Depthwise)的算子。
API 调用方式
向你的 Worker 发送一个带有图片二进制 Body 的 POST 请求,即可瞬间获得识别结果。
使用 cURL 测试:
1 | curl -X POST https://uncaptcha.psu.monster/ \ |
响应示例:
1 | B2X9 |
性能基准 (Benchmarks)
- 模型体积: ~100 KB (原生 INT8)
- 内存占用 (Cold Start): < 10 MB (包含张量池初始化)
- 推理耗时 (纯 JS 卷积): ~15 - 30 毫秒 (视 Cloudflare 节点 CPU 性能而定)
- 准确率 (Accuracy): 72% ~ 85% (FP32); 50% ~ 70% (INT8)
做了一个Serverless的仿discuz验证码识别器