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

2021-05-28 10:37:46 +08:00
 soooulp

通过 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;
        }

    }
615 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX