验证码识别方法详细揭秘0+

7,188 views / 2011.02.25 / 12:12 上午

目前各种论坛投票微博在我们发表内容时都需要输入验证码,有时候为了满足客户的特殊需求,又能节省人力,我们需要使用验证码识别功能。百度一下“验证码识别”,全是卖软件的,没有详细的技术介绍.(这就是技术人员不用百度的原因之一吧?:)。杜工对各个软件做了详细研究,发现识别的流程千篇一律。

1. 生成识别库文件。这个是验证码识别准确率的决定性步骤。要把图片经过各种滤镜祛除杂点,斜线等,然后把字符分割出来,然后挨个人工识别输入。这一步也叫做“学习”。最后等识别准确率非常高时,可发布生成一个tc文件.

2. 编程。核心思想就是有个写好的dll库,我们要用各种语言,如delphi, C#, 易语言等,把dll库和上一步生成的特征文件引进来,然后编程。下面是我写的一个delphi示例。

//加载特征库
 
function loadcode(a:integer;b:integer;c:string;d:string):integer;stdcall;
external 'ycode.dll';
 
//Recognitiond
function Recognitiond(a:integer;b:integer;c:integer;d:string;e:string):PChar;stdcall;
external 'ycode.dll';
 
begin
   S:=Trim(ParamStr(1));//接收图片路径
   if S <>'' then
     begin
      loadcode(0,0,'gou.fc','');//这是第一步生成的特征库
      Writeln(Recognitiond (1,0,0,'', S));//把识别结果输出来
      end
    else
       begin
      Writeln('false');
      end
  { TODO -oUser -cConsole Main : Insert code here }
end.
 

3. 应用。第2步骤可编译生成可执行文件。如f.exe , 我们可以用php方便调用:

echo exec("f.exe C:\\images\\code.png");

至此,验证码识别工作完成。

Ps.  NND,这个流程只能在windows环境下才能跑通,我想了各种办法想在linux下完成全过程,都不尽理想。

Categories: 感悟 Tags:

sed删除文件最后一行的语句方法0+

18,141 views / 2011.02.22 / 11:11 下午

linux下先测试:
sed ‘$d’ filename
输出结果符合要求。
怎么回写到源文件呢?用重定向?实验结果失败,会把文件置为空。
正确的方法是加-i参数

sed ‘$d’ -i filename

具体原因请自查手册

Categories: 感悟 Tags: