You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java向微软计算机视觉API发送本地图片而非URL

加载本地图片并调用微软计算机视觉API

我来帮你搞定本地图片调用微软计算机视觉API的问题!官网示例都是从URL拉取图片,但本地文件只需要把图片转成字节流作为请求体发送就行,核心思路很简单,下面一步一步来:

第一步:确认依赖

先确保你的项目里已经引入了指定的两个库:

<!-- Apache HttpClient 4.2.4 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.4</version>
</dependency>

<!-- org.json 20170516 -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20170516</version>
</dependency>

第二步:完整示例代码

下面是补全后的可运行代码,包含本地图片读取、API请求发送和响应解析:

package com.mparnisari.test;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class LocalImageVisionApi {

    // 替换成你自己的微软计算机视觉API订阅密钥
    private static final String SUBSCRIPTION_KEY = "YOUR_OWN_SUBSCRIPTION_KEY";
    // 替换成对应区域的API端点(比如分析图片、OCR等,根据你的需求选)
    private static final String API_ENDPOINT = "https://YOUR_REGION.api.cognitive.microsoft.com/vision/v3.2/analyze?visualFeatures=Categories,Description,Color";

    public static void main(String[] args) {
        try {
            // 1. 读取本地图片为字节数组
            String localImagePath = "C:/your/image/path/photo.jpg"; // 换成你的本地图片路径
            byte[] imageBytes = Files.readAllBytes(Paths.get(localImagePath));

            // 2. 构建HTTP客户端和POST请求
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost(API_ENDPOINT);

            // 3. 设置关键请求头
            postRequest.setHeader("Ocp-Apim-Subscription-Key", SUBSCRIPTION_KEY);
            postRequest.setHeader("Content-Type", "application/octet-stream"); // 本地图片必须用这个Content-Type

            // 4. 将图片字节数组作为请求体
            HttpEntity requestEntity = new ByteArrayEntity(imageBytes);
            postRequest.setEntity(requestEntity);

            // 5. 发送请求并获取响应
            HttpResponse response = httpClient.execute(postRequest);
            HttpEntity responseEntity = response.getEntity();

            // 6. 解析并打印响应结果
            if (responseEntity != null) {
                String responseJsonStr = EntityUtils.toString(responseEntity);
                JSONObject formattedResponse = new JSONObject(responseJsonStr);
                System.out.println("API返回结果:\n" + formattedResponse.toString(4)); // 格式化输出JSON,方便阅读
            }

        } catch (Exception e) {
            System.err.println("调用过程出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

几个关键注意点

  • 替换占位符:一定要把SUBSCRIPTION_KEY换成你自己的密钥,API_ENDPOINT换成对应区域和功能的官方端点(比如做OCR的话端点是/vision/v3.2/read/analyze)。
  • 图片路径:确保localImagePath是正确的本地文件路径,API支持JPG、PNG等常见格式。
  • 异常处理:示例里只做了基础捕获,实际项目可以细化处理(比如文件不存在、API返回4xx/5xx错误码的情况)。
  • HttpClient版本:因为你用的是4.2.4,所以用DefaultHttpClient,如果是更高版本的HttpClient,写法会有小变化(比如用HttpClientBuilder创建客户端)。

内容的提问来源于stack exchange,提问作者pumo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:33:41