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的相关资料就可以了
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
登录后方可回帖
语言包能帮忙提供一下吗.示例下载过来的语言包不能用,csdn我没账号