gpt4 book ai didi

java - 如何在没有 gcloud 的情况下用 Java 为 Google AutoML Vision API 生成访问 token ?

转载 作者:行者123 更新时间:2023-12-02 02:55:16 24 4
gpt4 key购买 nike

我正在制作一个将利用 Google AutoML Vision API 的 Android 应用程序。我正在寻找一种方法来获取永久访问 token 或在代码中生成它们,这样我就不需要每次想使用我的应用程序时都使用 gcloud。我该如何去做呢?

我已经创建了 AutoML 模型,设置了我的服务帐户,并在 Android Studio 中对我的应用程序进行了编码,以便它使用 Volley 向 API 发出请求。问题是,它们要求您使用 gcloud 生成并传递访问 token 。我可以生成 token 并将其放入我的代码中,但它只能持续一个小时,然后就会过期。 REST API 需要访问 token ,如下所示。

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-
token)"

我研究了解决这个问题的不同方法。例如,一些适用于 Java 和 Google Cloud 应用程序的 Google 客户端库展示了如何将服务帐户凭据添加到代码中。我很困惑当从手机运行代码时如何将 Json key 文件添加到代码中。我还了解到可以使用 Firebase,但我不熟悉其流程。

目前,我将在计算机上打开 gcloud,生成访问 token ,将其粘贴到我的代码中,并按如下所示使用 header 运行应用程序,这将在长达一个小时内返回所需的结果,直到访问代码过期。

@Override
public Map<String, String> getHeaders() throws AuthFailureError{
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + accesstoken);
return headers;
}

我希望这是一个可以在 Android 手机上运行的独立应用程序。执行此操作的最佳方法是什么?

<小时/>

更新:我能够将该文件添加到 Android Studio 中,然后使用一些函数来获取访问 token ,并且它似乎可以在模拟器中工作。我不确定这个方法有多安全,因为带有 key 的 json 文件需要保密。

InputStream is = getAssets().open("app.json");
GoogleCredentials credentials =
GoogleCredentials.fromStream(i).createScoped(Lists.newArrayList(scope));
credentials.refreshIfExpired();
AccessToken accesstoken = credentials.getAccessToken();

最佳答案

  • 将 firebase 添加到您的 Android 项目中。 https://firebase.google.com/docs/android/setup您将在 Firebase 中创建一个项目并下载用于配置的 json 文件并将其添加到应用程序目录中。还在 gradle 文件中添加依赖项。
  • 在 Firebase 控制台上,转到 ML Kit 部分并使用您的照片创建 AUTML 模型。
  • 训练模型
  • 训练完成后,您可以下载模型,并在 asset/model 目录中下载了 3 个文件。并且它已经可以使用了。通过这种方式,您将使用 Firebase AutoML SDK,并且不需要生成 token 。

  • 使用您的模型并通过应用程序进行预测。步骤是:

    • 准备用于预测的图像
    • 准备模型
    • 获取图像标签
    • 处理图像以进行分类

public void findLabelsWithAutoML() {
Bitmap bitmap = null;
File file = new File(currentPhotoPath);
System.out.println("file "+file);
try {
bitmap = MediaStore.Images.Media
.getBitmap(getContentResolver(), Uri.fromFile(file));
} catch (Exception e) {
e.printStackTrace();
}
FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
.setWidth(480) // 480x360 is typically sufficient for
.setHeight(360) // image recognition
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setRotation(FirebaseVisionImageMetadata.ROTATION_0)
.build();

FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap);

System.out.println("firebaseVisionImage :"+firebaseVisionImage);
FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder()
.setAssetFilePath("model/manifest.json")
.build();
FirebaseVisionOnDeviceAutoMLImageLabelerOptions labelerOptions = new FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
.setConfidenceThreshold(0.65F) // Evaluate your model in the Firebase console
// to determine an appropriate value.
.build();
FirebaseVisionImageLabeler firebaseVisionImageLabeler = null;
try {
firebaseVisionImageLabeler = FirebaseVision.getInstance().getOnDeviceAutoMLImageLabeler(labelerOptions);
} catch (Exception e) {
e.printStackTrace();
}
firebaseVisionImageLabeler.processImage(firebaseVisionImage)
.addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionImageLabel>>() {
@Override
public void onSuccess(List<FirebaseVisionImageLabel> labels) {
for (FirebaseVisionImageLabel label : labels) {
System.out.println("label " + label.getText() + " score: " + (label.getConfidence() * 100));
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//
}
});

}

关于java - 如何在没有 gcloud 的情况下用 Java 为 Google AutoML Vision API 生成访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55737933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com