一、前言
Liblib是个图像ai平台,有根据文字生成图片,修复图片,图片重绘等多种功能,想了解更多信息可以去它的官网查看。
LiblibAI官网:LiblibAI-哩布哩布AI - 中国领先的AI创作平台
LiblibAI开放平台文档:Docs
我们需要对接的是它开发平台中提供的api来使用它的功能,我这里节省大家去看它开发平台文档和研究怎么对接的时间,提供快速简易对接步骤。
我这里提供两种方式的对接,大家按需选择:
(1)使用http对接。
(2)使用平台提供的jdk对接。
注意:这是一个付费的平台,不过注册的新账号有送免费试用的积分,用来学习和试用都是足够的,大家按需使用。
二、准备
1.首先要去官网注册一个账号并登录。
2.在官网首页左侧导航栏有API开发平台的菜单,点击进去,记得先登录账号。
3.点击进去会看到两个使用api平台需要用到的key,把这两个key复制出来保存好。
三、使用http对接
开发平台的域名地址:https://openapi.liblibai.cloud
本文中使用的都是这里的api,具体信息大家可以打开文档地址查看。
上面开发平台文档中的api调用都是需要在请求url地址后面加上下面这几个参数:
上面这些签名参数是根据下面规则来生成的。
官方开发平台文档中有提供java、python、nodejs的生成签名参数代码样例,我这里直接使用文档中提供的生成签名参数java代码,然后自己改了一下方便使用。
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.RandomStringUtils;
public class SignUtil {
private final static String txt2img_uri = "/api/generate/webui/text2img";
private final static String check_uri = "/api/generate/webui/status";
private final static String img2img_uri = "/api/generate/webui/img2img";
private final static String get_model_version = "/api/model/version/get";
/**
* 生成请求签名
* 其中相关变量均为示例,请替换为您的实际数据
*/
public static String makeSign() {
// API访问密钥
String secretKey = "your_key";
// 请求API接口的uri地址
String uri = txt2img_uri;
// 当前毫秒时间戳
Long timestamp = System.currentTimeMillis();
System.out.println("=============timestamp: " + timestamp);
// 随机字符串
String signatureNonce = RandomStringUtils.randomAlphanumeric(10);
System.out.println("=============signatureNonce: " + signatureNonce);
// 拼接请求数据
String content = uri + "&" + timestamp + "&" + signatureNonce;
try {
// 生成签名
SecretKeySpec secret = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secret);
return Base64.encodeBase64URLSafeString(mac.doFinal(content.getBytes()));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("no such algorithm");
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
System.out.println("=============Signature: " + makeSign());
}
}
运行后会得到上面那些签名参数,然后就可以利用postman或者其他http请求工具来进行调试了。
上面得到请求api的签名参数后,还需要构造请求体,下面我们来构造请求体。
我这里调用的是文字生成图片的api: /api/generate/webui/text2img
我提供一个json数据示例,大家可以直接拿来调用,调用的时候记得删除注释。
{
"templateUuid": "6f7c4652458d4802969f8d089cf5b91f", // 官方提供的固定模板id
"generateParams": {
"prompt": "A boy with a car", // 图片描述,必须是英文,不能是中文
"steps": 20, // 采样步数
"width": 768, // 图片的宽度
"height": 768, // 图片的长度
"imgCount": 1, // 生成的图片数量
"seed": -1, // 随机种子值,-1表示随机
"restoreFaces": 0 // 面部修复,0关闭,1开启
}
}
调用成功后会返回一个生成图片的任务id,因为图片的生成需要时间,所以我们需要利用这个id去调用查询图片状态的api来查看图片是否已经生成成功。
查询图片生成状态的api:/api/generate/webui/status
api的请求体:
{
"generateUuid": "生成的图片任务id"
}
复制图片地址用浏览器打开就可以看到生成好的图片了。
到这里就已经成功接入liblibai的开发平台了,把上面的http请求写成代码就可以在项目中调用了,其他的api接口和参数可以自行去官方文档中查看,调用套路都是一样的。
四、使用jdk对接(仅限java使用)
使用官方平台提供的jdk对接会比上面的http对接简单很多。
jdk的git地址:https://github.com/gravitywp/liblib-java-sdk?tab=readme-ov-file#installation
引入maven包,如果使用Gradle和其他打包的方式可以去上面的git地址查看。
<dependency>
<groupId>cloud.liblibai.openapi</groupId>
<artifactId>java-sdk</artifactId>
<version>0.0.7</version>
<scope>compile</scope>
</dependency>
引包成功后,直接复制官方提供的样例代码就可以直接调用api了。
import cloud.liblibai.client.LibLib;
import cloud.liblibai.openapi.client.ApiException;
import cloud.liblibai.openapi.client.model.*;
public class Example {
public static void main(String[] args) throws ApiException, InterruptedException {
//LibLib api = new LibLib(); //Read LIBLIB_ACCESS_KEY and LIBLIB_SECRET_KEY from env
LibLib api = new LibLib("access_key", "secret_key") // 填入你自己的key
TextToImageRequest request = new TextToImageRequest();
TextToImageRequestGenerateParams params = new TextToImageRequestGenerateParams();
params.prompt("1 girl").imgCount(2);
request.generateParams(params);
request.templateUuid("6f7c4652458d4802969f8d089cf5b91f");
//NOTE(gz): 异步 SDK 调用方法
SubmitResponse submitResponse = api.submitTextToImage(request);
while(true) {
StatusResponse status = api.getStatus(new StatusRequest().generateUuid(submitResponse.getData().getGenerateUuid()));
System.out.println(status);
if (status.getData().getGenerateStatus() == GenerateStatus.SUCCEED) {
System.out.println(status.getData().getImages());
break;
}
Thread.sleep(5000);
}
//NOTE(gz): 同步 SDK 调用方法
StatusResponseData statusResponseData = api.textToImage(request);
if (statusResponseData.getGenerateStatus() == GenerateStatus.SUCCEED) {
System.out.println(statusResponseData.getImages());
}
}
}
调用成功会返回图片地址。
五、结束
祝大家玩得愉快~