调用GoogleCloudVision的detectImageLabels报NoSuchFileException如何解决
问题1:java.nio.file.NoSuchFileException异常解决
异常栈显示报错出现在GoogleCloudVision.findJsonCredentialsFile方法读取C:\Users\DELL Laptop\Downloads\Exam3Starter\src目录时找不到对应路径,本质是Google Cloud Vision的身份验证JSON凭证文件没有正确配置:
- 先确认你已经在Google Cloud控制台开启了Cloud Vision API,并且下载了服务账号的JSON密钥文件
- 检查
findJsonCredentialsFile方法的查找逻辑,是否默认去src目录下检索JSON文件,而你当前项目的src目录不存在、或是没有把密钥文件放到对应位置 - 快速测试可直接硬编码指定密钥文件路径,示例代码:
// 调用detectImageLabels之前先设置身份凭证环境变量 System.setProperty("GOOGLE_APPLICATION_CREDENTIALS", "你的密钥文件完整路径,例如C:\\Users\\DELL Laptop\\xxx\\密钥文件名.json");
问题2:ObjectLabel类实现错误
你当前编写的ObjectLabel构造方法是空实现,没有给成员变量赋值,就算接口成功返回标签,存入ObjectLabel的也全是默认无效值,修正代码如下:
public class ObjectLabel { // 建议成员变量私有化,配套getter方法方便后续取值 private String label; private float confidence; public ObjectLabel(String description, float score) { // 将构造方法入参赋值给类成员变量 this.label = description; this.confidence = score; } // 重写toString方法,否则JOptionPane弹框只会显示类名+内存哈希值,看不到实际标签内容 @Override public String toString() { return "标签:" + label + ",置信度:" + String.format("%.2f", confidence * 100) + "%"; } // 可选:增加getter方法,后续需要单独提取标签/置信度时使用 public String getLabel() { return label; } public float getConfidence() { return confidence; } }
内容的提问来源于stack exchange,提问作者user17609176
相关产品推荐
相关产品推荐

