V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
soooulp
V2EX  ›  问与答

油猴 JavaScript 脚本如何调用百度 OCR 接口获取 access_token?

  •  
  •   soooulp · 2021-05-28 10:37:46 +08:00 · 766 次点击
    这是一个创建于 1310 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过 toDataURL,将图片转化为 base64,结果为 dataUrl,去掉编码头 data:image/jpeg;base64, 进行 urlencode,然后使用 GM_xmlhttpRequest 进行 https 请求,提示 json 未定义,如何获取 access_token,以及如何输出最后识别的文字结果?

    https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

    toDataURL(
                    'https://i.imgur.com/GniA3wQ.png',
                    function(dataUrl) {
                        const base64Data = dataUrl.split(';base64,')[1];
                        var API_Key="xxxxxxxxxxxxxxxxxxxxxxxx";
                        var Secret_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                        //access_token 获取地址。
                        var getTokenUrl="https://aip.baidubce.com/oauth/2.0/token";
                        var token_Res = GM_xmlhttpRequest({
                            method: "POST",
                            url: getTokenUrl,
                            grant_type: "client_credentials",
                            client_id: API_Key,
                            client_secret: Secret_Key,
                            onload: function(response){
                                console.log("请求成功");
                                console.log(response.responseText);
                            },
                            onerror: function(response){
                                console.log("请求失败");
                            }
                        });
                        var access_token = token_Res.body.json().access_token;//提示 json 未定义
    
                        //通用文字识别,50000 次 /天免费
                        var ocrUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic";
                        var ocr_Res = GM_xmlhttpRequest({
                            method: "POST",
                            headers: {
                                "Content-Type": "application/x-www-form-urlencoded"
                            },
                            access_token: access_token,
                            image: "image64=" + encodeURIComponent (base64Data),
                            language_type:"CHN_ENG",
                            //data: dataUrl,
                            onload: function(response){
                                console.log("请求成功");
                                console.log(response.responseText);
                            },
                            onerror: function(response){
                                console.log("请求失败");
                            }
                        });
                        var json = ocr_Res.body.json();
                        console.log(json);
                    }
    

    img 转化 base64

    function toDataURL(src, callback, outputFormat) {
            var img = new Image();
            //img.crossOrigin = 'Anonymous';
            img.crossOrigin = "";
            img.onload = function() {
                var canvas = document.createElement('CANVAS');
                var ctx = canvas.getContext('2d');
                var dataURL;
                canvas.height = this.naturalHeight;
                canvas.width = this.naturalWidth;
                ctx.drawImage(this, 0, 0);
                dataURL = canvas.toDataURL(outputFormat);
                callback(dataURL);
            };
            img.src = src;
            if (img.complete || img.complete === undefined) {
                img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
                img.src = src;
            }
    
        }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:37 · PVG 10:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.