精华内容
下载资源
问答
  • 模仿作业帮、小猿题库搜题功能(包含图片文字识别) 参考:https://blog.csdn.net/android_xue/article/details/78962637 搜题数据参考小韭搜题:http://www.xiaojo.com
  • 如何实现一个拍照搜题功能

    千次阅读 2019-10-25 10:23:24
    如何实现一个拍照搜题功能 主要分4步数据抓取,数据处理 ,图文转换,搜索引擎 1.数据抓取 主要抓取网页网站题库数据 可抓取题库网,无忧网,新东方题库 技术实现: 利用jsoup抓取相应网站的数据,利用htmlunit模拟...

    如何实现一个拍照搜题功能

    主要分4步数据抓取,数据处理 ,图文转换,搜索引擎

    1.数据抓取

    主要抓取网页网站题库数据

    可抓取题库网,无忧网,新东方题库

    技术实现:

    利用jsoup抓取相应网站的数据,利用htmlunit模拟客户端抓取数据
    通过下面链接可下载Jsoup的jar包
    http://central.maven.org/maven2/org/jsoup/jsoup/1.12.1/jsoup-1.12.1.jar
    通过下面链接可下载htmlunit的jar包
    http://central.maven.org/maven2/net/sourceforge/htmlunit/htmlunit/2.35.0/htmlunit-2.35.0.jar

    遇到问题:

    js异步加载 :

    如组卷网会通过js异步加载导致jsoup第一步抓取的只是一个网站空壳,抓不到想要的数据
    可以通过htmlunit技术去模拟浏览器,把js异步加载过程也模拟完成后能获得正确数据

            WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);//选择模拟浏览器型号
           //屏蔽日志信息
            LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
                    "org.apache.commons.logging.impl.NoOpLog");
            Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
           //支持JavaScript
            webClient.getOptions().setJavaScriptEnabled(true);
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setActiveXNative(false);
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setThrowExceptionOnScriptError(false);
            webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
            webClient.getOptions().setTimeout(10000);
            webClient.waitForBackgroundJavaScript(10000);
            url="https://passport.zujuan.com/login";
            URL link=new URL(url);
            WebRequest webRequest=new WebRequest(link);
            HtmlPage rootPage = webClient.getPage(webRequest);//获得要抓取的页面
    

    需要登陆:

    有些网站一些页面需要登陆操作

    可以通过设置hander cookie来跳过登陆,但是cookie部分数据会动态发生改变需要时时注意,

        public static Document setHeader(String url) throws IOException {//设置header返回doc
        Map<String, String> header = new HashMap<String, String>();
        Connection conn=Jsoup.connect(url);
        conn.header("Host","www.tiku.cn");
        conn.header("Connection","keep-alive");
        conn.header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0");
        conn.header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        conn.header("Accept-Encoding","gzip, deflate");
        conn.header("Accept-Language","zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
        conn.header("Cookie","Hm_lvt_02f32149c7ea90d0cd47ed89025e457c=1555984749,1555986859,1556607888,1557306767; PHPSESSID=5i8v8easa3uhkev2r36uennqai; Hm_lpvt_02f32149c7ea90d0cd47ed89025e457c=1557399030; AD=None; token=6ce06f56f40d000c3bb79b7a65bed7e8; userId=25431; isLogin=1");//题库网的PHPSESSID会动态改变的得实时更新
        conn.header("Referer","http://www.tiku.cn/");//设置header的参数
        conn.execute();
        return conn.get();
    }
    

    或者通过htmlunit取模拟登陆

            CookieManager cm=webClient.getCookieManager();//得到当前分配得到的cookie
            Set<Cookie> cookies=((CookieManager) cm).getCookies();
            Iterator<Cookie> it=cookies.iterator();
            while(it.hasNext()){
                webClient.getCookieManager().addCookie(it.next());
            }
            rootPage=webClient.getPage(url);
            HtmlForm form=rootPage.getForms().get(0);//获取当前页面的表单
            HtmlInput name=form.getInputByName("LoginForm[username]");
            HtmlInput pwd=form.getInputByName("LoginForm[password]");
            name.setValueAttribute("17684721017");
            pwd.setValueAttribute("123456");
            HtmlButton btn= (HtmlButton) rootPage.getByXPath("/html/body/div/div/form/div/div[3]/button").get(0);
            rootPage=btn.click();//获得登陆后的页面
    

    访问频率限制:

    某些网站对于一个ip有访问次数限制,所以需要正确线程池大小,而且尽量减少一次抓取所需要的访问次数

    而且访问次数过多会导致网站连接延迟增加所以要提高连接超时限制

    锁账户和ip机制

    有些网站会有个动态黑名单,封锁异常多次访问的ip和账户

    2.抓取数据的处理

    遇到问题

    抓取的数据可能是xml代码,json代码,其中可能带有html特殊字符,所以需要对其去转义,图片地址有可能是不带域名的所以处理的时候得加上域名

    str= str.replace("&lt;","<");
    str= str.replace("&quot;","\"");
    str= str.replace("&gt;",">");
    str= str.replace("&amp;","&");
    str= str.replace("&apos;","'");
    str= str.replace("&quot","");
    

    3.OCR技术(文字识别)

    名称api来源来源网址是否开源限制次数技术问题
    iocr百度http://ai.baidu.com/tech/ocr/iocr每个账户50000次/天
    tesseract谷歌作为开源项目发布在Google Project上无限制官方字库准确率过低,需要自己训练字库

    百度ocr调用实现

    将图片文件进行转码获得一个处理后的字符串

    byte[] imgData = FileUtil.readFileByBytes(filePath);//需要自定义两个工具类
    String imgStr = Base64Util.encode(imgData);
    String params = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(imgStr, "UTF-8");//Base64Util,FileUtil这两个是自定义的工具类将图片文件转码
    

    利用百度对每个账户分配的 API Key 和 Secret Key 获得新的accessToken通行证

        public static String getAuth(String ak, String sk) {
           // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
            // 1. grant_type为固定参数
            + "grant_type=client_credentials"
            // 2. 官网获取的 API Key
            + "&client_id=" + ak
            // 3. 官网获取的 Secret Key
            + "&client_secret=" + sk;
       try {
        URL realUrl = new URL(getAccessTokenUrl);
        // 打开和URL之间的连接
        HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        // 获取所有响应头字段
        Map<String, List<String>> map = connection.getHeaderFields();
        // 遍历所有的响应头字段
        for (String key : map.keySet()) {
            System.err.println(key + "--->" + map.get(key));
        }
        // 定义 BufferedReader输入流来读取URL的响应
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String result = "";
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
        /**
         * 返回结果示例
         */
        System.err.println("result:" + result);
        JSONObject jsonObject = new JSONObject(result);
        String access_token = jsonObject.getString("access_token");
        return access_token;
      } catch (Exception e) {
        System.err.printf("获取token失败!");
        e.printStackTrace(System.err);
     }
      return null;
    
    }
    

    通过访问这个url可以得到通行证码

    再通过http访问百度给的接口,需要在url地址带上通行证信息和图像处理后的字符串

    String result = HttpUtil.post(otherHost, accessToken, params);//HttpUtil是一个自定义的连接类
    

    最后获得百度传回的json文件,获得的文件格式为识别的每一行的字,所以好得处理下把每行字取出来合并

    遇到问题

    百度ocr api有账户次数限制 每个账户5w次/日

    开源免费的tesseract的精度太低,需要训练词库,训练词库的方法可以通过下面这个博客学习
    https://www.cnblogs.com/wzben/p/5930538.html

    4.搜索引擎的搭建

    技术实现

    利用solr框架搭建一个针对题目title的搜索引擎
    通过下面链接下载solr相关文件
    http://mirror.bit.edu.cn/apache/lucene/solr/8.1.0/solr-8.1.0-src.tgz

    配置要点:可查看微博https://www.cnblogs.com/xuyiqing/p/8707966.html

    通过官网下载的文件,可直接通过终端启动solr,有几个重要的jar包需要添加,极其重要缺一不可

    建立核心,在核心内有两个配置文件需要修改,data-config.xml solrconfig.xml

    需要加入ik词库,需要配置scheme文件来修改词库内容
    接下来:在刚才提到的schema.xml中配置:加上这一段

    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
    </fieldType>
    
    <field name="title_ik" type="text_ik" indexed="true" stored="true"/>
    <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    

    新建的这两个域支持IK分析器

    启动前得提高solr服务器启动对应的jvm大小,防止因为数据量过大导致内存溢出问题

    ./solr -m 2g
    

    cmd输入 为虚拟机分配2g大小的内存

    导入数据的时候尽量将少量字段导入减少solr读取建立索引的消耗,导入id,title字段通过图片转义的文字对应title,来找到对应id并返回

    java调用只需要先建立对solr服务器对应核心的连接然后定义关键词再获得结果响应

    5.实现

    把爬取的题库资源上传id和题目两个字段到solr服务器中,

    用户把图片资源上传后,通过百度ocr接口把图片转换为文字,

    对应文字上传到solr提供的接口返回相似度最高的前五个题目的id和题目,

    返回用户这五个id和题目,用户自己点击选择最想看的题目,在上传id到服务器然后服务器查询数据库返回对应的h5和答案给用户

    展开全文
  • 分11步处理 自定义相机扫描框实时扫描试卷二维码功能 扫描二维码获取当前试卷信息 自定义相机按试卷比例绘制裁剪框 OpenCv对用户拍照图片进行矫正 ...图片上传服务器进行识别搜题 服务器返回各题识别结果和当前小图的.

    周末来一发,结个尾

    具体步骤
    1. 自定义相机扫描框实时扫描试卷二维码功能
    2. 扫描二维码获取当前试卷信息
    3. 自定义相机按试卷比例绘制裁剪框
    4. OpenCv对用户拍照图片进行矫正
    5. 对矫正后的图片,使用OpenCv对图片进行处理,获取到图片定位点信息。根据图片定位点算出每张图片原点的偏移量
    6. 获取到试卷起始定位点,根据第二步获取到的试卷坐标对图片进行题型框选(需要算原图和用户拍照图的宽高比例对坐标进行缩放处理,否则会圈的很不准确)
    7. OpenCv对框选内容进行图片切割、压缩。
    8. 图片上传服务器进行识别搜题
    9. 服务器返回各题识别结果和当前小图的坐标
    10. 根据原始图坐标和小图坐标对识别结果进行判错框选处理
    11. 结果试卷回显给用户

    关于OpenCV图片处理的代码前面基本上都已经说过了,其他的就是些基本的代码了,自己动手写一下吧。

    最后实现效果如下

    在这里插入图片描述

    题型就标注这些坐标,所以我们圈的时候也是圈的这些。

    最终实现效果
    在这里插入图片描述

    展开全文
  • 拍照搜题小程序

    千次阅读 2020-05-05 19:12:49
    拍照搜题小程序,算法还只是初级的,有兴趣的可用于参考。 后端采用java开发

    拍照搜题小程序,算法还只是初级的,有兴趣的可用于参考。

    后端采用java开发

     

     

     

     

    详情: http://market.zhenzikj.com/detail/131.html

    展开全文
  • 拍照搜题

    千次阅读 2015-09-17 17:28:03
     从技术上来说,这类软件主要有两种方案:“以图搜图”和“OCR+文字搜索” ①以图搜图的方法就是把用户拍摄的图片和已有的图片题库做匹配。这和我们平常通过上传图片的方式...用户在拍照后,软件首选需要把其中
    
    从技术上来说,这类软件主要有两种方案:“以图搜图”和“OCR+文字搜索”
    ①以图搜图的方法就是把用户拍摄的图片和已有的图片题库做匹配。这和我们平常通过上传图片的方式在搜索引擎中找与之相似的图片其实非常相似。只是在图片匹配的过程中有“计算机视觉+机器学习”和“深度学习”这两种方式可选。
    ②和以图搜图的方法相比,“OCR+文字搜索”的方式就复杂一些。用户在拍照后,软件首选需要把其中的字符识别出来,然后在题库中进行检索才能得出结果。和上面图片匹配过程类似的是,在文字识别的过程中也有两种技术方案可选:“传统OCR”和“深度学习”。
    虽然这两个流程看上去简洁易懂,但在背后计算机要做的事情远比这些复杂。像PhotoMath,每一个处理过程都要经过图像输入、预处理、校正、噪声去除等多个阶段。而小猿搜题一次正常的“做题”过程也至少要经过预处理、切分、识别、搜索和辅助策略5个步骤。
    当软件接受到手机拍摄的图片之后,首先要做异常检测,比如图片是否模糊、是否需要旋转图像等等。经过这个过程之后,再进行二值化,并对字符及公司进行切分。
    经过二值化之后,整个图像会呈现出明显的黑白效果,这样一来,图像就变得简单了,而且数据量也减小了,还能凸显出感兴趣的目标的轮廓。接着自然也就可以把单个字符切分出来了。
    把字符切分出来之后,软件还是“认不出”这个字符是什么的,所以接下来还要识别这些字符。这时就需要光学字符识别技术(OCR)和深度学习技术上场了。
    在识别这个过程中,PhotoMath主要使用了OCR技术,而小猿搜题则主要使用了深度学习技术。不过,由于这两种方法都不能保证100%识别正确,所以中间可能还需要插入一个纠错过程,像“1和l”、“好图所示和如图所示”、“入和人”这些形式非常相近的字符机器也很容易读错。这时候利用语言模型进行纠错就显得比较有必要了。
    在做完识别之后,它还要去题库里搜索对应的题目。在这个过程中,计算机又要用到分词、排序等搜索过程中需要用到的技术。



    OCR(Optical Character Recognition,光学字符识别),自动研究光学设备产生的图片检查纸上的字符,通过检测暗、亮的模式确定其形状,实现计算机对文字的阅读。


    展开全文
  • 近期接到的项目中有一个功能——手机拍照搜索试题。首先进行分析,客户端调用ocr接口识别照片中的文字,服务端拿到文字去题库进行搜索。对后端开发的我来说,问题就变为如何根据关键词搜索匹配度较高的题目。一个...
  • 用python的OCR实现自动拍照搜题--源码

    千次阅读 2019-04-04 09:58:35
    自动拍照搜题源码 说明: 因为有很多人要源码,所以还是贴一下好了 很久之前的一个小demo就是搞着玩玩的没什么技术含量,马上要毕业去工作了,现在也不想在动了。 虽然是叫“自动拍照搜题”,但是当时写的时候还是...
  • 关于拍照搜题 APP 对学习生活的影响调查问卷自定义查 询 时间2016 年 2 月 12 调查背景 参考资料 调查方法问卷调查 开始时间2016-2-11 结束时间2016-2-12 样本总数92 份 本报告分析内容 自定义查询 本报告样本筛选...
  • 本人不是大神,偶然的看到小猿搜题,看到拍照功能很酷,所以自己就查找一些资料来自定义拍照功能,希望做这样类似功能的人能帮到你一点点,觉得不好的话请勿喷,就忽视掉就可以了,如果能帮到你,那么我很庆幸。...
  • 用python的OCR实现自动拍照搜题

    千次阅读 2018-04-25 13:51:52
    最近两天因为要频繁刷一个题库,然后囿于时间的限制并且是在app里面做的练习,所以不能一边答案一边答题。这样的话凭本事做的话命中率一定会比较低。。。。。急中生智想了一个偷懒的方法。 1. 用电脑的模拟器打开...
  • 教育学习
  • 电信设备-拍照搜题的题目输入方法、装置、移动终端及存储介质.zip
  • 一个可以上传题目到题库,关键词识别,聊天。积分,评论功能的搜题微信小程序
  • 聚焦在线教育行业的拍照搜题场景,介绍如何应用开放搜索来构建更高搜索性能及搜题准确率的搜题系统,从而助力在线教育行业客户掌握更高层次用户体验的获客工具。 在线教育拍照搜题解决方案>> 可获得专家咨询...
  • 模仿作业帮、猿题库等含有搜题功能的app,自定义相机,图片识别技术的实现,超级简单
  • 拍照怎么搜题?(上)

    万次阅读 多人点赞 2016-04-06 23:37:07
    前一段时间几个拍照搜题的软件挺流行(比如:小猿搜题、作业帮、学霸君等),手机拍张照片,就能把考题的答案搜出来,完全不用去百度手敲。 出于程序员那种职业的好奇心,老王用了两周的时间做了一个简单的研究并写...
  • 举个例子来说,“拍照搜题”就是其中的王牌杀手锏功能之一。 所以,科学合理地利用AI,无论是语文、数学、外语还是物理、化学,家长们再也不用担心中小学题目越来越难。 毕竟,我们家长面对教育问题,很多人是的...
  • 拍照怎么搜题?(下)

    万次阅读 2016-04-12 22:41:04
    最近流行的拍照搜题软件是怎么样实现的呢?老王带你一步步揭开面纱~
  • QQ浏览噐在最近推出了拍照的服务,有不少感兴趣的用户想知道应该怎么使用该功能。那么下面小编就为大家介绍了QQ浏览器拍照的方法,希望对你有所帮助。 QQ浏览器拍照的步骤: 1、现在进入了QQ浏览噐页面...
  • 现在是网络时代,学生们的学习也紧跟时代的步伐,当遇到不会做的题目时,只要打开拍照搜题软件,拍一下即可得到题目的解答步骤,帮助学生更好的学习,是不是就很棒呢?下面就给大家分享一些可以搜题查题的软件及...
  • 这是我新搭建的成品搜题公众号: 下面带大家搭建搜题公众号 搭建教程非常简单,按照我的步骤是没问题! 首先我们需要的材料: 1.有自己的微信公众号(已经注册好的,直接登录自己公众号即可) 注册公众号教程: 点我...
  • 拍照怎么搜题?(下) 原文地址:http://mp.weixin.qq.com/s?__biz=MzA3MDExNzcyNA==&mid=2650391990&idx=1&sn=a6f4607867441c60b00730afe53325a7#rd 2016-04-12简单的老王SimpleMain /* *上一...
  • 现在是网络时代,学生们的学习也紧跟时代的步伐,当遇到不会做的题目时,只要打开拍照搜题软件,拍一下即可得到题目的解答步骤,帮助学生更好的学习,是不是就很棒呢?下面就给大家分享一些可以搜题查题的软件及...
  • 搜索专题

    2018-06-10 22:04:19
    搜索问题,各种搜索问题的算法分析以及思路引导,以及剪枝
  • 拍照怎么搜题(下)

    2016-07-08 11:06:46
    大家一看这种问题,基本就可以条件反射的判定:回答是否定的(就跟读书那会儿做判断一样 ^_^ )。那问题出在哪儿呢?   有些图案做了归一化以后,就失真了,比如逗号 [,] 和引号 [’] ,去掉周围的...
  • 在考复习阶段有没有专门搜安全员考试题目的搜题软件呢?给大家分享一款考试搜题找答案,找历年真题的小程序,并附上考试真题助考。 题库来源:公众号【百分百题库】提供建筑施工八大员之安全员考试试题、建筑施工八...
  • 近日,因为一道小学四年级数学,杭州一对父母直接吵翻了,在网络上引起了热议。甲、乙两辆汽车同时分别从A、B两地相对开出,第一次在离A站90千米处相遇,相遇后两车继续以原速前进,到达目的地后又立即返回,...
  • 拍照APP搜题 中学数学

    2018-03-06 11:18:35
    APP数学学科,如何实现拍照搜题? ——猿题库,学霸君,学习宝,作业帮 据说需要具备 OCR识别经验 + 数学表达符号的存储和检索技术? CSDN找到个别文章介绍和技术高手的分享理论、思路,但不确定开发效果...
  • 今天给大家带来搜题公众号搭建教程(附赠搜题接口 还支持语音搜题) 下面带大家搭建搜题公众号 首先我们需要的材料: 1.有自己的微信公众号(已经注册好的,直接登录自己公众号即可) 注册公众号教程: 点击进入 ...
  • 网课搜题浮窗软件实战开发一个浮窗式的安卓搜题软件 准备知识:javascript auto.js一些基础语法 打包工具:auto.js7.401 免费接口可以自己去找!网上一大堆。 学习资料领取及工具可点击领取学习工具 效果图如图所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,383
精华内容 953
关键字:

拍照搜题