java语言答案识别工具挑战百万英雄,教你赢大奖!!!!

408 阅读2分钟

【工具介绍】
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>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////