求一个环形验证码的识别算

求环形验证码的识别算法, 语言最好Python、Java。
以下环形验证码的识别

img

有偿!!急

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7698436
  • 这篇博客你也可以参考下:【终极版】java万能执行python方法生成机器学习模型并应用机器学习模型
  • 您还可以看一下 张明阳老师的深入理解C语言指针和结构体课程中的 C语言到Java和Python语言的一个完美过渡(17)小节, 巩固相关知识点
  • 除此之外, 这篇博客: 使用Java调用Python编程方式:使用复杂算例,包含参数传递中的 3.在Java程序中调用python脚本程序,包含传入参数,接收结果的过程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    通过SpringBoot项目测试类调用处理成方法体,并声明主函数入口的python算法程序。在java中传入参数,并接收、处理返回值:

    @Test
        public void test10() throws InterruptedException, IOException {
    
            try {
                // 在这里写入需要传入的参数
                String fileURl = "C:/Users/Princekin Yan/Desktop/hangcaiyuce/consume.xlsx";
                // 这里的args数组是java调用python运行所必须的参数,"python"是本地默认的python环境声明,"C:/Users/Princekin Yan/Desktop/hangcaiyuce/SVR and BP.py"是本地python程序文件所在的绝对路径,fileURL是传递给python算法程序的参数,可以传入多个,通过逗号分隔开,写在后面即可。
                String[] args = new String[]{"python", "C:/Users/Princekin Yan/Desktop/hangcaiyuce/SVR and BP.py", fileURl};
                Process proc = Runtime.getRuntime().exec(args);// 执行py文件
    
                BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                // 定义一个空字符串str来接收返回值
                String str="";
                String line = null;
                // line是从返回值中读取到的结果
                while ((line = in.readLine()) != null) {
                	// 可以将in.readLine的内容打印出来查看
                    // System.out.println(line);
                    str+=line;
                }
    
                in.close();
                // 下面是通过正则表达式对获取到的结果进行处理
                String reg = "(?<=result_y is: ).*?(?=(\\(array|$))";
                Pattern pattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher(str);
                String findStr = "";
                List<String> result_y = new ArrayList<String>();
                String mad = "";
                while (matcher.find()) {
                    findStr = matcher.group();
                    System.out.println(findStr);
                    String [] result = findStr.split("MAD is:");
                    for (int i = 0 ; i < result.length ; i++){
                        String s = result[i];
                        if(i == 0){
                            s = s.substring(1,s.length()-1);
                            String [] result_temp= s.split(" ");
                            System.out.println("result_temp length====" + result_temp.length);
                            for (int y = 0 ; y < result_temp.length ; y++){
                                if(StringUtils.isNotBlank(result_temp[y])){
                                    System.out.println("result_temp[y]==" + result_temp[y]);
                                    result_y.add(result_temp[y]);
                                }
                            }
                        }else{
                            mad = s;
                        }
                    }
                }
                proc.waitFor();
                System.out.println("result_y size====" + result_y.size());
                System.out.println("mad==" + mad);
                //到此将想要的结果值处理完成
    
                //定义一个list来接收完成遍历赋值的对象们
                List<Hangcaiyuce> hangcaiyuceList = new ArrayList<>();
                //调用时间工具类来确定当前时间
                TimeUtils timeUtils = new TimeUtils();
                // BianliDuixiang bianliDuixiang =new BianliDuixiang();
                for (int i = 0; i <result_y.size() ; i++) {
                    //每层循环遍历一个数据,一个数据对应一个月份的航材预测结果
                    Hangcaiyuce hangcaiyuce = new Hangcaiyuce();
                    // 下面是给对象赋值
                    int b= i+1;
                    hangcaiyuce.setMonthNum("月份"+b);
                    hangcaiyuce.setMonthData(result_y.get(i));
                    hangcaiyuce.setTime(timeUtils.getTime());
                    hangcaiyuce.setMad(mad);
                    hangcaiyuce.setType("forecast");
                    //每一个完成属性赋值任务的对象加入list集合
                    hangcaiyuceList.add(hangcaiyuce);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    

    接收返回值并对其进行处理的程序每个人的情况都不同,如果结果简单,直接从输出流中将其赋值给变量即可,如果复杂,则需要进行专门处理,例如借用正则表达式。也可以在python脚本中加入连接数据库,将结果写入数据库的相关语句,只执行python程序,而不必关心它的返回值形式以及如何让出来,java直接读取数据库即可。在此只提供思路。
    至此,便完成了Java调用python算法程序,并传递参数的整个过程。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^