GOOGLE DRIVE SDK Android アプリには、さらに別のハードルがあります。厳密に制御されたインデックス フィールド (ローカル辞書からのユーザー定義の「タグ」) を使用して、スキャンした画像をアップロードしています。たとえば、XXX.JPG には "car" + "insurance" というインデックス ワードがあります。簡略化されたコード スニペットを次に示します。
...
body.setTitle("XXX.JPG");
body.setDescription("car, insurance");
body.setIndexableText(new IndexableText().setText("car insurance"));
body.setMimeType("image/jpeg");
body.setParents(Arrays.asList(new ParentReference().setId(...)));
FileContent cont = new FileContent("image/jpeg", new java.io.File(fullPath("xxx.jpg")));
File gooFl = _svc.files().insert(body, cont).execute();
...
繰り返しますが、検索を開始するときを除いて、すべてがうまく機能します。OCR ポスト プロセスからの結果と思われる結果が得られるため、システムの DICTIONARY が使用できなくなります。カスタム MIME タイプを使用できると思いますが、標準の GOOGLE DRIVE アプリケーション (ローカル、ブラウザベース ...) を使用するユーザーには JPEG 画像が見えなくなります。質問は、カスタム インデックス (Indexable または Description フィールドのいずれか) を含む MIME "image/jpeg" ファイルをアップロードすることはできますか?
より具体的に言うと、「自動車保険」を検索すると、この方法でインデックスを作成した 3 つのファイルの代わりに、「自動車」と「保険」が含まれる他の結果 (JPEG スキャン ドキュメント) が手に負えなくなります。私のアプリが望んでいるものではありません。
以下のBurcuのアドバイスに基づいて、コードを次のように変更しました(必要最小限に取り除いたもの)。
// define meta-data
File body = new File();
body.setTitle("xxx.jpg");
body.setDescription(tags);
body.setIndexableText(new IndexableText().setText(tags));
body.setMimeType("image/jpeg");
body.setParents(Arrays.asList(new ParentReference().setId(_ymID)));
body.setModifiedDate(DateTime.parseRfc3339(ymdGOO));
FileContent cont =
new FileContent("image/jpeg",new java.io.File(fullPath("xxx.jpg")));
String sID = findOnGOO(driveSvc, body.getTitle());
// file not found on gooDrive, upload and fix the date
if (sID == null) {
driveSvc.files().insert(body, cont).setOcr(false).execute();
driveSvc.files().patch(gooFl.getId(), body).setOcr(false).setSetModifiedDate(true).execute();
// file found on gooDrive - modify metadata and/or body
} else {
// modify content + metadata
if (contentModified) {
driveSvc.files().update(sID, body, cont).setOcr(false).setSetModifiedDate(true).execute();
// only metadata (tags,...)
} else {
driveSvc.files().patch(sID, body).setOcr(false).setSetModifiedDate(true).execute();
}
}
...
Google ドライブのファイルをアップロードまたは変更するブロックです。2 つの非標準操作は次のとおりです
。1/ ファイルの作成日を強制するためにファイルの「変更」日付をリセットする - テスト済み、問題なく動作
する 2/ アプリのインデックス作成スキームに干渉する OCR プロセスを停止する - まもなくテストして更新するここ
簡単にするために、「findInGOO()」メソッドの実装は含めませんでした。これは非常にシンプルな 2 ライナーで、リクエストに応じて提供できます。
ショーン