Java調用火山引擎API實現看圖説話

在做AI音樂項目的時候,想到可以接一個圖片轉文字的API來為音樂生成的Prompt增加意境。

找到火山引擎有相應的圖像識別Api可以調用:

限制條件

名稱

內容

圖片要求

1. 圖片格式:JPG、JPEG、PNG、BMP等常見格式,建議使用JPG格式。2. 圖片文件大小:最大 5 MB。

請求參數

(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

[轉載]讓Java説話-用Java實現語音引擎_#java

輸出返回:

{
    "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/...