14

Ich habe gerade Einrichtung der quickstart Google Drive sdk Anwendung für Android verfügbar auf this LinkGoogle Drive SDK für OCR

ich Bilder hochzuladen versuchen, und führen Sie dann OCR auf sich. Die Beispielanwendung im Android quickstart funktioniert gut, aber wenn ich versuche, die boolean für OCR als wahr ich folgendes IOException erhalten zu setzen:

07-29 03:33:01.172: D/OCR_SERVICE(22602): Error 2: 400 Bad Request 
07-29 03:33:01.172: D/OCR_SERVICE(22602): { 
07-29 03:33:01.172: D/OCR_SERVICE(22602): "code": 400, 
07-29 03:33:01.172: D/OCR_SERVICE(22602): "errors": [ 
07-29 03:33:01.172: D/OCR_SERVICE(22602):  { 
07-29 03:33:01.172: D/OCR_SERVICE(22602):  "domain": "global", 
07-29 03:33:01.172: D/OCR_SERVICE(22602):  "message": "Bad Request", 
07-29 03:33:01.172: D/OCR_SERVICE(22602):  "reason": "badRequest" 
07-29 03:33:01.172: D/OCR_SERVICE(22602):  } 
07-29 03:33:01.172: D/OCR_SERVICE(22602): ], 
07-29 03:33:01.172: D/OCR_SERVICE(22602): "message": "Bad Request" 
07-29 03:33:01.172: D/OCR_SERVICE(22602): } 

Das Interessante ist, konnte ich die OCR etwa 2-mal tun und danach könnte ich die Quelle oder etwas verändert haben und jetzt funktioniert es nicht. Aber ich erinnere mich die einzige Veränderung, musste ich von der quickstart app machen veränderte diese Zeile: File file = service.files().insert(body, mediaContent).execute(); auf die folgenden:

File file = service.files().insert(body, mediaContent).setOcr(true).execute(); 

Hier ist mein Code:

public class MainActivity extends Activity { 
    static final int REQUEST_ACCOUNT_PICKER = 1; 
    static final int REQUEST_AUTHORIZATION = 2; 
    static final int CAPTURE_IMAGE = 3; 

    private static Uri fileUri; 
    private static Drive service; 
    private GoogleAccountCredential credential; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE); 
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    switch (requestCode) { 
    case REQUEST_ACCOUNT_PICKER: 
     if (resultCode == RESULT_OK && data != null && data.getExtras() != null) { 
     String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
     if (accountName != null) { 
      credential.setSelectedAccountName(accountName); 
      service = getDriveService(credential); 
      startCameraIntent(); 
     } 
     } 
     break; 
    case REQUEST_AUTHORIZATION: 
     if (resultCode == Activity.RESULT_OK) { 
     saveFileToDrive(); 
     } else { 
     startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
     } 
     break; 
    case CAPTURE_IMAGE: 
     if (resultCode == Activity.RESULT_OK) { 
     saveFileToDrive(); 
     } 
    } 
    } 

    private void startCameraIntent() { 
    String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES).getPath(); 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date()); 
    fileUri = Uri.fromFile(new java.io.File(mediaStorageDir + java.io.File.separator + "IMG_" 
     + timeStamp + ".jpg")); 

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(cameraIntent, CAPTURE_IMAGE); 
    } 

    private void saveFileToDrive() { 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
     try { 
      // File's binary content 
      java.io.File fileContent = new java.io.File(fileUri.getPath()); 
      FileContent mediaContent = new FileContent("image/jpeg", fileContent); 

      // File's metadata. 
      File body = new File(); 
      body.setTitle(fileContent.getName()); 
      body.setMimeType("image/jpeg"); 

      File file = service.files().insert(body, mediaContent).setOcr(true).execute(); 
      if (file != null) { 
      showToast("Photo uploaded: " + file.getTitle()); 
      startCameraIntent(); 
      } 
     } catch (UserRecoverableAuthIOException e) { 
      Log.d("OCR_SERVICE", "Error 1: " + e.getMessage()); 
      startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); 
     } catch (IOException e) { 
      Log.d("OCR_SERVICE", "Error 2: " + e.getMessage()); 
      e.printStackTrace(); 
     } 
     } 
    }); 
    t.start(); 
    } 

    private Drive getDriveService(GoogleAccountCredential credential) { 
    return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential) 
     .build(); 
    } 

    public void showToast(final String toast) { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 
} 
+0

Es könnte ein beschädigter Image-Blob sein, der einen HTTP 400-Fehler empfängt. –

+0

Ich habe genau das gleiche Problem. Könnte es wegen des Mime-Typs sein? Da das Laufwerksdokument sowohl Bild als auch Text hätte? – AndroidDev93

+0

können Sie mit der Anwendung/vnd.google-apps.photo versuchen, wie in https://developers.google.com/drive/mime-types angegeben – nsL

Antwort

2

ich gerade fertig machen dieses Google Drive Quickstart Beispiel aus der Dokumentation arbeiten. Der Code ist veraltet und wurde erst gar nicht kompiliert. Sobald dies erfolgreich war, hatte ich einige andere Probleme, wenn ich die App auf einem Gerät ausführte.

Ich habe die Änderungen aufgeführt, die erforderlich sind, um diese Arbeit zu ermöglichen und an das folgende github-Projekt gebunden zu sein. Es ist ein Eclipse-ADT-Projekt, also schau einfach mal vorbei und vergleiche es mit deinem Code. Ich habe getestet mit der OCR-Option aktiviert und verifiziert das Ergebnis.

https://github.com/hanscappelle/more-android-examples/tree/master/DriveQuickstart

Die Readme-Datei hat einen Überblick über alle erforderlichen Änderungen vor.

Verwandte Themen