写阿里服务识别车牌号功能遇到的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());
        }
    }
}
相关推荐
charlie11451419119 小时前
通用GUI编程技术——图形渲染实战(四十)——深度缓冲与3D变换:从平面到立体
开发语言·c++·平面·3d·图形渲染·win32
qq_4609784019 小时前
Go语言如何做环境变量配置_Go语言环境变量管理教程【详解】
jvm·数据库·python
小张同学82420 小时前
-RAG检索增强生成让智能体拥有企业级专属知识库
开发语言·python·架构·pycharm
DevilSeagull20 小时前
Rust 枚举(enum)深度解析:从定义到 Option 的安全之道
开发语言·后端·安全·rust·github
Ulyanov20 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:实时时钟与数据驱动 UI —— 从“事件回调”到“状态绑定”的范式跃迁
开发语言·python·qt·ui·架构·交互
wuxinyan12320 小时前
大模型学习之路02:提示工程从入门到精通(第二篇)
人工智能·python·学习
AI进化营-智能译站20 小时前
ROS2 C++开发系列06:变量、数据类型与IO实战
java·开发语言·c++·ai
szccyw01 天前
PHP源码能否用二手服务器部署_老旧服务器性价比分析【方法】
jvm·数据库·python
阿里嘎多学长1 天前
2026-04-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
m0_613856291 天前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python