Java调用火山引擎API实现看图说话
·
Java调用火山引擎API实现看图说话
在做AI音乐项目的时候,想到可以接一个图片转文字的API来为音乐生成的Prompt增加意境。
找到火山引擎有相应的图像识别Api可以调用:
https://www.volcengine.com/docs/86081/1660414
限制条件
| 名称 | 内容 |
|---|---|
| 图片要求 | 1. 图片格式:JPG、JPEG、PNG、BMP等常见格式,建议使用JPG格式。2. 图片文件大小:最大 5 MB。 |
请求说明
| 名称 | 内容 |
|---|---|
| 接口地址 | https://visual.volcengineapi.com |
| 请求方式 | POST |
| Content-Type | application/x-www-form-urlencoded |
请求参数
(1)header请求参数
公共请求参数
以下请求参数列表仅列出了接口请求参数和必要公共参数,完整公共参数列表见 公共参数
| 名称 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| X-Date | String | 是 | 使用UTC时间,精确到秒。请使用格式:YYYYMMDD’T’HHMMSS’Z’ ,例如:20201103T104027Z |
| Authorization | String | 是 | HMAC-SHA256:签名方法-Credential为签名凭证,其中:-AccessKeyId为访问密钥ID,可在 访问密钥(Access Key) 获取;-ShortDate为请求的短时间,使用UTC时间,精确到日。请使用格式:YYYYMMDD,例如:20180201;-Region为请求地区,国内一般为为cn-north-1;-Service为请求的服务,一般为cv;-SignedHeaders为参与签名计算的头部信息,content-type 和 host 为必选头部;-Signature为签名,可在 签名方法 获取。注:我们提供了SDK及签名示例供您实现服务快速接入,具体可参考 快速接入例如:HMAC-SHA256 Credential={AccessKeyId}/{ShortDate}/{Region}/{Service}/request, SignedHeaders={SignedHeaders}, Signature={Signature} |
| X-Security-Token | String | 否 | 指安全令牌服务(Security Token Service,STS) 颁发的临时安全凭证中的SessionToken,使用长期密钥时无需填写该参数。 |
(2)Query参数
业务请求参数
| 参数 | 可选/必选 | 类型 | 说明 |
|---|---|---|---|
| Action | 必选 | String | 接口名,取值:PoemMaterial |
| Version | 必选 | String | 版本号,取值:2020-08-26 |
(3)Body参数
业务请求参数
| 参数 | 可选/必选 | 类型 | 说明 |
|---|---|---|---|
| image_base64 | 必选(二选一,优先生效) | String | 图片文件,base64编码 |
| image_url | 必选(二选一) | String | 图片文件URL |
调用SDK Demo
package com.volcengine.example.visual;
import com.alibaba.fastjson.JSON;
import com.volcengine.service.visual.IVisualService;
import com.volcengine.service.visual.impl.VisualServiceImpl;
import com.volcengine.service.visual.model.request.VisualPoemMaterialRequest;
import com.volcengine.service.visual.model.response.VisualPoemMaterialResponse;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class PoemMaterialDemo {
public static void main(String[] args) throws IOException {
IVisualService visualService = VisualServiceImpl.getInstance();
// call below method if you dont set ak and sk in ~/.vcloud/config
visualService.setAccessKey("您的 AK");
visualService.setSecretKey("您的 SK");
VisualPoemMaterialRequest req = new VisualPoemMaterialRequest();
String base64 = jpgToBase64("test.jpg");
req.setImageBase64(base64);
try {
VisualPoemMaterialResponse response = visualService.poemMaterial(req);
System.out.println(JSON.toJSONString(response));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String jpgToBase64(String jpgPath) throws IOException {
File file = new File(jpgPath);
byte[] buf = new byte[(int) file.length()];
try (FileInputStream in = new FileInputStream(file)) {
in.read(buf);
}
// 火山 SDK 要求 **去掉 data:image/...;base64,** 前缀,纯字符串
return Base64.encodeBase64String(buf);
}
}
结果展示
test.jpg
输出返回:
{
"code": 10000,
"data": {
"poems": [
"闻道东来有诏,却恐西留无计,顿使雪山轻。",
"雪山万叠看不厌,雪尽山青又一奇。",
"严冬不肃杀,何以见阳春。——吕温《孟冬蒲津关河亭作》",
"锦里遥看井底迷,雪山忽认屏间误。",
"金水朗然明皎洁,雪山堆积就中高。"
]
},
"message": "Success",
"request_id": "20251013211650D09F42159FAAEE6A2450",
"time_elapsed": "7.146749252s"
}
注意
如果是开通的子用户,需要给子用户在平台开通使用API的权限。
否则会有如下报错:
java.lang.Exception: {"ResponseMetadata":{"RequestId":"20251013210804E25BF53105A9CB5B57F2","Action":"PoemMaterial","Version":"2020-08-26","Service":"cv","Region":"cn-north-1","Error":{"CodeN":100013,"Code":"AccessDenied","Message":"User is not authorized to perform: cv:PoemMaterial on resource: "}}}
在测试时,test.jpg文件记得放在根目录下,即pom.xml的同级目录下。
Java 在启动时,“当前工作目录” 并不是 .java 文件所在的目录,而是 你启动 JVM 时所在的目录(即“工作目录”)。
在 IDEA 里,这个目录默认是 Project 的根目录(VisualCommonRequestDemo 那一级),而不是 src/main/java/... 或者 target/classes/...。
更多推荐
所有评论(0)