基于Selenium和AI的图像处理

本文将介绍如何通过Selenium爬取汽车之家图片,并利用阿里云通义万相AI进行图像优化处理,实现自动化获取高质量汽车图片的技术方案。

项目概述

在汽车相关的应用开发中,经常需要获取和处理汽车图片。传统方式往往面临图片质量不高、带有水印、风格不统一等问题。本项目结合Web爬虫技术和AI图像处理,提供了一个完整的解决方案:

  1. 使用Selenium自动化爬取汽车之家图片

  2. 通过阿里云通义万相AI进行图像优化和品牌替换

  3. 实现自动化、高质量的汽车图片处理流水线

技术架构

1. 图片爬取模块

图片爬取模块基于Selenium WebDriver实现,主要功能是从汽车之家网站获取指定车型的图片。

复制代码
public static String getCarImage(String carInfo) {
    // 构建搜索URL
    String url = "https://sou.autohome.com.cn/zonghe?q=" + carInfo + "&entry=42";
    
    // 配置Chrome无头浏览器
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless=new");
    options.addArguments("--disable-gpu");
    options.addArguments("--window-size=1920,1080");
    
    WebDriver driver = new ChromeDriver(options);
    try {
        driver.get(url);
        
        // 等待目标图片元素加载
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2));
        wait.until(ExpectedConditions.presenceOfElementLocated(
            By.cssSelector("img.cus-react-img")));
        
        Thread.sleep(1000); // 额外等待确保图片加载
        
        // 解析页面获取图片URL
        String pageSource = driver.getPageSource();
        Document document = Jsoup.parse(pageSource);
        Elements imgElements = document.select("img.cus-react-img");
        
        if (!imgElements.isEmpty()) {
            Element firstImg = imgElements.first();
            String imgUrl = firstImg.attr("src");
            
            // 处理相对路径
            if (imgUrl != null && !imgUrl.isEmpty() && !imgUrl.startsWith("http")) {
                imgUrl = "https:" + imgUrl;
            }
            return imgUrl;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        driver.quit();
    }
    return "获取图片失败";
}

关键技术点:

  • 无头浏览器:使用Chrome无头模式,适合服务器环境部署

  • 智能等待:结合显式等待和隐式等待,确保动态内容加载完成

  • JSoup解析:使用JSoup处理页面源码,提取目标图片元素

  • 异常处理:完善的异常处理机制,保证程序稳定性

2. AI图像处理模块

图像处理模块调用阿里云通义万相AI服务,对爬取的图片进行优化处理。

复制代码
public static String doWork(String originImageUrl) {
    String apiKey = "sk-你的API密钥";
    String requestBody = """
        {
            "model": "wan2.5-i2i-preview",
            "function":"super_resolution",
            "size":"1024*1024",
            "input": {
                "prompt": "去除图片中的汽车之家LOGO,换成车来客三个红色的字。图像超分,图像要有合适的背景。",
                "negative_prompt": "不要有很粗糙的线条。不要出现低分辨率、差质量、低质量、残缺、比例不良等情况",
                "images": ["%s"]
            },
            "parameters": {"n": 1}
        }
        """.formatted(originImageUrl);
    
    try {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
            
        // 提交图像处理任务
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis"))
            .header("X-DashScope-Async", "enable")
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();
            
        HttpResponse<String> response = client.send(request, 
            HttpResponse.BodyHandlers.ofString());
        
        // 解析任务ID并轮询结果
        JsonParse1 jsonParse1 = gson.fromJson(response.body(), JsonParse1.class);
        String taskId = jsonParse1.output.task_id;
        
        // 轮询任务状态
        request = HttpRequest.newBuilder()
            .uri(URI.create("https://dashscope.aliyuncs.com/api/v1/tasks/" + taskId))
            .header("Authorization", "Bearer " + apiKey)
            .GET()
            .build();
            
        String dealImageUrl = "";
        while (true) {
            response = client.send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() == 200) {
                JsonParse1 jsonParse2 = gson.fromJson(response.body(), JsonParse1.class);
                if (jsonParse2.output.task_status.equals("SUCCEEDED")) {
                    List<Results> resultsList = jsonParse2.output.results;
                    dealImageUrl = resultsList.get(0).url;
                    break;
                } else {
                    Thread.sleep(3000); // 3秒查询一次
                }
            } else {
                dealImageUrl = "图片处理异常";
                break;
            }
        }
        return dealImageUrl;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "图片处理异常";
}

AI处理功能:

  • Logo替换:将原图中的"汽车之家"Logo替换为"车来客"

  • 超分辨率:提升图像分辨率到1024×1024

  • 背景优化:为图像生成合适的背景

  • 质量提升:消除低质量、残缺等问题

核心实现细节

1. 异步任务处理

阿里云图像处理服务采用异步方式,需要先提交任务,然后通过任务ID轮询处理状态:

复制代码
class JsonParse1 {
    Output output;
}

class Output {
    String task_id;
    String task_status;
    List<Results> results;
}

class Results {
    String url;
}

2. 提示词工程

精心设计的提示词对AI处理效果至关重要:

  • 正向提示词:明确指定要执行的操作和期望效果

  • 负向提示词:排除不希望出现的问题和缺陷

3. 错误处理机制

  • 网络请求超时处理

  • 任务状态异常处理

  • 图片URL格式验证

部署注意事项

1. 环境配置

复制代码
// JDK版本兼容性处理
// System.setProperty("webdriver.chrome.driver", 
//     "src/main/resources/chromedriver-win64/chromedriver.exe");

2. 资源管理

确保正确管理浏览器驱动和网络连接资源,避免内存泄漏。

应用场景

  1. 汽车电商平台:自动获取和处理商品图片

  2. 汽车媒体:批量处理汽车评测图片

  3. 汽车数据服务:构建标准化的汽车图片库

  4. 营销素材生成:快速生成品牌统一的宣传图片

优化建议

  1. 性能优化

    • 实现图片缓存机制

    • 批量处理多个图片请求

    • 使用连接池管理HTTP连接

  2. 功能扩展

    • 支持更多图片源网站

    • 添加多种AI处理模板

    • 实现图片质量自动评估

  3. 稳定性提升

    • 增加重试机制

    • 实现故障转移

    • 添加监控和告警

总结

本项目展示了如何将Web爬虫技术与AI图像处理相结合,解决实际业务中的图片获取和处理需求。通过Selenium实现可靠的网页内容抓取,结合阿里云通义万相的强大AI能力,实现了自动化、智能化的图片处理流水线。

这种技术组合不仅适用于汽车领域,还可以扩展到其他需要大量图片处理和优化的应用场景,为开发者提供了强大的技术工具链。

技术栈:Java + Selenium + JSoup + HttpClient + 阿里云DashScope

相关推荐
AKAMAI34 分钟前
Akamai Cloud客户案例 | CloudMinister借助Akamai实现多云转型
人工智能·云计算
小a杰.2 小时前
Flutter 与 AI 深度集成指南:从基础实现到高级应用
人工智能·flutter
colorknight3 小时前
数据编织-异构数据存储的自动化治理
数据仓库·人工智能·数据治理·数据湖·数据科学·数据编织·自动化治理
Lun3866buzha3 小时前
篮球场景目标检测与定位_YOLO11-RFPN实现详解
人工智能·目标检测·计算机视觉
janefir3 小时前
LangChain框架下DirectoryLoader使用报错zipfile.BadZipFile
人工智能·langchain
齐齐大魔王3 小时前
COCO 数据集
人工智能·机器学习
AI营销实验室4 小时前
原圈科技AI CRM系统赋能销售新未来,行业应用与创新点评
人工智能·科技
爱笑的眼睛115 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
tap.AI5 小时前
RAG系列(一) 架构基础与原理
人工智能·架构
北邮刘老师5 小时前
【智能体互联协议解析】北邮ACPs协议和代码与智能体互联AIP标准的关系
人工智能·大模型·智能体·智能体互联网