搜索
热搜: 活动 交友 discuz
查看: 999|回复: 7
收起左侧

[已提交] 请鱼大解释一下IVerifyCodeRecognizeResult类型的定义

[复制链接]

该用户从未签到

发表于 2019-12-24 13:23:05 | 显示全部楼层 |阅读模式
折腾了半天,在这里卡壳了
  1. public override void MarkResult(IVerifyCodeRecognizeResult result, bool correct){}
复制代码


求解

  • TA的每日心情
    难过
    2017-11-15 13:40
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2019-12-24 14:36:30 | 显示全部楼层
    鱼大给你源码了吗
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2019-12-24 19:39:18 | 显示全部楼层
    AutoVc里有,或参考下面的定义:

    [C#] 纯文本查看 复制代码
    	/// <summary>
    	/// 验证码识别结果
    	/// </summary>
    	public interface IVerifyCodeRecognizeResult
    	{
    		/// <summary>
    		/// 获得原始的图片
    		/// </summary>
    		Image Image { get; }
    
    		/// <summary>
    		/// 对于字符型验证码,获得最终识别的字符
    		/// </summary>
    		string Code { get; }
    
    		/// <summary>
    		/// 打码ID,用于报错
    		/// </summary>
    		string Id { get; }
    
    		/// <summary>
    		/// 验证码类型,如是字符串型的还是坐标型的
    		/// </summary>
    		VerifyCodeRecognizeType CodeType { get; }
    
    		/// <summary>
    		/// 获得坐标题的时候返回的坐标(数组)
    		/// </summary>
    		Point[] Points { get; }
    	}
    
    



  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2019-12-24 19:41:29 | 显示全部楼层
    PS:可以不实现这个函数,不实现后就不会上报打码错误。这个本意是为了向打码平台报错用的。

    该用户从未签到

     楼主| 发表于 2019-12-25 10:51:35 | 显示全部楼层
    本帖最后由 lon91ong 于 2019-12-25 10:59 编辑
    木魚 发表于 2019-12-24 19:41
    PS:可以不实现这个函数,不实现后就不会上报打码错误。这个本意是为了向打码平台报错用的。
    ...

    这个是报错用的? 哪个是用来post验证码图片的?我的C知识都是十多年前学的, 现在主要用python, 所以代码基本都是拼凑的
    我的思路是在本地模拟若快的端口, 返回数据格式可以自己定义, 或者坐标或者小图序号都行
    下面是我拼凑的代码:
    [C#] 纯文本查看 复制代码
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using TOBA.AutoVc;
    using RestSharp;
    using Newtonsoft.Json;
    
    internal class LocalVcService : AbstractVerifyCodeRecognizeService
    {
        public LocalVcService()
        {
            base.Author = "lon91ong";
            base.ErrorCodeQueryUrl = "localhost/"; //论坛权限不够发URL
            base.Name = "本地打码";
            base.WebUrl = "localhost/"; //论坛权限不够发URL
            this.ProviderName = "本地打码";
        }
        public static string Post(string url, IDictionary<object, object> param, Image image)
        {
            ImageConverter _imageConverter = new ImageConverter();
            byte[] imgBytes = (byte[])_imageConverter.ConvertTo(image, typeof(byte[]));
            // Convert byte[] to Base64 String
            // string base64img = Convert.ToBase64String(imgBytes);
            RestClient client = new RestClient(url);
            client.AddDefaultHeader("Accept", "application/json");
            client.AddDefaultHeader("Accept-Encoding", "gzip");
            RestRequest req = new RestRequest(Method.POST);
            req.AddHeader("cache-control", "no-cache");
            //使用了RestSharp库
            req.AddFileBytes("image", imgBytes, "1.png");
            IRestResponse resp = client.Execute(req);
            //var result = client.Execute<IVerifyCodeRecognizeResult>(req);
            dynamic json = JsonConvert.DeserializeObject(resp.Content);
            return json.Result;
        }
        public override void Load()
        {
            base.Load();
            base.Verified = true;
            base.ErrorCode = 0;
        }
        public override bool DoLogin()
        {
            base.IsLoggedIn = true;
            base.IsEnabled = true;
            base.Score = 10000;
            return true;
        }
        public override void MarkResult(IVerifyCodeRecognizeResult result, bool correct)
        {
        }
    
        public override IVerifyCodeRecognizeResult GetCode(Image image)
        {
            var param = new Dictionary<object, object>
                {
                    {"username","test"},
                    {"password","test"},
                    {"typeid",6113},
                    {"timeout","90"},
                    {"softid",2992},
                    {"softkey","9999999"}
                };
            //论坛权限不够发URL,下面的返回结果可以是序号格式:[1,3,6],也可以直接返回坐标:38.5,79.6|59.7,124.3
            var res = Post("ht:/ 127.0.0.1:80/create.json", param, image); 
            return null; //<<<<<<<现在的问题主要在此,不知如何将识别结果返回
        }
    }
    







    点评

    就是GetCode这个函数。接收一个Image对象,是验证码图片。返回一个识别结果。  详情 回复 发表于 2019-12-25 11:58
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2019-12-25 11:58:05 | 显示全部楼层
    lon91ong 发表于 2019-12-25 10:51
    这个是报错用的? 哪个是用来post验证码图片的?我的C知识都是十多年前学的, 现在主要用python, 所以代码基 ...

    就是GetCode这个函数。接收一个Image对象,是验证码图片。返回一个识别结果。

    该用户从未签到

     楼主| 发表于 2019-12-25 15:19:25 | 显示全部楼层
    本帖最后由 lon91ong 于 2019-12-25 19:12 编辑
    木魚 发表于 2019-12-25 11:58
    就是GetCode这个函数。接收一个Image对象,是验证码图片。返回一个识别结果。
    ...

    C#的"接口作为返回值"的操作恕我一个python过程编程的菜鸟理解不能
    需要自己补充定义一个实现 IVerifyCodeRecognizeResult 接口的类型吗?




    该用户从未签到

     楼主| 发表于 2019-12-25 21:54:06 | 显示全部楼层
    本帖最后由 lon91ong 于 2019-12-26 09:08 编辑
    木魚 发表于 2019-12-25 11:58
    就是GetCode这个函数。接收一个Image对象,是验证码图片。返回一个识别结果。
    ...

    搞过了前面的坎, 这个过不去了,求助
    [C#] 纯文本查看 复制代码
    public override IVerifyCodeRecognizeResult GetCode(Image image) {
                ............
    
                dynamic json = JsonConvert.DeserializeObject(resp.Content); //json.Result格式为"263,39|185,109"
                string[] sArray = json.Result.Split(new char[2] { ',', '|' }); //拆分字符串为数组
                Point[] pps = new Point[sArray.Length >> 1 ]; //sArray的一半长
                for(int i=0;i<pps.Length;i++)
                {
                    pps[i] = new Point(int.Parse(sArray[2*i]), int.Parse(sArray[2*i + 1]));
                }
                //MessageBox.Show(pps[0]);
                Result res = new Result(image, "", "", VerifyCodeRecognizeType.Points, pps); //Result为实现接口IVerifyCodeRecognizeResult的自定义类
                return res;
    }


    结果还是不行!

    那个 MarkResult 需要重写吗????




    您需要登录后才可以回帖 登录 | 入住

    本版积分规则

    申请友链| Archiver| 手机版| 鱼·后花园

    GMT+8, 2024-4-20 16:29 , Processed in 0.023092 second(s), 18 queries , Redis On.

    Powered by Discuz! X3.4

    © 2005-2024 鱼·后花园

    快速回复 返回顶部 返回列表