博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java语言答案识别工具挑战百万英雄,教你赢大奖!!!!
阅读量:7196 次
发布时间:2019-06-29

本文共 2856 字,大约阅读时间需要 9 分钟。

【工具介绍】
JAVA8
Android 手机
Adb 驱动

【原理说明】
1.将手机点击到直播界面(在这里我们先打开一张图片);

2.用Adb工具获取当前手机截图,并用adb将截图pull上来

adb shell screencap -p /sdcard/1.png
adb pull /sdcard/1.png .
3.用tessOCR进行图像识别,提取文字;
4.将文字中的问题和答案提取出来;

5.使用百度搜索并统计搜索得到结果数量
问题+各个答案count(q&a);
问题 count(q);
答案 count(a);
6.计算匹配值pmi: pmi[i]=count(q&a[i])/(count(q)*count(a[i]))
7.选择pmi值最高的为答案。
【具体操作流程】
1.安卓手机打开USB调试,设置》开发者选项》USB调试
2.电脑与手机USB线连接,确保执行adb devices可以找到设备id
3.打开百万直播

4.运行我们的java程序,当弹出题目时,输入回车即可
PS:注意程序中的adb驱动目录要更换成自己的目录
我的屏幕是1920*1080,如果是别的分辨率,暂时需要修改一下代代码中的图片参数等。

<java>///

import com.alibaba.fastjson.JSON;import entity.cddh.CDEntity;import entity.cddh.Data;import entity.cddh.Event;import exception.CorrectAnswerException;import exception.NoBeginExcetpion;import org.junit.jupiter.api.Test;import utils.Utils;import java.io.InputStream;import java.util.Currency;import java.util.HashMap;import java.util.Map;public class CDDHGetQuestion implements GetQuestion {     private static final String questionUrl = "http://htpmsg.jiecaojingxuan.com/msg/current";    private static String formatJson(String json){        return json.replace("\\","").replace("\"[","[").replace("]\"","]");    }    public  static Information getQuestionInformation() throws NoBeginExcetpion, CorrectAnswerException {        return new Information(getQuestionStr());    }    public  static String getQuestionStr() throws NoBeginExcetpion, CorrectAnswerException {        String qaStr ="";        String questioJson = formatJson(Utils.getResponseByGet(questionUrl));    //     测试方法  注释上面一行 打开 这两行的注释 可 利用本地json数据进行测试。       /* InputStream in = CDDHGetQuestion.class.getResourceAsStream("/json/question1.json");        String questioJson =  formatJson(Utils.convertStreamToString(in));*/        CDEntity parse = JSON.parseObject(questioJson, CDEntity.class);        if("no data".equals(parse.getMsg())){            throw new NoBeginExcetpion();        }else if("showAnswer".equals(parse.getData().getEvent().getType())){             Event event = parse.getData().getEvent();            String str = event.getDesc()+"的答案为"+ (event.getCorrectOption()+1) +"."+event.getOptions()[event.getCorrectOption()];            throw new CorrectAnswerException(str);        }else if("成功".equals(parse.getMsg())){                Event event = parse.getData().getEvent();                String desc = event.getDesc().replace(".", "..");                qaStr += desc + "\n";                for(String opt:event.getOptions()){                    qaStr += opt+"\n\n";                }        }        return qaStr.substring(0,qaStr.length()-2);    }    @Test    public  void test(){        try {            CDDHGetQuestion.getQuestionStr();        } catch (NoBeginExcetpion noBeginExcetpion) {            noBeginExcetpion.printStackTrace();        } catch (CorrectAnswerException e) {            e.printStackTrace();        }    }}复制代码
<java>///

转载地址:http://yhkum.baihongyu.com/

你可能感兴趣的文章
跟我一起考PMP---项目成本管理
查看>>
谈谈VIP漂移那点破事
查看>>
用户管理脚本之删除用户——Delete_user.sh
查看>>
SFB 项目经验-01-共存迁移-Lync 2013-TO-SFB 2015-规划01
查看>>
一些数字货币(类比特币)介绍
查看>>
一场媲美“超女”海选的招聘狂潮
查看>>
.NET WinForm下一个支持更新ProgressBar进度的DataGridView导出数据到Excel的类
查看>>
C#控件开发的闪烁问题和解决方法总结
查看>>
【推荐】10款优秀的jQuery图片插件
查看>>
黑客大赛苹果及微软操作系统均被攻破
查看>>
Linux poll机制分析
查看>>
vb 读 xml
查看>>
Android全屏和强制横屏竖屏设置
查看>>
Java序列化高级认识
查看>>
开发 Windows 8 Bing地图应用(1)
查看>>
Block With工具
查看>>
[转]WF事件驱动(4) -持久化
查看>>
两个栈实现队列 两个队列实现栈
查看>>
Doubly linked list
查看>>
javascript对Dom操作中table添加行性能问题
查看>>