如何使用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
相关产品推荐
相关产品推荐

