做了一个Serverless的仿discuz验证码识别器

在 Cloudflare Worker 中部署,纯原生 JavaScript 手写实现 2D 卷积、池化以及图像协议解码,最终将 AI 识别任务压缩到了极致的 ~ 100KB,且做到 0 依赖运行。可以识别 类discuz 的 BMPPNGGIF 的简单验证码(过于复杂的码识别能力很差)。

核心特性

  • 微型模型:基于 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 发送一个带有图片二进制 BodyPOST 请求,即可瞬间获得识别结果。

使用 cURL 测试:

1
2
3
curl -X POST https://uncaptcha.psu.monster/ \
-H "Content-Type: application/octet-stream" \
--data-binary "@test_captcha.png"

响应示例:

1
B2X9

性能基准 (Benchmarks)

  • 模型体积: ~100 KB (原生 INT8)
  • 内存占用 (Cold Start): < 10 MB (包含张量池初始化)
  • 推理耗时 (纯 JS 卷积): ~15 - 30 毫秒 (视 Cloudflare 节点 CPU 性能而定)
  • 准确率 (Accuracy): 72% ~ 85% (FP32); 50% ~ 70% (INT8)

做了一个Serverless的仿discuz验证码识别器

https://psu.monster/post/2026/b6480b134830

作者

psu

发布于

2026-03-13

更新于

2026-03-13

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×