所以最终我试图上传我想要Google的图像到OCR。然后我希望能够将OCR的结果恢复到我的Android应用程序。我正确上传了我的图片。我可以遍历我的谷歌硬盘中的所有文件,我看到有可用的导出链接,其中一个是" text / plain"。如果我在浏览器中使用其中一个网址,则会下载文本。这是我应该尝试访问它的方式吗?
我尝试使用我在插入方法返回的文件上调用getExportLinks方法获得的url
File file = drive.files().insert(body, mediaContent).setOcr(true).execute();
String imageAsTextUrl = getExportLinks.get("text/plain")
我最终得到的HTML似乎是Google云端硬盘主页。为了获取导出的url文档,我使用了google驱动器实例,因此它应该像我认为的插入方法一样经过适当的身份验证。
DriveRequest request = new DriveRequest(drive, HttpMethod.GET, imageAsTextUrl, null);
以前有人试过这样做吗?我究竟做错了什么?
答案 0 :(得分:3)
我又回答了自己的问题。基本上,因为这似乎是一个网址,而不是我可以进行的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);