tesseract 识别内存图像示例
整理自: aar培训群 , 收藏备用
培训群里有人问: tesseract 怎么识别内存图像?
感谢 jacen He提供代码:
import gdip;
var bin = gdip.bitmap("\test.jpg").saveToBuffer("*.tif");
var pix = liblept.pixReadMem(bin,#bin);
ocr.setImage2( pix )下面引用他的回复:
其实他有 pixReadMemPng ,pixReadMemJpeg。。。。。一堆,都用不了,就连 pixReadMemTiff也识别不了tif,然后 liblept.pixReadMem(bin,#bin);却可以识别TIF,文档上看到的:On windows, this will only read tiff formatted files from memory.
这种问题其实直接找liblept的相关资料就可以了
语言包能帮忙提供一下吗.示例下载过来的语言包不能用,csdn我没账号
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio工程";right=959;bottom=591)
mainForm.add(
static={cls="static";text="Static";left=8;top=8;right=960;bottom=592;transparent=1;z=1}
)
/*}}*/
import console
import web.form.util
import com.picture
import process.imageView;
import tesseract;
web.form.emulation(8888)
wb=web.form(mainForm.static)
wb.go("http://zwfw.safe.gov.cn/asone/")
wb.wait()
var ele = wb.getEle("checkCode")
var 窗口句柄,左坐标,顶坐标,宽,高
窗口句柄=mainForm.hwnd
左坐标,顶坐标,宽,高=wb.getPos(ele)
console.log(窗口句柄)
console.log(wb.getPos(ele))
//输出下句柄和验证码坐标
var pic=com.picture.printClient(窗口句柄,左坐标+10,顶坐标+10,宽,高)
//截图时候,发现不知道为什么会有位移!求指导
pic.Save("/code.jpg")
//以下是识图
var ocr = tesseract.ocr();
if( 0 != ocr.init("eng") ){ //初始化样本语言包
error("没有找到样本 eng.traineddata",2)
}
//预设字符集可提升识别率,注意要一定在加载样本以后调用此函数
ocr.setVariable("tessedit_char_whitelist","0123456789");
//获取图像像素数据
var pix = liblept.pixRead( ..string.fromto( ..io.fullpath("/code.jpg")) );
ocr.setImage2( pix )
//识别图像
if( 0 != ocr.recognize() ){
console.pause(true,"识别图像出错");
return;
}
var text = ocr.getText()
console.log(text)
process.imageView("/code.jpg")
//对比下结果
mainForm.show();
return win.loopMessage();从外汇局网站上识别验证码! 今晚3小时的作品.大家指点下
从aardio作者那里抄了tesseract识别部分的源码部分.
有一个问题,为什么我抓取的验证码坐标和我实际部分的不一样.我发现要坐标+10才能截图正确!
我今晚考虑了好几种方法,不知道博主能否指点下.
能不能用植入JS方法下载保存验证码的图片.
从系统缓存中找到这个验证码图片
元素能不能直接赋值到剪切板,我从剪切板里识图.
百度说这个验证码脚本是随机变化出来的,是不是可以直接破解验证码的啊?
web.form有自带的截图或者下载图片方法么???
...web.form 不能用ctrl+(+)进行页面放大了..有办法吗.
谢谢博主解答.或者偶尔路过的aardio作者jacen
登录后方可回帖