精华内容
下载资源
问答
  • 拍照搜题功能
    千次阅读
    2019-10-25 10:23:24

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

    主要分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和答案给用户

    更多相关内容
  • 模仿作业帮、小猿题库搜题功能(包含图片文字识别) 参考:https://blog.csdn.net/android_xue/article/details/78962637 搜题数据参考小韭搜题:http://www.xiaojo.com
  • 分11步处理 自定义相机扫描框实时扫描试卷二维码功能 扫描二维码获取当前试卷信息 自定义相机按试卷比例绘制裁剪框 OpenCv对用户拍照图片进行矫正 ...图片上传服务器进行识别搜题 服务器返回各题识别结果和当前小图的.

    周末来一发,结个尾

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

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

    最后实现效果如下

    在这里插入图片描述

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

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

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

            近期接到的项目中有一个功能——手机拍照搜索试题。首先进行分析,客户端调用ocr接口识别照片中的文字,服务端拿到文字去题库进行搜索。对后端开发的我来说,问题就变为如何根据关键词搜索匹配度较高的题目。一个全新的问题,之前没有接触过,此时内心有些崩溃,不知道能不能实现,而且要给出开发工期,要怎么办?姑且先给5天吧,如果调研失败,我有最后的保留方案——用mysql全文索引实现(在类似需求中应用过,有局限性,不是根据语义分析而是根据标点拆分文章,看句子是否在题目中出现过)。

           调研开始发现百度App有拍照搜题的功能,既然人家能实现,说明这个问题是有解的,进一步增强了自己的信心。

           后来发现很多关于simHash的文章,其中一篇:simhash算法原理及实现。用简单的话解释一下simhash:这个算法可以把任何文章都哈希成一个64位的二进制码,语义越相近的文章,获得的二进制码的汉明距离越小。如果感兴趣,大家可以深入研究一下。

          基于这个理论,经过大量尝试(其中不乏开源代码,在此非常感谢),终于完成了下面的类。simhash第一步首先要分词,故这个类用到了php的scws这个拓展。

    如果想要了解scws怎样安装,点这

    <?php
    class Glo_Simhash {
        /**
         * 全角字符转变成半角字符
         * @param $str
         * @return mixed
         */
    
        function replace_DBC2SBC($str) {
            $DBC = Array(
                '0' , '1' , '2' , '3' , '4' ,
                '5' , '6' , '7' , '8' , '9' ,
                'A' , 'B' , 'C' , 'D' , 'E' ,
                'F' , 'G' , 'H' , 'I' , 'J' ,
                'K' , 'L' , 'M' , 'N' , 'O' ,
                'P' , 'Q' , 'R' , 'S' , 'T' ,
                'U' , 'V' , 'W' , 'X' , 'Y' ,
                'Z' , 'a' , 'b' , 'c' , 'd' ,
                'e' , 'f' , 'g' , 'h' , 'i' ,
                'j' , 'k' , 'l' , 'm' , 'n' ,
                'o' , 'p' , 'q' , 'r' , 's' ,
                't' , 'u' , 'v' , 'w' , 'x' ,
                'y' , 'z' , '-' , ' ' , ':' ,
                '。' , ',' , '/' , '%' , '#' ,
                '!' , '@' , '&' , '(' , ')' ,
                '<' , '>' , '"' , ''' , '?' ,
                '[' , ']' , '{' , '}' , '\' ,
                '|' , '+' , '=' , '_' , '^' ,
                '¥' , ' ̄' , '`' , '“' , '”',
                ';' , '·'
            );
            $SBC = Array(
                '0', '1', '2', '3', '4',
                '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E',
                'F', 'G', 'H', 'I', 'J',
                'K', 'L', 'M', 'N', 'O',
                'P', 'Q', 'R', 'S', 'T',
                'U', 'V', 'W', 'X', 'Y',
                'Z', 'a', 'b', 'c', 'd',
                'e', 'f', 'g', 'h', 'i',
                'j', 'k', 'l', 'm', 'n',
                'o', 'p', 'q', 'r', 's',
                't', 'u', 'v', 'w', 'x',
                'y', 'z', '-', ' ', ':',
                '.', ',', '/', '%', '#',
                '!', '@', '&', '(', ')',
                '<', '>', '"', '\'','?',
                '[', ']', '{', '}', '\\',
                '|', '+', '=', '_', '^',
                '$', '~', '`', '"', '"',
                ';', '.'
            );
            return str_replace($DBC, $SBC, $str);
        }
    
        function hashCode($str) {
            if(empty($str)) return '';
                $mdv = md5($str);
                $mdv1 = substr($mdv,0,16);
                $mdv2 = substr($mdv,16,16);
                $crc1 = abs(crc32($mdv1));
                $crc2 = abs(crc32($mdv2));
                $code =  decbin(bcmul($crc1,$crc2));
                $code = str_repeat('0',64 - strlen($code)).$code;
            return $code;
        }
    
        function hashCode64($str) {
            $len = 8;
            $md5 = substr(md5($str), 0, $len);
            $seed = 31; 
            $hash = 0;
            for($i = 0; $i < $len; $i++) {  
                $hash = $hash*$seed+ord($md5{$i});
            }
            $hash = $hash & 0x7FFFFFFF;
            $hash = decbin(bcmul($hash,$hash));
    
            $hash = str_repeat('0',64 - strlen($hash)).$hash;
            return $hash;
        }
        
        //采用scws分词
        function getSimHash($text){
            $so = scws_new();
            $so->set_charset('utf8'); //编码
            $so->set_duality(0);  //散字二元
            $so->set_ignore(0); //忽略标点符号
            $so->set_multi(0);
            $str = $this->replace_DBC2SBC($text);
            //过滤字符
            $filter = [',','.','-','_','`','、','"',"'",":",';','<','>','{','}','(',')'];
            $so->send_text($str);
            $keyList = array();
            while($words = $so->get_result())
            {
                foreach($words as $word){
                    $s = $word['word'];
                    $weight = intval($word['idf'])*20;
                    if(!in_array($s,$filter)  && $weight){
                        $hash = array();
                        $hash_code = $this->hashCode64($s);
                        for($i=0;$i<64;$i++){
                            $value = intval(substr($hash_code,$i,1));
                            if($value==1){
                                $hash[] = $weight;
                            }else{
                                $hash[] = -$weight;
                            }
                        }
    
                        $keyList[] = $hash;
                    }
                }
            }
            $finCode = '';
            for($i=0;$i<64;$i++) {
               $code = 0;
               if(empty($keyList)) {
                    break;
               }
               foreach($keyList as $key) { 
                    $code+=intval($key[$i]);
               }
               if($code>0) {
                    $finCode .= '1';
               } else {
                    $finCode .= '0';
               }
            }
            return $finCode;
        }
    }
    
    

    创建倒排索引数据表

    CREATE TABLE `simhash_syintelligence` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `hashcode16` char(16) NOT NULL DEFAULT '' COMMENT '16位2进制hash',
      `dp` text NOT NULL  COMMENT '倒排字段 内容:(题目id:hashcode位置;题目id:hashcode位置)',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

    接下来,如何实现就非常明了了。现将接收到的关键词做一次simHash,然后将值分隔成4段,去表中分4次查询,找到位置对应的题目id即可。

    以上是猜想,基于ocr准确识别的情况,但联调时发现,照片识别不是很准确,经常出现类似“问”识别为“间”的情况。simHash是基于语义分析的,我上面的方案必须保证分割的4块中其中一块完全相同,错一字,汉明距离就变大好多,导致可能匹配不到。还有一种情况是,会返回毫不相关的文章,因为这样做返回文章的汉明距离为0-48,于是又改变了策略,调整表的设计:

    CREATE TABLE `simhash_syintelligence` (
      `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
      `ques_id` INT(10) NOT NULL DEFAULT '0' COMMENT '题目id',
      `hashcode64` CHAR(64) NOT NULL DEFAULT '' COMMENT '64位2进制hash',
      PRIMARY KEY (`id`),
      KEY `hashcode64` (`hashcode64`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

    将题目内容完整hash记录下来,不再做切割。拿到关键词,先做一次simHash,然后轮询表,两两比较汉明距离,如果汉明距离小于某个特定值,则将题目返回回来。

     

    算是一种思路,但是实际应用中发现哈希碰撞的概率挺高的,搜索一段英文,完全没有联系的中文被搜出来的,效果不太理性;

    可以换成es全文搜索引擎做

    展开全文
  • 今天一起体验作业帮“拍照搜题功能,从实际产品使用流程中切实感受AI技术 如何为教育创造更多可能~ 作业帮是一款以“拍照搜题”为核心功能的在线教育产品,该功能的实现主要运用了OCR和深度学习技术,故本文围绕...

    今天一起体验作业帮“拍照搜题”功能,从实际产品使用流程中切实感受AI技术 如何为教育创造更多可能~

      作业帮是一款以“拍照搜题”为核心功能的在线教育产品,该功能的实现主要运用了OCR和深度学习技术,故本文围绕该项功能的体验,结合简要的技术分析,领略作业帮化身“AI小叮当”的魅力,话不多说,开始本期的旅程吧~

     

    可见,作业帮的主要用户可分为学生、家长及老师,其中以学生群体为主。 

      我们可以很清楚地看到,作业帮作为一个K12阶段相对成功的在线教育产品,依托于人工智能技术的发展,为广大的学生、家长和老师带来了便利。

     

    #而对于家长而言,作业帮的拍照搜题帮助他们缓解了自身文化程度不高无法辅导孩子的无力感,同时帮助工作忙的家长节省了时间,也替经济条件有限的家长省了钱。

    #而对教师用户而言,作业帮也为他们价值和利益最大化提供了一个平台。

    #对作业帮而言,拍照搜题的提出,是迎合AI时代对教育的一种创新,同时为计算机视觉技术的落地提供了良好的落地契机,为传统教育的改革带来了新的方向。

        算法、技术可以有千千万万种,用户可能遍布天涯海角,但作为一个产品,尤其是工具类的产品,如果本身核心功能不够出众,或在后续的完善中偏离了核心功能轨道,只有死路一条。而从人工智能发展的角度来看,算法准确率的提升和优化是一个不均衡的过程。

    比如,起步的时候,可能随便加大训练数据数量或者是调整学习参数或训练的方式,算法提升的效果就很明显,因为说到底,所谓的人工智能,还是利用了计算机超强的存储及快速暴力求解的能力。

    但随着不断地推进,面对的数据越来越复杂、用户场景越来越多、需求越来越丰富,算法还想提升,哪怕那么一个百分点,都是十分困难的,这也是所有人工智能类产品在迭代进程中都会面临的问题。

    但是我们从作业帮拍照搜题的识别越来越准确,用户体验也越来越好,可以看到作业帮一直在坚持后台算法的迭代和优化,这种对初衷的坚持是算法之外更可贵的产品精神。

     

    从中可见,在拍照的过程中,做出了两个比较明显的限制。

    第一个是横屏拍照,保持题目处于图片的特定区域,其目的在于减少后续识别算法处理的难度。其次是对拍摄灯光的要求,因为当光线较暗时,图片不够清晰,则后期的文字识别会出问题,不利于最终的识别准确率。

    这是用户体验和算法准确性之间的一种权衡,更人性化的产品设计提倡,尽量减少对用户的要求,增加用户使用的自由性。

    然而对于人工智能算法类的产品设计而言,其准确率的获得往往需基于一定的前提,一旦打破这些限制,算法识别的效果可能就会十分差劲,则会带给用户更糟糕的影响。

    因此,这可能是因为系统基于OCR和深度学习的方法,主要对文字切割进行处理,但是对图像特征的处理比较欠缺,所以检索效果较差。

    则上述问题的解决,可通过多种技术方案融合,应对不同用户场景需求的特定任务处理,增强算法应用的鲁棒性,减少算法失灵的情况,这应当也是未来人工智能产品落地的一个重要关注点。

    最后,还有一个小问题,有时拍摄上传数学类的题目,返回的结果中可能还包含物理、化学、英语等结果,我们将这类错误姑且称之为跨学科错误

    这也是可以理解的,因为算法更关注于对拍摄题目的文字识别,并在之后以文字特征的相近性作为主要指标,进行搜索结果返回。如此,只要题目描述和题库文本更相似就会作为结果返回,却忽略题目类别的考虑。

    关于这个问题的解决,或许可以考虑,在识别的过程中,增加类别标签,如拍摄题目上传之后,可以通过用户设定题目类标签。比如:属于语文、数学、英语等,则上传之后在特定的范围检索,这一方面可以提高算法检索的效率,另一方面也可以减少跨学科返回的错误。

    改进算法,实现对书面与手写体的精准识别也显得至关重要。

    展开全文
  • 与竞品相比,Flyme 6拍照搜题功能特点突出,优势明显。 特点一:轻。「拍照搜题」的应用场景非常广泛,比如说作业不会焦头烂额时,考前复习或平时预习时,或者是给熊孩子辅导作业时。 特点二:快。「拍照搜题」不用...
  • OCR拍照搜题

    千次阅读 2020-12-30 06:12:13
    OCR拍照搜题简介HI,您好,欢迎使用学而思网校AI开放平台OCR拍照搜题接口服务。本文档主要针对需要集成HTTP API的技术研发工程师,详细描述OCR拍照搜题能力相关的技术内容。您可以通过接口能力接口名称接口能力简要...
  • 1、现在进入了QQ浏览噐页面后,要是想使用拍照题功能的话,用户需要下拉首页进入“识你所见”界面进行操作设置。 QQ浏览噐怎么拍照识题 QQ浏览器拍照识题教程介绍说明 2、接下来从“识你所见”的页面里选择“题目...
  • 模仿作业帮、猿题库等含有搜题功能的app,自定义相机,图片识别技术的实现,超级简单
  • 模仿作业帮、猿题库搜题功能(包含图片文字识别)

    万次阅读 热门讨论 2018-01-03 17:54:23
    项目中需要一个图片识别功能,于是在网上了一波,没有想到操作尽然如此的简单。 app展示: 这里对于详细的知识还没有深入研究,目前只是知道实现的流程而已,下面是应用到的所有资料 ...
  • 「快捷搜题」软件是一款搜题工具类APP,支持拍照搜题,文字搜题,小工具箱类功能。「主打悬浮窗扫题功能」,通过无障碍与悬浮窗实现扫题功能,可扫描当前界面控件文字,提供列表选择实现快速搜索题目功能。提高答题...
  • 于是便为大家准备了这样一篇**《大学免费搜题终极攻略》**???? ▍中小学搜题App 虽然这篇主要内容是想写如何解决大学搜题,但还是提一嘴中小学的???? 于是便为大家准备了这样一篇**《大学免费搜题终极攻略》** ▍1 ...
  • 用python的OCR实现自动拍照搜题--源码

    千次阅读 2019-04-04 09:58:35
    自动拍照搜题源码 说明: 因为有很多人要源码,所以还是贴一下好了 很久之前的一个小demo就是搞着玩玩的没什么技术含量,马上要毕业去工作了,现在也不想在动了。 虽然是叫“自动拍照搜题”,但是当时写的时候还是...
  • 用python的OCR实现自动拍照搜题

    千次阅读 2018-04-25 13:51:52
    最近两天因为要频繁刷一个题库,然后囿于时间的限制并且是在app里面做的练习,所以不能一边答案一边答题。这样的话凭本事做的话命中率一定会比较低。。。。。急中生智想了一个偷懒的方法。 1. 用电脑的模拟器打开...
  • 本人不是大神,偶然的看到小猿搜题,看到拍照功能很酷,所以自己就查找一些资料来自定义拍照功能,希望做这样类似功能的人能帮到你一点点,觉得不好的话请勿喷,就忽视掉就可以了,如果能帮到你,那么我很庆幸。...
  • Tags: 学习 教育C语言搜题神器是一款手机端在线学习平台,可以帮助用户提供海量技术题库外,还涵盖了求职面试经验和技术干货为你提供,让你C语言随时学习无忧。同时除去以上学习内容外,还可支持刷题和编辑器智能...
  • 悬浮窗搜题app别看它的体积这么小但是悬浮窗搜题神器功能特别强大。悬浮窗搜题与一般的搜索软件最大不同就是能够悬浮于手机桌面上!软件介绍悬浮窗搜题app是一款可以有效提升大家学习效率的软件,简单搜索模式让你...
  • 现在是网络时代,学生们的学习也紧跟时代的步伐,当遇到不会做的题目时,只要打开拍照搜题软件,拍一下即可得到题目的解答步骤,帮助学生更好的学习,是不是就很棒呢?下面就给大家分享一些可以搜题查题的软件及...
  • 查题系统API无限搜题接口搭建
  • 答题的时候想,要是能百度搜题就好了!然而,读题-输入关键词-百度搜索-判断搜索结果-选择答案,这个流程下来,复活卡都没得用就出局了,原因很简单——超时!如果我告诉你,有段python代码可以在2秒内把对直播题目...
  • 大学c语音搜题app

    万次阅读 2021-05-19 16:30:59
    大学c语音搜题app是一款为C语言学习的用户们带来搜题服务的软件,C语言可以说是计算机...大学c语音搜题app软件功能:1、主要是针对大学生们打造的,为大家的C语言学习提供方便;2、虽然这款软件对应的是c语音教学,...
  • 1,优化了查速度 2,题库更全,且无广告免费使用 3,接口题库测试过有学习通知到等各大平台的题库 4,接口使用的二开接口无法第二次获取题库爬者绕路进行
  • 搜题用哪个软件好?

    千次阅读 2020-12-05 08:45:41
    目前比较好用的有作业帮、小猿搜题、学霸君、阿凡提搜题等app,最近好未来(原学而思)推出了一款可以免费获得人工答疑的app,叫晓搜题app。上周,好未来(原学而思)推出了一款叫晓搜题搜题app,目前已经面向用户开放...
  • 从全然不知到融会贯通——对小猿搜题手机APP的教学设计分析首页基于OCR技术的拍照搜题功能基于语音识别的古诗文辅助背诵功能基于人工智能和手写文字识别的英语作文自动批改功能作业互助功能积分系统VIP智能家庭教师...
  • 为什么要用小程序 1、不用安装,即开即用,节省流量,节约安装时间,而且不占用桌面; 2、功能上更为集中、单一,降低用户的使用难度,...今天推荐的小程序叫“题多多”,是一款针对考证考试人群的智能免费搜题小...
  • 这是我新搭建的成品搜题公众号: 下面带大家搭建搜题公众号 搭建教程非常简单,按照我的步骤是没问题! 首先我们需要的材料: 1.有自己的微信公众号(已经注册好的,直接登录自己公众号即可) 注册公众号教程: 点我...
  • 如果每10千米耗油1升,一共耗油 调节机体生理功能的两大信息传递系统是______。 A.第一信号系统和第二信号系统 B.第一信使和第二信使 C.c 学校原有足球和篮球共36个,其中足球与篮球个数的比是7:2,又买进一些...
  • 举个例子来说,“拍照搜题”就是其中的王牌杀手锏功能之一。 所以,科学合理地利用AI,无论是语文、数学、外语还是物理、化学,家长们再也不用担心中小学题目越来越难。 毕竟,我们家长面对教育问题,很多人是的...

空空如也

空空如也

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

拍照搜题功能