使用 CV (OpenCV) 和 OCR (Tesseract) 进行验证码识别
simplest | grids_and_equations | dots_and_chars | ... |
---|---|---|---|
... | |||
2348 | 2x6=? | 7RVO | ... |
因为所需的 OpenCV 支持模块 opencv4nodejs 体积较大,编译过程复杂,请手动安装,或者参考官方的安装指南:
npm i opencv4nodejs -g
第三种验证码识别改为用 sharp 和纯 JavaScript 的 CV 算法来实现,方便在树莓派上运行,但效率相比前两者很低。
第二个 Tesseract 支持模块为 tesseract.js
直接安装
npm i captcha-cv-ocr
或者
git clone https://github.com/PillarsZhang/captcha-cv-ocr
cd captcha-cv-ocr
npm install
npm link #约等于安装为全局模块
node judge_and_test.js
const path = require("path");
const cvocrModule = require("captcha-cv-ocr");
var mode = "simplest";
(async () => {
let cvocr = new cvocrModule(mode); // mode 表示验证码的种类
await cvocr.init(1); //其中的1表示需要启动的 OCR Worker 数(多线程)
let ans = await cvocr.recognize(path.join(__dirname, "docs/img", mode + ".jpg")); //支持文件地址、Base64、Buffer形式
console.log("ans:", ans)
process.exit(0);
})()
simplest | grids_and_equations | dots_and_chars |
---|---|---|
2348 | 2x6=? | 7RVO |
codes下的文件夹对应着不同种类的名字(自行命名),你可以参照已有的模板与API创建新的识别库,来适配其他各种验证码。
- opencv4nodejs
- tesseract.js
- 主页 | https://tesseract.projectnaptha.com/
- Github | https://github.com/naptha/tesseract.js
- API | https://github.com/naptha/tesseract.js#docs
- 第三种验证码如果进行训练识别效果会更好
- sharp
- Github | https://github.com/lovell/sharp
- API | https://sharp.pixelplumbing.com/api-constructor
- 另外吐槽:只有编辑图像的基础功能,而且体验不是很理想需要绕过bug
- ./lib/fakeOpenCV
- 个人仿照 OpenCV 重写了一些图像算法
C++ / Python 的 OpenCV 海量资料也非常有帮助, 相应的函数基本都能在 opencv4nodejs 的 API 文档 里找到