【阿里云高校计划】车辆保险应用 day4 【拨云见日】

5 篇文章 0 订阅
2 篇文章 0 订阅

【阿里云高校计划】车辆保险应用 day4 【拨云见日】

有一说一,在五天阿里云视觉训练营中,身为菜鸟的我只学会了调用外部API和使用maven,我很开心,感谢阿里。

这次只在后端实现,前后端实在不会关联。希望以后学成之后可以实现。

在这里插入图片描述

实施前准备工作

一、本地图片上传为OSS

1.开通oss

其实在上周就开通了,但是本人较笨,搞了半天没搞好,这周末终于有空重新搞起了!
在这里插入图片描述

2.创建Bucket

在这里插入图片描述

Bucket的配置我只改了名称和区域,区域是因为

在这里插入图片描述在这里插入图片描述

二、开通目标检测服务

在这里插入图片描述

在这里插入图片描述

三、查看所需API

这里我们用到阿里云视觉智能开放平台提供的三个功能:

  • 车辆部件识别
  • 车辆损伤识别
  • 车险图片分类

在这里插入图片描述

1.车辆部件识别

检测图片中车辆部件的位置以及名称。

2.车辆损伤识别

针对常见小汽车车型,识别车辆外观受损部件及损伤类型,可识别数十种车辆部件、五大类外观损伤。(刮擦、凹陷、开裂、褶皱、穿孔)

3.车险图片分类

对输入的车险图片进行分类。

具体实施

一、本地图片上传至OSS的uploadPic类

1.在maven中导入所需依赖
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>
2.编写UploadPic类
package com.example.demo;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;

import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.util.Date;
import java.lang.*;
import java.util.Scanner;

public class UploadPic {
    public static String UploadPic(){
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-shanghai.aliyuncs.com";
        // 阿里云主账号AccessKey。
        String accessKeyId = "*************";
        String accessKeySecret = "*************";
        //本地文件名
        System.out.println("请输入本地图片path:");
        Scanner scanner = new Scanner(System.in);
        String fileName = scanner.nextLine();
        String bucketName = "auto-insurance-pic";
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));

        // 生成上传文件名
        String objectName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;


        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


        // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传文件。
        ossClient.putObject(bucketName, objectName, new File(fileName));
        // 设置URL过期时间为1小时。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);

        // 关闭OSSClient。
        ossClient.shutdown();

        return url.toString();
    }
}
3.运行结果

在这里插入图片描述

在这里插入图片描述

运行成功!

二、车辆部件识别RecognizeVehicleParts类

1.在maven中导入所需依赖

因为属于目标检测,而根据文档中的导入指令有错,所以我来到了阿里的maven仓库下查找并选择了最新的版本进行导入。

阿里maven私有仓库服务:https://maven.aliyun.com/mvn/search

在这里插入图片描述

<dependency>
	<groupId>com.aliyun</groupId>
	<artifactId>aliyun-java-sdk-core</artifactId>
	<version>4.4.8</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.52</version>
</dependency>
<dependency>
	<groupId>com.aliyun</groupId>
	<artifactId>aliyun-java-sdk-objectdet</artifactId>
	<version>1.0.7</version>
</dependency>
2.编写RecognizeVehicleParts类
package com.example.demo;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.example.demo.UploadPic;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.objectdet.model.v20191230.*;

public class RecognizeVehicleParts {

    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "accessKeyId", "accessKeySecret");
        IAcsClient client = new DefaultAcsClient(profile);

        RecognizeVehiclePartsRequest request = new RecognizeVehiclePartsRequest();
        request.setRegionId("cn-shanghai");
        request.setImageURL(UploadPic.UploadPic());

        try {
            RecognizeVehiclePartsResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}
2.运行结果

在这里插入图片描述

在这里插入图片描述

返回值为:

{"requestId":"BBFB102D-5EAC-483F-9A94-9DA79A06E1F6","data":{"elements":[{"score":0.98788995,"type":"left_tail_light","boxes":[132,274,862,607]},{"score":0.952229,"type":"left_rear_wing","boxes":[4,162,365,750]},{"score":0.74785864,"type":"rear_bumper","boxes":[60,456,987,760]}],"originShapes":[768,1024]}}

返回部件类型为:left_tail_light 左后灯,left_rear_wing 左后翼,rear_bumper尾部保险杠

识别成功!(其实我是想识别左后灯,结果连其他两个也识别出来了!)

再来一张!!

在这里插入图片描述

在这里插入图片描述

返回值为:

{"requestId":"61E13B25-82AD-4E4C-A133-ADA281C1A4EE","data":{"elements":[{"score":0.9911305,"type":"right_front_door","boxes":[1,0,350,559]},{"score":0.9898079,"type":"right_front_tire","boxes":[335,191,727,656]},{"score":0.98655057,"type":"right_front_wing","boxes":[296,2,749,490]},{"score":0.97444427,"type":"right_doorsill","boxes":[1,497,359,651]},{"score":0.9604019,"type":"front_bumper","boxes":[671,168,779,465]}],"originShapes":[768,1024]}}

返回部件类型为:right_front_door 右前门,right_front_tire 右前轮,right_front_wing右前翼,right_doorsill右底大边,front_bumper前保险杠

识别正确!超乎预期

附文档的type说明

Type说明

名字英文名字部件编码标注编码是否是34部件是否计划支持
前保险杠front_bumperPR0111
后保险杠rear_bumperPR0213
左前大灯left_lightPR0371
右前大灯right_lightPR0472
中网grillePR05b11
中网grillePR05B11
前机盖hoodPR0621
左前门left_front_doorPR0751
右前门right_front_doorPR0852
左后门left_rear_doorPR0953
右后门right_rear_doorPR01054
左前翼子板left_front_wingPR1141
右前翼子板right_front_wingPR1242
左后翼子板left_rear_wingPR1343
右后翼子板right_rear_wingPR1444
后机盖decklidPR01523
前挡风玻璃front_windshieldPR1661
后挡风玻璃rear_windshieldPR1763
左后视镜left_mirrorPR1893
右后视镜right_mirrorPR1994
左尾灯left_tail_lightPR2073
右尾灯right_tail_lightPR2174
左雾灯left_foglightPR22b13
左雾灯left_foglightPR22B13
右雾灯right_foglightPR23b14
右雾灯right_foglightPR23B14
格栅gratesPR24b12
格栅gratesPR24B12
右前车窗right_front_windowPR2582
左前车窗left_front_windowPR2681
右后车窗right_rear_windowPR2784
左后车窗right_tail_lightPR2883
右底大边right_doorsillPR2992
左底大边left_doorsillPR3091
右前门把手right_front_doorknobPR31502
左前门把手left_front_doorknobPR32501
左后门把手left_rear_doorknobPR34503
右后门把手right_tail_lightPR33504
左前轮胎left_front_tirePR360131
左后轮胎left_rear_tirePR360233
右前轮胎right_front_tirePR360332
右后轮胎right_tail_lightPR360434
轮胎right_tail_lightPR363
右前轮眉right_front_WheelBrowPR1203352
左前轮眉left_front_WheelBrowPR1103351
右后轮眉right_rear_WheelBrowPR1403354
左后轮眉left_rear_WheelBrowPR1303353
左前钢圈left_front_ringPR3501316
左后钢圈left_rear_ringPR3502336
右前钢圈right_tail_lightPR3503326
右后钢圈right_rear_ringPR3504346
钢圈ringPR35306
左前门饰条left_front_door_PanelPR07016511
右前门饰条right_front_door_PanelPR08016512
左后门饰条left_rear_door_PanelPR09016513
右后门饰条right_rear_door_PanelPR10016514
左前门亮条left_front_door_WispPR07016521
右前门亮条right_front_door_WispPR08016522
左后门亮条left_rear_door_WispPR09016523
右后门亮条right_rear_door_WispPR10016524
左前门饰板left_front_door_PlaquePR0703166
右前门饰板right_front_door_PlaquePR0803266
左后门饰板left_rear_door_PlaquePR0903366
右后门饰板right_rear_door_PlaquePR1003466
前保险杠饰条front_bumper_PanelPR01011651
后保险杠饰条rear_bumper_PanelPR02013651
前保险杠亮条front_bumper_WispPR01021652
后保险杠亮条rear_bumper_WispPR02023652
前保险杠护板front_bumper_BackplatePR01036621
后保险杠护板rear_bumper_BackplatePR02036623
前保险杠导流板front_bumper_DeflectorPR01046611
后保险杠导流板rear_bumper_DeflectorPR02046613
后保反光板BumperLightPR0205761
车顶Roof待定25
A柱Apillar待定26
挡泥板Fender待定36
反光镜灯MirrorLight待定762
翼子板灯WingLight待定763
牌照灯PlateLight待定764
车窗三角玻璃TriangleWindow待定85
天窗RoofWindow待定86
字标WordMark待定67
牵引钩盖板DragCover待定681
喷水嘴盖板LightWaterCover待定682
电眼ElectricEye待定683
油箱盖TankCover待定684
导流板(无方向)Deflector待定661
门把手(无方向)Deflector待定50
车标logo待定b16,B16
饰板(无方向)Plaque待定66
保险杠(无方向)Roof待定1
车牌plate待定b17,B17
雾灯(无方向)foglight待定b15,B15
亮条(无方向)Wisp待定652
翼子板(无方向)wing待定4
饰条(无方向)Panel待定651
底大边(无方向)doorsill待定9
门(无方向)door待定5
挡风玻璃windshield待定6
大灯(无方向)light待定70
挡泥板Fender待定36
轮眉(无方向)WheelBrow待定35
看不出什么部件待定00

三、车辆损坏识别类

1.在maven中导入所需依赖

见本文二-1

2.编写RecognizeVehicleDamage类
package com.example.demo;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.objectdet.model.v20191230.*;

public class RecognizeVehicleDamage {

    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "accessKeyId", "accessKeySecret");
        IAcsClient client = new DefaultAcsClient(profile);

        RecognizeVehicleDamageRequest request = new RecognizeVehicleDamageRequest();
        request.setRegionId("cn-shanghai");
        request.setImageURL(UploadPic.UploadPic());

        try {
            RecognizeVehicleDamageResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}
3.识别结果

在这里插入图片描述

返回值为:

{"requestId":"7FFBD390-7019-4B85-9FFA-779C912A9CEB","data":{"elements":[{"score":0.414995,"type":"1","scores":[0.414995,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[343,390,473,542]},{"score":0.408405,"type":"1","scores":[0.408405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[541,442,659,545]},{"score":0.348472,"type":"1","scores":[0.348472,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[273,293,423,400]},{"score":0.378637,"type":"2","scores":[0.0,0.378637,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[261,26,496,142]},{"score":0.873101,"type":"5","scores":[0.0,0.0,0.0,0.0,0.873101,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[91,4,555,267]},{"score":0.815785,"type":"6","scores":[0.0,0.0,0.0,0.0,0.0,0.815785,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[564,270,869,441]},{"score":0.845525,"type":"8","scores":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.845525,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"boxes":[230,234,529,313]},{"score":0.411336,"type":"11","scores":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.411336,0.0,0.0,0.0,0.0],"boxes":[632,425,922,563]},{"score":0.334054,"type":"11","scores":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.334054,0.0,0.0,0.0,0.0],"boxes":[538,91,733,194]},{"score":0.333818,"type":"11","scores":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333818,0.0,0.0,0.0,0.0],"boxes":[694,157,899,286]},{"score":0.32519,"type":"11","scores":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.32519,0.0,0.0,0.0,0.0],"boxes":[523,87,902,278]}]}}
BoxesList173,178,277,259部件位置框信息,形式为【左上角点x坐标,右下角点y坐标,右上角点x坐标,左下角点y坐标】。
ScoreFloat0.683465损伤类型对应的概率值。
ScoresList0.683465对应所有15种损伤类型的损伤概率。
TypeString1损伤类型id。具体Type类型如下所示。1:轻微刮擦2:重度刮擦3:轻度变形4:中度变形5:重度变形6:crack破损孔洞7:翼子板和大灯缝隙8:翼子板保险杠缝隙9:大灯轻微刮擦10:大灯重度刮擦11:大灯破损12:后视镜轻微刮擦13:后视镜玻璃破损14:后视镜脱落15:挡风玻璃破损

识别成功!

四、车险图片分类

1.在maven中导入所需依赖

见本文二-1

2.编写ClassifyVehicleInsurance类
package com.example.demo;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.objectdet.model.v20191230.*;

public class ClassifyVehicleInsurance {

    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "accessKeyId", "accessKeySecret");
        IAcsClient client = new DefaultAcsClient(profile);

        ClassifyVehicleInsuranceRequest request = new ClassifyVehicleInsuranceRequest();
        request.setRegionId("cn-shanghai");
        request.setImageURL(UploadPic.UploadPic());

        try {
            ClassifyVehicleInsuranceResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}
3.识别结果

在这里插入图片描述

在这里插入图片描述

返回值为:

{"requestId":"87BEADED-F581-4C38-9F5F-E6F8DF0A1BA5","data":{"threshold":0.0,"labels":[{"score":0.0046,"name":"others"},{"score":0.0164,"name":"detail"},{"score":0.1934,"name":"component"},{"score":0.0,"name":"vin"},{"score":8.0E-4,"name":"people"},{"score":2.0E-4,"name":"motor"},{"score":0.1439,"name":"semi-car"},{"score":0.0027,"name":"panoramic"},{"score":3.0E-4,"name":"license"},{"score":0.0169,"name":"CT-scan"},{"score":5.0E-4,"name":"truck"},{"score":0.0144,"name":"disassembly"},{"score":0.6059,"name":"scene"}]}}
LabelsArray输出分类结果。
NameStringotherslabel名称。枚举类型。枚举值包括:
others:其他
detail:细节图
component:汽车部件图
vin:汽车vin码
people:人物
motor:发动机
semi-car:半车图
panoramic:全车图
license:行驶证
CT-scan:CT-扫描
truck:卡车
disassembly:拆解件
scene:现场图
ScoreFloat0.0023分类结果对应的概率值。

实施完成

完成之后我会上传源码

加入高校计划

本人是参加的达摩院特别版-视觉AI训练营第二期
训练营里面的小哥哥小姐姐说话超级好听,也有超多大佬,我超喜欢这里!

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值