视觉学习第四天

简介: 汽车检测,该项目不是独立完成,是参考别人。地址如下https://blog.csdn.net/Linkai12138/article/details/106630789

汽车检测

开通服务

先要开通汽车检测服务

导入依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>objectdet</artifactId>
    <version>0.0.5</version>
</dependency>

<!--    图片识别    -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>ocr</artifactId>
    <version>1.0.3</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.1.37</version>
</dependency>

实现

service

@Service
public class CarService {

    @Value("${car.accessKeyId}")
    private String accessKeyId;

    @Value("${car.accessKeySecret}")
    private String accessKeySecret;

    private Client objectClient;

    private RuntimeObject runtimeObject;


    @PostConstruct
    public void initClient() throws Exception {
        Config objectConfig = new Config();
        objectConfig.type = "access_key";
        objectConfig.regionId = "cn-shanghai";
        objectConfig.accessKeyId = accessKeyId;
        objectConfig.accessKeySecret = accessKeySecret;

        objectConfig.endpoint = "objectdet.cn-shanghai.aliyuncs.com";
        objectClient = new Client(objectConfig);
        runtimeObject = new RuntimeObject();
    }
    //识别分类图片还未完成
    public String classifyVehicle(String filePath) throws Exception {
        ClassifyVehicleInsuranceAdvanceRequest request = new ClassifyVehicleInsuranceAdvanceRequest();
        request.imageURLObject = new FileInputStream(filePath);
        ClassifyVehicleInsuranceResponse response = objectClient.classifyVehicleInsuranceAdvance(request, runtimeObject);

        String result = null;

        for (ClassifyVehicleInsuranceResponse.ClassifyVehicleInsuranceResponseDataLabels item : response.data.labels){
            System.out.println(item.name + item.score);
        }

        return null;
    }


    public String myDetectVehicle(String filePath)throws Exception{
        DetectVehicleAdvanceRequest request = new DetectVehicleAdvanceRequest();
        request.imageURLObject = new FileInputStream(filePath);
        DetectVehicleResponse response = objectClient.detectVehicleAdvance(request, runtimeObject);

        String result = null;

        for (DetectVehicleResponse.DetectVehicleResponseDataDetectObjectInfoList item : response.data.detectObjectInfoList){
            System.out.println(item.type);
            System.out.println(item.score);

            if ("vehicle".equals(item.type)){
                System.out.println("检测成功!是机动车");
            }else {
                System.out.println("该图片不是机动车");
            }
           result =  item.type;
        }

        return result;
    }


    //车辆损伤识别
    public String myRecognizeVehicle(String filePath) throws Exception{
        //本地上传图片
        RecognizeVehicleDamageAdvanceRequest request = new RecognizeVehicleDamageAdvanceRequest();
        request.imageURLObject = new FileInputStream(filePath);

        //识别车辆损伤
        RecognizeVehicleDamageResponse response = objectClient.recognizeVehicleDamageAdvance(request, runtimeObject);

        return getHurtResult(response.data.elements);
    }

    public String getHurtResult(RecognizeVehicleDamageResponse.RecognizeVehicleDamageResponseDataElements[] items){

        StringBuffer type = new StringBuffer("检测到的车辆损伤为:");
        for (RecognizeVehicleDamageResponse.RecognizeVehicleDamageResponseDataElements item: items){

            switch (item.type) {
                case "1": type.append("轻微刮擦   ");
                    break;
                case "2": type.append("重度刮擦   ");
                    break;
                case "3": type.append("轻度变形   ");
                    break;
                case "4": type.append("中度变形   ");
                    break;
                case "5": type.append("重度变形   ");
                    break;
                case "6": type.append("crack破损孔洞   ");
                    break;
                case "7": type.append("翼子板和大灯缝隙   ");
                    break;
                case "8": type.append("翼子板保险杠缝隙   ");
                    break;
                case "9": type.append("大灯轻微刮擦   ");
                    break;
                case "10": type.append("大灯重度刮擦   ");
                    break;
                case "11": type.append("大灯破损   ");
                    break;
                case "12": type.append("后视镜轻微刮擦   ");
                    break;
                case "13": type.append("后视镜玻璃破损   ");
                    break;
                case "14": type.append("后视镜脱落   ");
                    break;
                case "15": type.append("挡风玻璃破损   ");
                    break;
            }
        }
        return type.toString();
    }


    public String fileUpload(MultipartFile file){
        //获取文件名
        String uploadFileName = file.getOriginalFilename();

        //上传路径保存设置 UUID
        String path = "src/main/resources/static/upload";

        //如果路径不存在,创建一个
        File realPath = new File(path);
        if (!realPath.exists()){
            realPath.mkdir();
        }

        //上传文件,并保存
        InputStream is = null;
        OutputStream os = null;

        try {
            is = file.getInputStream();
            os = new FileOutputStream(new File(realPath,uploadFileName));
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len = is.read(buffer)) != -1){
                os.write(buffer,0,len);
                os.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return path +"\\"+uploadFileName;
    }
}

controller

@Controller
public class CarController {

    @Autowired
    private CarService carService;

    @RequestMapping("/upload")
    public String fileUpload(@RequestParam("carfile")MultipartFile carfile,
    Model model)throws Exception{

        System.out.println("22222");

        //上传受损车辆
        String carPath = carService.fileUpload(carfile);

        //调用Service层分析图片
        String carStr = null;
        String carStr2 = null;

        //机动车检测
        carStr = carService.myDetectVehicle(carPath);
        //车辆损伤识别
        carStr2 = carService.myRecognizeVehicle(carPath);

        //保存数据到数据库中


        //将图片路径放入Model中
        String carFileName = carfile.getOriginalFilename();

        model.addAttribute("carfilename","/upload/"+carFileName);

        if ("vehicle".equals(carStr)){
            model.addAttribute("carStr","检测成功!是机动车");
        }else {
            model.addAttribute("carStr","您上传的图片不是机动车,请重新上传!!");
        }

        model.addAttribute("carStr2",carStr2);

        return "result";
    }


    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String toResult(){

        return "test";
    }
}

前端

test

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form th:action="@{/upload}" enctype="multipart/form-data" method="post">

    受损车辆:<input type="file" name="carfile">
    <input type="submit" value="upload">
</form>
</body>
</html>

result

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img th:src="${carfilename}">
    <p th:text="${carStr}"></p>
    <p th:text="${carStr2}"></p>
</body>
</html>
相关文章
|
敏捷开发 项目管理
当敏捷遇上PMP:项目管理的完美结合
项目管理领域一直在不断发展,不断涌现出新的方法和工具,以满足不断变化的商业需求。在这个多变的环境中,PMP(项目管理专业人员)认证一直以其强大的项目管理框架而著称,而敏捷方法论则在敏捷开发和快速响应市场需求方面表现出色。本文将深入探讨PMP和敏捷如何相互结合,为项目管理带来新的维度和可能性。
|
缓存 负载均衡 前端开发
详解正向代理和反向代理的不同用途
详解正向代理和反向代理的不同用途
634 10
|
人工智能 vr&ar Android开发
深入探索安卓与iOS的未来发展
【10月更文挑战第8天】 本文将深入探讨安卓和iOS两个主流操作系统的未来发展,从技术创新、用户体验和市场竞争等多个角度进行分析,揭示它们在技术演进中的趋势以及面临的挑战。
306 3
|
自然语言处理 Kubernetes jenkins
devops-k8s部署jenkins和动态创建slave节点
1. K8S部署jenkins 2. 动态创建slave集群节点 3. 使用PodTemplate构建流水线
devops-k8s部署jenkins和动态创建slave节点
|
12月前
|
SpringCloudAlibaba Java Nacos
尚硅谷SpringCloud教程 笔记
本文介绍了基于Spring Cloud Alibaba构建的cloud-demo工程创建步骤,包括父模块及子模块的配置。父模块采用pom打包方式,定义了Java 8、Spring Boot 2.4.2、Spring Cloud 2020.0.1及Spring Cloud Alibaba 2021.1版本。包含三个主要模块:services(依赖Nacos)、service-order和service-product(均依赖spring-boot-starter-web)。同时提供了discoveryClient的测试代码,展示服务发现功能的实现与验证过程。
679 12
尚硅谷SpringCloud教程 笔记
|
SQL 数据采集 存储
Hive 判断某个字段长度
【8月更文挑战第13天】
712 2
|
人工智能 自然语言处理 IDE
💡通义灵码:让每个人都能成为软件开发的「超级个体」
通义灵码是阿里巴巴达摩院推出的大模型技术,支持多种编程语言和框架,具备强大的自然语言理解和生成能力。它能够自动生成代码、自动化测试、文档编写等,显著提升开发效率,降低技术门槛,让每个人都能轻松参与软件开发。通义灵码不仅支持多语言、多编辑器,还具备智能问答、代码优化等功能,为企业和开发者提供全方位的支持。通过通义灵码,开发者可以从繁琐的任务中解放出来,专注于创新和创意,推动软件开发进入新时代。
1461 4
💡通义灵码:让每个人都能成为软件开发的「超级个体」
|
移动开发 安全 API
阿里云最新域名注册及续费和转入收费价格表参考
目前域名注册管理机构(Verisign)已上调.com中英文域名成本,这一变动将直接影响到全球范围内.com域名价格,各大注册商的.com域名注册、续费、转移价格已同步上涨。以阿里云为例,此次涨价之后,.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,下面是2024年9月1日涨价之后,阿里云最新的域名注册及续费和转入最新收费价格表。
|
敏捷开发 测试技术 API
阿里云云效产品使用问题之是否有发布审批流
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
搜索推荐
title 与 h1 的区别、b 与 strong 的区别、i 与 em 的区别?
title 与 h1 的区别、b 与 strong 的区别、i 与 em 的区别?
317 1

热门文章

最新文章