4

というわけで、最終的にはGoogleにOCRさせたい画像をアップロードしようとしています。次に、OCR の結果を Android アプリに戻せるようにしたいと考えています。画像を適切にアップロードしています。Google ドライブ内のすべてのファイルをループすることができ、利用可能なエクスポート リンクがあることがわかります。そのうちの 1 つは "text/plain" です。ブラウザでこれらの URL のいずれかを使用すると、テキストがダウンロードされます。これは私がそれにアクセスしようとするべき方法ですか?

insert メソッドによって返されたファイルで getExportLinks メソッドを呼び出して取得した URL を使用しようとしました

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

最終的に、Google ドライブのホームページのように見える HTML が返されます。エクスポートされた URL ドキュメントを取得するために、Google ドライブ インスタンスを使用したので、挿入メソッドのように適切に認証されているはずです。

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

誰もこれをやろうとしたことがありますか?私は何を間違っていますか?

4

1 に答える 1

3

さて、私は自分の質問にもう一度答えました。基本的に、これはWeb URLであり、私が実行できるAPI呼び出しではないように思われるため、認証されていない場合は401で応答しません。つまり、基本的に私が得た応答は、ログインページのHTMLです。どうやら、DriveRequestを使用しても、私が思っていたように認証が自動的に処理されないようです。したがって、HttpClientGET呼び出しに認証を手動で追加することで機能します。

しかし、実際の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);
于 2012-09-18T17:32:40.520 に答える