【原理说明】 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>///