【问题标题】:Google Drive SDK - Uploading Image, OCR, Download ResultGoogle Drive SDK - 上传图片、OCR、下载结果
【发布时间】:2012-09-10 23:20:06
【问题描述】:

所以最终我会尝试上传我希望 Google 进行 OCR 的图像。然后我希望能够将 OCR 的结果返回到我的 Android 应用程序。我的图片已正确上传。我可以遍历我的谷歌驱动器中的所有文件,我看到有可用的导出链接,其中之一是“文本/纯文本”。如果我在浏览器中使用这些 url 之一,它会下载文本。这是我应该尝试访问它的方式吗?

我尝试使用通过对 insert 方法返回的文件调用 getExportLinks 方法获得的 url

File file = drive.files().insert(body, mediaContent).setOcr(true).execute();
String imageAsTextUrl = getExportLinks.get("text/plain") 

我最终得到了似乎是 Google Drive 主页的 HTML。为了获取导出的 url 文档,我使用了 google drive 实例,因此它应该像我认为的插入方法一样正确地进行了身份验证。

DriveRequest request = new DriveRequest(drive, HttpMethod.GET, imageAsTextUrl, null);

以前有没有人尝试过这样做?我究竟做错了什么?

【问题讨论】:

    标签: android google-drive-api ocr


    【解决方案1】:

    好吧,我又一次回答了我自己的问题。基本上,因为这似乎是一个 web url 而不是我可以进行的 API 调用,所以如果它未经身份验证,它就不会以 401 响应。所以基本上我得到的响应是登录页面的 HTML。显然使用 DriveRequest 不会像我想象的那样自动处理身份验证。因此,我通过手动将身份验证添加到 HttpClient GET 调用来使其工作。

    但是有没有办法用实际的 API 来做我想做的事情?所以我可以处理响应代码?

    这是我下载文件的文本/纯文本表示的方法。这里有一个警告:鉴于我上传的图像是使用默认相机应用在手机相机上拍摄的,默认 dpi 和/或 jpeg 压缩导致 OCR 无法正常工作。无论如何,这是我使用的代码。只是基本的 HttpClient 东西

                    String imageAsTextUrl = file.getExportLinks().get("text/plain");
    
                    HttpClient client = new DefaultHttpClient();
                    HttpGet get = new HttpGet(imageAsTextUrl);
                    get.setHeader("Authorization", "Bearer " + token);
                    HttpResponse response = client.execute(get);
    
                    StringBuffer sb = new StringBuffer();
    
                    BufferedReader in = null;
                    try {
                        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        String str;
                        while ((str = in.readLine()) != null) {
                            sb.append(str);
                        }
                    }
                    finally {
                        if (in != null) {
                            in.close();
                        }
                    }
    
                    // Send data to new Intent to display: 
                    Intent intent = new Intent(UploadImageService.this, VerifyTextActivity.class);
                    intent.putExtra("ocrText", sb.toString());
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
    

    【讨论】:

    • 您是否尝试过类似的方法: response = drive.getRequestFactory().buildGetRequest(new GenericUrl(file.getExportLinks.get("text/plain")).execute();
    • @Kevin 您能否编辑您的答案以包含您用于下载的代码?我的项目比计划晚了几个星期,因为我无法从 Google Drive 下载工作。我很高兴看到任何可行的“解决方法”,因为目前似乎没有使用官方 API 的方法。
    • 我还没有尝试过 David,我会在我回到项目时试一试。这是副业。
    • @ArtOfWarfare 我添加了我使用的代码。希望有帮助。这只是基本的 httpclient 东西,oauth 令牌卡在授权标头中
    • @KevinM 我现在将它插入到我自己的代码中,它似乎正在工作:)。谢谢!这些 401 错误让我的项目卡住了好几个星期。 (我什至设置了 100 分的赏金……它过期了,没有人回答。我希望我现在可以奖励你赏金,但我已经没有足够的积分了……)
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多