优优云验证码识别积累一二

工作中需要自动破解识别验证码,本着不闭门造车的原则,我尝试使用了下优优云识别(逼格高吧,其实是自己对复杂的图像识别有心无力了)。

以前自己积累的识别二维码的文章,传送门:

http://blog.csdn.net/shuzui1985/article/details/8188993

优优云识别(验证码识别)主页:

http://www.uuwise.com/

原理及环境

注册开发者模式,同时和客服套取一定数量的免费调试题分(有人会问题分 是什么东东,其实就是充值积分了,优优云的二维码识别基于的原理是发送本地图片到他的服务器识别,而每次请求都需要消耗一定的题分!),下载对应的开发语言demo以及sdk,我使用的开发模式是  window7+java+dll调用方式!

下载:

开发

java中调用DLL函数uu_easyRecognizeBytesA进行远程云识别:

int codeID=UUDLL.INSTANCE.uu_easyRecognizeBytesA(SOFTID, SOFTKEY, USERNAME, PASSWORD, by, by.length, codeType, resultBtye);

识别效果如下,还不错吧,嘎嘎

本来到此就应该是一个完美的解决,何以箫声默中一样,男女猪脚在一起了,大团圆了!

但是更多的折腾在后面(不想看悲剧的同学可以掠过此分割线一下,但是个人觉得还有很多可以值得他人简介学习的地方)

折腾一:java 运行环境不一致,操作系统不一致带来的问题

(开发环境是win7+java7,多高大上的组合,想想还有些小得意),换到了一台XP机器和java6的机器上,运行jar直接fail.

xp需要配置32位的dll,以及jar导出配置为jre1.6的运行时,不然执行不了。

折腾二:切换到linux环境,dll文件尝试转换成so

需求是无穷无尽的,鄙人的屁股还没有坐稳,需要提供一套linux主机环境下可以使用的识别二维码的jar。大家都知道dll 是window上的动态库,而so 是linux上的动态库。两个格式不一致无法直接通用,java loadlibrary到了linux上就需要加载so文件了。

具体原理参考文章:http://blog.csdn.net/nana08/article/details/7374635

下载 pexports 文件转换出 dll def声明文件:

>pexports UUWiseHelper_x64.dll > UUWiseHelper_x64.def

我们这里就没有使用cywin环境,而是直接使用了mingw 环境编译了a静态库文件

>dlltool -D  UUWiseHelper_x64.dll -d  UUWiseHelper_x64.def-l  UUWiseHelper_x64.a

然后将a 静态库文件转换成so 动态库的时候出问题了(http://ubuntuforums.org/showthread.php?t=1954793

>ar -x UUWiseHelper_x64

>gcc -shared *.o -o UUWiseHelper_x64.so

尝试失败

折腾三:java QTcore 折腾

后来发现官网上支持so的,http://dll.uuwise.com/index.php?n=ApiDoc.Linux

dll与so 提供的导出函数不一致,需要在java中额外定义so的函数;

public void uu_setSoftInfoA(int nSoftID, String pcSoftKey);

public int  uu_reguserA(String pcUsername, String pcPassword, int nSoftID, String pcSoftKey);

public int uu_UploadFileA(String pcPicPath, int nCodeType);

public void uu_getResultA(int upid,byte[] pCodeResult);

public int uu_recognizeByCodeTypeAndPathA(String filename, int nCodeType, byte[] pCodeResult);

public int uu_recognizeByCodeTypeAndUrlA(String pcUrl, String pcInCookie, int nCodeType, String pCookieResult, byte[] pCodeResult);

导出OK但是万万没想到,这块也是个悲剧的伏笔(直接公布答案,官网的so 是基于QT5开发的,而JAVA 调用QT的包目前只维护到QT4)

http://qtjambi.org/

Qt Jambi 4.8.6 for Linux

There is now new release for 64 bit Linux.

I’ll do 32 bit package later, for Windows current builds should work, but updated packages will follow after

few Windows bundling related problems have been sorted out.

Most notable differences are bundling of libpng, so distributions not shipping the libpng the bundled Qt

was built with will continue working and bump to
Qt 4.8.6.

具体运行错误如下:加载QT4版本的‘libQtCore.so.4‘ 找不到!

Caused by: java.lang.RuntimeException: Loading library failed, progress so far:

No ‘qtjambi-deployment.xml‘ found in classpath, loading libraries via ‘java.library.path‘

Loading library: ‘libQtCore.so.4‘...

- using ‘java.library.path‘

at com.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(Unknown Source)

at com.trolltech.qt.internal.NativeLibraryManager.loadQtLibrary(Unknown Source)

at com.trolltech.qt.Utilities.loadQtLibrary(Unknown Source)

at com.trolltech.qt.Utilities.loadQtLibrary(Unknown Source)

at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(Unknown Source)

... 7 more

Caused by: java.lang.RuntimeException: Library ‘libQtCore.so.4‘ was not found in ‘java.library.path‘=:/usr/local/lib:/usr/lib:/usr/lib64:/root/111/Qt5.2.1/5.2.1/gcc_64/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

at com.trolltech.qt.internal.NativeLibraryManager.loadLibrary_helper(Unknown Source)

... 12 more

折腾四:c++ QT最后还是没成功

总不能空手而归吧,毕竟官网还是给C++ DEMO了。

直接make

>g++ testapi.cpp -o apitest -I/root/111/Qt5.2.1/5.2.1/gcc_64/include -fPIC -ldl

报错:链不到QT的函数。

/tmp/cc6Rhy3p.o: In function `main‘:

testapi.cpp:(.text+0x42): undefined reference to `QCoreApplication::QCoreApplication(int&, char**, int)‘

testapi.cpp:(.text+0x16b): undefined reference to `QCoreApplication::exec()‘

testapi.cpp:(.text+0x180): undefined reference to `QCoreApplication::~QCoreApplication()‘

testapi.cpp:(.text+0x19a): undefined reference to `QCoreApplication::~QCoreApplication()‘

collect2: ld ·μ?? 1

解决:参考http://qt-project.org/doc/qt-4.8/qmake-tutorial.html

建一个.api.pro文件(内容如下)

TARGET = apitest

QT += network

#DEFINES += QT_LARGEFILE_SUPPORT

SOURCES += \

testapi.cpp

执行qmake -o Makefile api.pro,由这个命令来生成一个依赖QT和其他系统函数的Makefile文件

然后直接执行make就编译出apitest可执行文件了。运行OK不过可能是官网的so是一年前的,可能存在问题。只能待咨询技术支持

时间: 2024-08-10 17:59:31

优优云验证码识别积累一二的相关文章

Python验证码识别--利用pytesser识别简单图形验证码

一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域…… 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等. 在破解验证码中需要用

百度 验证码识别API 使用

先到百度云申请文字识别API ,会给你一个API KEY和一个SECRET KEY,免费,一天最多500次请求. try: temp_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[API KEY]&client_secret=[SECRET KEY]' temp_res = requests.post(temp_url) temp_token = eval(t

Python验证码识别:利用pytesser识别简单图形验证码

一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域--    简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等. 在破解验证码中

tensorflow实现验证码识别案例

1.知识点 """ 验证码分析: 对图片进行分析: 1.分割识别 2.整体识别 输出:[3,5,7] -->softmax转为概率[0.04,0.16,0.8] ---> 交叉熵计算损失值 (目标值和预测值的对数) tf.argmax(预测值,2)验证码样例:[NAZP] [XCVB] [WEFW] ,都是字母的 """ 2.将数据写入TFRecords import tensorflow as tf import os os.env

Python 代码实现验证码识别

Python 代码实现验证码识别 测试开发社区  1周前 源 /  j_hao104 一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域…… 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.

爬虫日记-验证码识别

识别验证码 这个例子,是我们用python代码通过采用第三方来进行识别验证码. 我们用的是云打码这个网站.先在这个网站上把该注册的该申请的东西全都弄好. 然后把他的PythonHTTP调用示例下载来. 代码就在里面,具体怎么实现的我们就不用去理解了,要是能理解了,那可得多屌. 接下来我们只用去我们想要识别验证码的网站上把这个图片的连接爬取下来就好了, 再对这个连接进行requests请求获取图片的二进制数据 然后把图片保存下来,最后把这个图片文件当做参数传进已经下载来的代码里面就好了. main

车牌识别及验证码识别的一般思路

http://www.pin5i.com/showtopic-22246.html 描述一下思路及算法. 全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路. 一.车牌/验证码识别的普通方法 车牌.验证码识别的普通方法为: (1)      将图片灰度化与二值化 (2)      去噪,然后切割成一个一个的字符 (3)      提取每一个字符的特征,生成特征矢量或特征矩阵 (4)      分类与学习.

集美大学教务处验证码识别(二)

[原创,转载请标明作者:森狗] 本文对第二种验证码,即管理员登入后台地址的验证码进行识别. 1.采集一些验证码,0~9都要有 2.观察验证码,用画图工具即可. 观察可发现,噪点即阴影,此处的阴影就是颜色比主体验证码略淡,以此为突破口. 3.去除噪点 color.getGreen() 获取绿色的值int,绿色值(0~255 从深到浅),大于200的就是浅色的噪点 public static int isWhite(int colorInt) { Color color = new Color(co

常见验证码的弱点与验证码识别

http://drops.wooyun.org/tips/141 常见验证码的弱点与验证码识别 insight-labs · 2013/06/08 11:36 0x00 简介 验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助. 全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing t