WDHK 2025-05-04 11:17 采纳率: 87.5%
浏览 82
已结题

关于#人工智能#的问题:如何把浏览器截屏图片给AI进行回答使用VUE+spingboot+java

如何把浏览器截屏图片给AI进行回答使用VUE+spingboot+java

浏览器截图部分使用js
/**
 * 截取屏幕图像
 * 此函数尝试捕获用户屏幕的内容通过navigator.mediaDevices.getDisplayMedia API
 * 它用于屏幕共享或者截屏功能在Web应用中*****/
const screenshot = document.querySelector("#scr-btn");
const capturescreen =() =>{
    try{
        const stream =navigator.mediaDevices.getDisplayMedia();
        console.log(stream);

}catch(error){
    console.log(error)
}
}
screenshotBth.addEventListener("click",capturescreen);

AI使用java

讯飞星火live
大佬的链接https://coderlaoluo.feishu.cn/wiki/VJnTwCXnwiwKt7kQNGGc8Uu7n5e

想在vue项目里直接做成

img

img

img

img

  • 写回答

6条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-04 11:21
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    浏览器截屏图片给AI进行回答的解决方案 (Vue + SpringBoot + Java)

    1. 前端实现 (Vue.js)

    1.1 使用HTML5 API截取屏幕

    // 截屏功能实现
    const captureScreen = async () => {
      try {
        // 获取屏幕流
        const stream = await navigator.mediaDevices.getDisplayMedia({
          video: { cursor: "always" },
          audio: false
        });
        
        // 创建视频元素来显示流
        const video = document.createElement('video');
        video.srcObject = stream;
        video.onloadedmetadata = () => {
          video.play();
          
          // 创建canvas来捕获帧
          const canvas = document.createElement('canvas');
          canvas.width = video.videoWidth;
          canvas.height = video.videoHeight;
          const ctx = canvas.getContext('2d');
          ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
          
          // 转换为Blob
          canvas.toBlob(async (blob) => {
            // 停止屏幕共享
            stream.getTracks().forEach(track => track.stop());
            
            // 准备上传到后端
            const formData = new FormData();
            formData.append('screenshot', blob, 'screenshot.png');
            
            // 发送到后端API
            try {
              const response = await fetch('/api/ai/process-screenshot', {
                method: 'POST',
                body: formData
              });
              const result = await response.json();
              console.log('AI response:', result);
              // 处理AI返回的结果
            } catch (error) {
              console.error('Error uploading screenshot:', error);
            }
          }, 'image/png');
        };
      } catch (error) {
        console.error('Error capturing screen:', error);
      }
    };
    
    // 绑定到按钮点击事件
    document.querySelector('#scr-btn').addEventListener('click', captureScreen);
    

    1.2 Vue组件实现

    <template>
      <div>
        <button @click="captureScreen">截屏并发送给AI</button>
        <div v-if="aiResponse">{{ aiResponse }}</div>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          aiResponse: null
        };
      },
      methods: {
        async captureScreen() {
          try {
            // 同上captureScreen函数实现
            // ...
            
            // 使用axios发送请求
            const response = await this.$axios.post('/api/ai/process-screenshot', formData, {
              headers: {
                'Content-Type': 'multipart/form-data'
              }
            });
            
            this.aiResponse = response.data;
          } catch (error) {
            console.error('Error:', error);
            this.aiResponse = '处理截图时出错';
          }
        }
      }
    };
    </script>
    

    2. 后端实现 (SpringBoot + Java)

    2.1 控制器层

    @RestController
    @RequestMapping("/api/ai")
    public class AIController {
        
        @Autowired
        private AIService aiService;
        
        @PostMapping("/process-screenshot")
        public ResponseEntity<AIResponse> processScreenshot(@RequestParam("screenshot") MultipartFile screenshot) {
            try {
                // 调用AI服务处理图片
                AIResponse response = aiService.processImage(screenshot);
                return ResponseEntity.ok(response);
            } catch (Exception e) {
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                        .body(new AIResponse("Error processing image: " + e.getMessage()));
            }
        }
    }
    

    2.2 AI服务层

    @Service
    public class AIService {
        
        // 这里以讯飞星火API为例
        public AIResponse processImage(MultipartFile imageFile) throws IOException {
            // 1. 将图片转换为Base64
            String base64Image = Base64.getEncoder().encodeToString(imageFile.getBytes());
            
            // 2. 构建请求体
            Map<String, Object> requestBody = new HashMap<>();
            requestBody.put("image", base64Image);
            requestBody.put("question", "请分析这张图片内容");
            
            // 3. 调用AI API (这里使用讯飞星火API)
            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.set("Authorization", "Bearer YOUR_API_KEY");
            
            HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
            
            // 4. 发送请求并获取响应
            ResponseEntity<AIResponse> response = restTemplate.exchange(
                "https://api.xfyun.cn/v1/ai/image/analysis",
                HttpMethod.POST,
                requestEntity,
                AIResponse.class
            );
            
            return response.getBody();
        }
    }
    

    2.3 响应模型

    public class AIResponse {
        private String answer;
        private String status;
        private String error;
        
        // 构造器、getter和setter
        public AIResponse() {}
        
        public AIResponse(String answer) {
            this.answer = answer;
            this.status = "success";
        }
        
        // getters and setters
    }
    

    3. 完整流程说明

    1. 前端流程:

      • 用户点击截屏按钮
      • 浏览器调用getDisplayMedia API获取屏幕内容
      • 将屏幕内容转换为图像(Canvas)
      • 将图像转换为Blob并上传到后端
    2. 后端流程:

      • 接收前端上传的截图
      • 将图片转换为AI API需要的格式(如Base64)
      • 调用AI服务(如讯飞星火)进行分析
      • 将AI响应返回给前端
    3. AI集成:

      • 根据选择的AI服务(如讯飞星火)调整API调用方式
      • 处理AI返回的结果并格式化

    4. 注意事项

    1. 浏览器兼容性:

      • getDisplayMedia API需要现代浏览器支持
      • 可能需要HTTPS环境才能正常工作
    2. AI服务选择:

      • 讯飞星火API需要申请API Key
      • 也可以考虑其他AI服务如百度AI、阿里云视觉智能等
    3. 安全性:

      • 后端应验证上传的文件确实是图片
      • 限制上传文件大小
      • 对AI API Key进行妥善保管
    4. 性能优化:

      • 前端可以对大图进行压缩
      • 后端可以缓存AI响应结果

    这个解决方案结合了Vue.js的前端能力、SpringBoot的后端处理能力以及Java的AI集成能力,实现了从浏览器截屏到AI分析的全流程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 创建了问题 5月4日