视觉学习第四天

简介: 汽车检测,该项目不是独立完成,是参考别人。地址如下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>
相关文章
|
9月前
|
编解码 自然语言处理 开发者
复刻Sora有多难?一张图带你读懂Sora的技术路径
OpenAI发布了视频生成模型Sora,最大的Sora模型能够生成一分钟的高保真视频。同时OpenAI称,可扩展的视频生成模型,是构建物理世界通用模拟器的一条可能的路径。
|
5天前
|
人工智能 文字识别 自然语言处理
Ovis2:阿里放出多模态新王炸!6大模型尺寸通吃视频理解,数学推理能解微积分
Ovis2 是阿里巴巴国际团队推出的多模态大语言模型,具备强大的视觉与文本对齐能力,适用于复杂场景下的 OCR、视频理解等任务。
68 6
Ovis2:阿里放出多模态新王炸!6大模型尺寸通吃视频理解,数学推理能解微积分
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
"FunAudioLLM震撼来袭!重塑语音交互新纪元,让每一次对话都充满魔法与情感共鸣!"
【8月更文挑战第11天】随着AI技术的发展,语音交互正经历革新。阿里巴巴推出的FunAudioLLM是一款先进的语音技术框架,包含SenseVoice和CosyVoice两大核心模型。SenseVoice擅长多语言语音识别与情感分析;CosyVoice则专精于自然语音生成,支持多语言、音色与情感控制。这两个模型结合,能实现在语音翻译、情绪对话等场景下的广泛应用,为人机交互带来更加真实与丰富的体验。通过开源社区的支持,FunAudioLLM将持续进化,成为语音技术领域的重要推手。
132 5
|
6月前
|
人工智能 JSON 自然语言处理
🔍深度揭秘!如何用提示词驾驭生成式大模型,让你的创意无限飞🌈
【8月更文挑战第1天】在AI风潮中,生成式大模型因出色的内容创造能力备受创意工作者青睐。但如何巧妙运用提示词,激发模型潜力,仍是挑战。本文通过问答形式揭秘提示词技巧:理解其定义、掌握设计方法(明确目标、具象描述、考虑模型特性)、评估其影响力及调整策略(细化描述、变换风格、调节参数),并分享实用贴士,助您成为驾驭AI创作的高手。
308 7
|
8月前
|
人工智能 自然语言处理 测试技术
从高考到奥林匹克竞技场:大模型与人类智能的终极较量
【6月更文挑战第29天】上海交大等团队的OlympicArena测试评估了大模型在多学科认知推理任务上的能力,涵盖7个学科11,163个问题。最先进模型GPT-4的整体准确率为39.97%,数学和物理仅28.67%和29.71%,显示在复杂推理任务上的局限。尽管如此,模型在部分推理步骤中展现出潜力,但在空间推理和抽象符号理解上仍有挑战。[论文链接](https://arxiv.org/pdf/2406.12753)
64 1
|
人工智能 搜索推荐 开发者
Doodle一下,AI上作画!活动震撼来袭,个性画作等你挑战!
体验”通义万相-涂鸦作画“,晒出属于你的”灵魂画作“,在阿里云社区、微博/小红书提交作品,即有机会获得人气奖哦!
611 3
Doodle一下,AI上作画!活动震撼来袭,个性画作等你挑战!
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
【周末闲谈】感受AI时代魅力,创意无界限
【周末闲谈】感受AI时代魅力,创意无界限
106 0
|
人工智能 算法 机器人
AI技术让手办「整活」:3D建模居然可以这样简单
AI技术让手办「整活」:3D建模居然可以这样简单
293 0
|
机器学习/深度学习 人工智能 自然语言处理
【周末闲谈】文心一言,模仿还是超越?
【周末闲谈】文心一言,模仿还是超越?
173 0
|
人工智能 自然语言处理
最懂中国传统文化的AI绘画模型,画作有形更有神,传达儒释道思想
最懂中国传统文化的AI绘画模型,画作有形更有神,传达儒释道思想
630 0

热门文章

最新文章