求环形验证码的识别算法, 语言最好Python、Java。
以下环形验证码的识别
有偿!!急
【相关推荐】
通过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算法程序,并传递参数的整个过程。