copy了别人代码的你
最近忽然对图像识别有了兴趣,作为一个前端,当然是想用Javascript来深入研究。
先从简单的入手,识别图片验证码。图片验证码对web开发来说一点也不陌生,它是对服务器保护的一道屏障,避免了诸如暴力破解密码之类的攻击。但是,今天就是要去突破这道屏障。
现在开源的图像识别技术有很多,我在GitHub上找到了一个用Javascript实现的,相对受欢迎的框架Tesseract.js
。
我先准备好一个简单的验证码
这个是数字字母的组合,接下来我们就用tesseract.js
来对这个验证码进行解析。
安装
npm install --save tesseract.js
使用这个命令进行安装,--save
代表只安装到当前项目中。
使用
首先要在代码中进行引入
var tesseract = require('tesseract.js');
然后使用tesseract的recognize方法对图片进行解析。
tesseract.recognize(myImage,options)
.then(function(result){
console.log(result)
});
其中,myImage可以是图片file对象,或者图片的存放地址的字符串等,我们这里先用存放地址的字符串。
options则是对解析过程的个性化设置,可以设置语言等其他属性,较为重要的有lang
属性,用来设置语言类型,英文为eng
(默认),数字是Math
.
运行效果
下面我们来看一下实际的运行效果。
文件系统
app.js
使用node命令运行
可以看出,输出的结果是LPGU
,验证码中的字母数字组合是LP6U
,略有偏差,将6解析成了G。
所以,自动识别虽好,但是准确率还是需要提高。
Tesseract.js训练
tesseract.js是可以通过训练来提高准确率的,我们看一下第一次运行结束后发生了什么变化。
运行结束之后,文件系统中生成了一个eng.traineddata
文件
这个文件,就是tesseract
的训练文件,下次再分析的时候,会先从这个训练文件中寻找是否有匹配的结果。通过这种方式,形成它自己的大脑。
当然,我认为也可以手动的添加相同格式的文件进去,手动的扩充这个图像分析系统的智能性。
附录一
recognize
第一个参数所允许的类型:
因为tesseract.js
既可以运行node服务器中,也可以运行再浏览器中,我们这里只提在服务器中所允许的类型
文件地址(string)
包含
PNG
或JPEG
类型的Buffer
对象imageData
对象
附录二
浏览器中引入方式
<script src='https://cdn.rawgit.com/naptha/tesseract.js/1.0.10/dist/tesseract.js'></script>
使用方式同node方法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。