写阿里服务识别车牌号功能遇到的bug【包含使用阿里服务识别车牌号功能代码】

java 复制代码
Exception in thread "main" java.lang.NoSuchMethodError: com.aliyun.credentials.Client.getCredential()Lcom/aliyun/credentials/models/CredentialModel;
	at com.aliyun.teaopenapi.Client.doRequest(Client.java:812)
	at com.aliyun.teaopenapi.Client.callApi(Client.java:1080)
	at com.aliyun.openplatform20191219.Client.authorizeFileUploadWithOptions(Client.java:46)
	at com.aliyun.ocr20191230.Client.recognizeLicensePlateAdvance(Client.java:770)
	at com.utils.RecognizeLicensePlateAli.main(RecognizeLicensePlateAli.java:59)

其实解决bug很简单,是缺了个包,而且这个是运行时异常

java 复制代码
  <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>tea-openapi</artifactId>
            <version>0.2.1</version>
        </dependency>
        <!-- 还有这个识别用的包 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>ocr20191230</artifactId>
            <version>2.0.1</version>
        </dependency>
java 复制代码
package com.utils;


/*
引入依赖包
<!-- https://mvnrepository.com/artifact/com.aliyun/ocr20191230 -->
<dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>ocr20191230</artifactId>
      <version>${aliyun.ocr.version}</version>
</dependency>
*/

import cn.hutool.core.collection.CollUtil;
import com.aliyun.ocr20191230.models.RecognizeLicensePlateResponse;
import com.aliyun.ocr20191230.models.RecognizeLicensePlateResponseBody;
import com.aliyun.tea.TeaException;
import org.springframework.web.bind.annotation.GetMapping;

import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.List;
import java.util.Optional;

public class RecognizeLicensePlateAli {

    public static String accessKeyId = "ABC123456";

    public static String accessKeySecret = "ABC123456";

    public static com.aliyun.ocr20191230.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        /*
          初始化配置对象com.aliyun.teaopenapi.models.Config
          Config对象存放 AccessKeyId、AccessKeySecret、endpoint等配置
         */
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setAccessKeyId(accessKeyId)
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "ocr.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ocr20191230.Client(config);
    }


    public String licensePlate(String filePath) throws Exception {
        com.aliyun.ocr20191230.Client client = RecognizeLicensePlateAli.createClient(accessKeyId, accessKeySecret);
        File file = new File(filePath);
        // 创建InputStream
        InputStream inputStream = Files.newInputStream(file.toPath());
        com.aliyun.ocr20191230.models.RecognizeLicensePlateAdvanceRequest recognizeLicensePlateAdvanceRequest = new com.aliyun.ocr20191230.models.RecognizeLicensePlateAdvanceRequest()
                .setImageURLObject(inputStream);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            RecognizeLicensePlateResponse response = client.recognizeLicensePlateAdvance(recognizeLicensePlateAdvanceRequest, runtime);
            List<RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyDataPlates> recognizeLicensePlateResponseBodyDataPlates = Optional.of(response).map(RecognizeLicensePlateResponse::getBody).map(RecognizeLicensePlateResponseBody::getData).map(RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyData::getPlates).orElse(null);
            if (CollUtil.isNotEmpty(recognizeLicensePlateResponseBodyDataPlates)) {
                RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyDataPlates data = recognizeLicensePlateResponseBodyDataPlates.get(0);
                String plateNumber = data.getPlateNumber();
                System.out.println(plateNumber);
            }
        } catch (TeaException error) {
            // 获取整体报错信息
            System.out.println(com.aliyun.teautil.Common.toJSONString(error));
            // 获取单个字段
            System.out.println(error.getCode());
        }
        return "";
    }

    public static void main(String[] args) throws Exception {
        // 创建AccessKey ID和AccessKey Secret,请参见:https://help.aliyun.com/document_detail/175144.html
        // 如果您使用的是RAM用户的AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参见:https://help.aliyun.com/document_detail/145025.html
        // 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。
//        String accessKeyId = System.getenv("LTAI5t6ija1dt5E5vPh4nnDX");
//        String accessKeySecret = System.getenv("brRgmpD7Ch7NUiIiqKJO7kZC5jJZVA");
        com.aliyun.ocr20191230.Client client = RecognizeLicensePlateAli.createClient(accessKeyId, accessKeySecret);
        // 场景一,使用本地文件
        // InputStream inputStream = new FileInputStream(new File("/tmp/RecognizeLicensePlate1.jpg"));
        // 场景二,使用任意可访问的url
//        URL url = new URL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeLicensePlate/cpsb1.jpg");
//        InputStream inputStream = url.openConnection().getInputStream();
        File file = new File("C:\\Users\\Administrator\\Desktop\\123.jpg");
        // 创建InputStream
        InputStream inputStream = Files.newInputStream(file.toPath());
        com.aliyun.ocr20191230.models.RecognizeLicensePlateAdvanceRequest recognizeLicensePlateAdvanceRequest = new com.aliyun.ocr20191230.models.RecognizeLicensePlateAdvanceRequest()
                .setImageURLObject(inputStream);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            RecognizeLicensePlateResponse response = client.recognizeLicensePlateAdvance(recognizeLicensePlateAdvanceRequest, runtime);
            List<RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyDataPlates> recognizeLicensePlateResponseBodyDataPlates = Optional.of(response).map(RecognizeLicensePlateResponse::getBody).map(RecognizeLicensePlateResponseBody::getData).map(RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyData::getPlates).orElse(null);
            if (CollUtil.isNotEmpty(recognizeLicensePlateResponseBodyDataPlates)) {
                RecognizeLicensePlateResponseBody.RecognizeLicensePlateResponseBodyDataPlates data = recognizeLicensePlateResponseBodyDataPlates.get(0);
                String plateNumber = data.getPlateNumber();
                System.out.println(plateNumber);
            }
        } catch (TeaException error) {
            // 获取整体报错信息
            System.out.println(com.aliyun.teautil.Common.toJSONString(error));
            // 获取单个字段
            System.out.println(error.getCode());
        }
    }
}
相关推荐
whltaoin4 分钟前
Java 后端与 AI 融合:技术路径、实战案例与未来趋势
java·开发语言·人工智能·编程思想·ai生态
wjs202412 分钟前
jEasyUI 自定义窗口工具栏
开发语言
二十雨辰24 分钟前
vite与ts的结合
开发语言·前端·vue.js
xiaohanbao0925 分钟前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
亦良Cool37 分钟前
如何部署一个Java项目
java·开发语言
沐知全栈开发1 小时前
JavaScript 输出
开发语言
love530love1 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫1 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
自学AI的鲨鱼儿2 小时前
ubuntu22.04安装gvm管理go
开发语言·后端·golang
先做个垃圾出来………2 小时前
SortedList
python