当前位置: 首页 > article >正文

【Liblib】基于LiblibAI自定义模型,总结一下Python开发步骤

一、前言

Liblib AI(哩布哩布 AI)是一个集成了先进人工智能技术和用户友好设计的 AI 图像创作绘画平台和模型分享社区。

  • 强大的图像生成能力 :以 Stable Diffusion 技术为核心,提供文生图、图生图、图像后期处理等功能,支持多种模型和风格特征的模型(LoRA 模型),并允许用户进行面部修复和高清修复等操作。
  • 丰富的模型素材库 :拥有 10 万 + 的模型库,涵盖插画、摄影、3D 立体、商品摄影、设计、数字艺术、油画、水彩、二次元等 300 多种风格,用户可训练专属 LoRA 模型并参与社区互动。
  • 多端支持 :除了电脑端,还有手机端 APP,用户可以通过手机号验证登录使用,APP 版本具备 AI 绘画、AI 写作、AI 音频合成等功能。

Liblib是个图像ai平台,有根据文字生成图片,修复图片,图片重绘等多种功能。

LiblibAI官网:LiblibAI-哩布哩布AI - 中国领先的AI创作平台

LiblibAI开放平台文档:Docs

API试用计划:登录后可领取500试用积分,限时7天免费测试体验。

二、准备

1、首先要去官网注册一个账号并登录。

2、在官网首页左侧导航栏有API开发平台的菜单,点击进去,记得先登录账号。

 3、点击进去会看到两个使用api平台需要用到的key,把这两个key复制出来保存好。

三、主要步骤:

1、获取AccessKey与SecretKey

2、使用秘钥,获取网址必要的参数

3、请求网址,基于文生图参数,获取任务id

4、请求网址,基于任务id,获取图片网址

四、具体操作

1、接口网址

Liblib开放平台域名:https://openapi.liblibai.cloud(无法直接打开,需配合密钥访问)

2、生成API密钥

在登录Liblib领取API试用积分或购买API积分后,Liblib会生成开放平台访问密钥,用于后续API接口访问,密钥包括:​

  • AccessKey,API访问凭证,唯一识别访问用户,长度通常在20-30位左右,如:KIQMFXjHaobx7wqo9XvYKA​
  • SecretKey,API访问密钥,用于加密请求参数,避免请求参数被篡改,长度通常在30位以上,如:KppKsn7ezZxhi6lIDjbo7YyVYzanSu2d​

3、使用密钥​获取网址必要的参数

申请API密钥之后,需要在每次请求API接口的查询字符串中固定传递以下参数:​



如请求地址:https://test.xxx.com/api/genImg?AccessKey=KIQMFXjHaobx7wqo9XvYKA&Signature=test1232132&Timestamp=1725458584000&SignatureNonce=random1232

4、Python生成密码代码:

# 请求API接口的uri地址
text2img_uri = "/api/generate/webui/text2img"def make_sign(uri):"""生成签名"""# 当前毫秒时间戳timestamp = str(int(time.time() * 1000))# 随机字符串signature_nonce = str(uuid.uuid4()).replace('-', '')# 拼接请求数据content = '&'.join((uri, timestamp, signature_nonce))# 生成签名digest = hmac.new(SECRET_KEY.encode(), content.encode(), sha1).digest()# 移除为了补全base64位数而填充的尾部等号sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()return sign, timestamp, signature_nonce

注意:uri要与调用的接口保持一致

5、Python调用接口代码:

def call_liblibai_api():generateUuid = ""# 生成签名sign, timestamp, signature_nonce = make_sign(text2img_uri)# 准备请求参数uri = 'https://openapi.liblibai.cloud/api/generate/webui/text2img'  # 根据API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"templateUuid": "e10adc3949ba59abbe56e057f20f883e","generateParams": {"checkPointId": "ba34a22f1c044472a42b6051aac2afb3","prompt": "This is a 12-story hospital building. The ground floor houses the emergency room and pharmacy. The entrance is spacious and has a sheltered structure. Each floor from the second to the twelfth floor has a ward area, including a nurse station, ward Windows, and space for placing medical equipment. The building's exterior is simple, with Windows arranged regularly. From the outside, a clear 12-story structure can be seen.","negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),","sampler": 15,"steps": 20,"cfgScale": 7,"width": 768,"height": 1024,"imgCount": 1,"randnSource": 0,"seed": 2228967414,"restoreFaces": 0,"hiResFixInfo": {"hiresSteps": 20,"hiresDenoisingStrength": 0.75,"upscaler": 10,"resizedWidth": 1024,"resizedHeight": 1536}}}try:# 发送POST请求response = requests.post(uri, headers=headers, data=json.dumps(data))# 处理响应if response.status_code == 200:result = response.json()generateUuid = result['data']['generateUuid']print('API调用成功,返回结果:', result)else:print('API调用失败,状态码:', response.status_code, ',响应内容:', response.text)except requests.exceptions.RequestException as e:print('请求异常:', e)return generateUuid

注意:具体参数说明,请参考开发文档

6、接口返回示例,获取任务id:

{"code": 0,"msg": "","data": {"generateUuid": "8dcbfa2997444899b71357ccb7db378b"}
}

7、Python查看任务,并得到图片地址:

def get_cd_laowang_img(generateUuid):result = {}# 生成签名sign, timestamp, signature_nonce = make_sign(generate_webui_status_uri)# 准备请求参数uri = 'https://openapi.liblibai.cloud/api/generate/webui/status'  # 根据API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"generateUuid": generateUuid,}try:# 发送POST请求response = requests.post(uri, headers=headers, data=json.dumps(data))# 处理响应if response.status_code == 200:result = response.json()print('API调用成功,返回结果:', result)else:print('API调用失败,状态码:', response.status_code, ',响应内容:', response.text)except requests.exceptions.RequestException as e:print('请求异常:', e)return result

注意:因为api接口改变,所以需要再次生成签名

五、全部代码如下:

import requests
import json
import hmac
from hashlib import sha1
import base64
import time
import uuid# 配置信息
ACCESS_KEY = 'MXYG3cwFHVRa3wsLU5iJwQ'  # 替换为你的AccessKey
SECRET_KEY = '*************************'  # 替换为你的SecretKey# 请求API接口的uri地址
text2img_uri = "/api/generate/webui/text2img"
generate_webui_status_uri = "/api/generate/webui/status"def make_sign(uri):"""生成签名"""# 当前毫秒时间戳timestamp = str(int(time.time() * 1000))# 随机字符串signature_nonce = str(uuid.uuid4()).replace('-', '')# 拼接请求数据content = '&'.join((uri, timestamp, signature_nonce))# 生成签名digest = hmac.new(SECRET_KEY.encode(), content.encode(), sha1).digest()# 移除为了补全base64位数而填充的尾部等号sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()return sign, timestamp, signature_noncedef call_liblibai_api():generateUuid = ""# 生成签名sign, timestamp, signature_nonce = make_sign(text2img_uri)# 准备请求参数uri = 'https://openapi.liblibai.cloud/api/generate/webui/text2img'  # 根据API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"templateUuid": "e10adc3949ba59abbe56e057f20f883e","generateParams": {"checkPointId": "ba34a22f1c044472a42b6051aac2afb3","prompt": "This is a 12-story hospital building. The ground floor houses the emergency room and pharmacy. The entrance is spacious and has a sheltered structure. Each floor from the second to the twelfth floor has a ward area, including a nurse station, ward Windows, and space for placing medical equipment. The building's exterior is simple, with Windows arranged regularly. From the outside, a clear 12-story structure can be seen.","negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),","sampler": 15,"steps": 20,"cfgScale": 7,"width": 768,"height": 1024,"imgCount": 1,"randnSource": 0,"seed": 2228967414,"restoreFaces": 0,"hiResFixInfo": {"hiresSteps": 20,"hiresDenoisingStrength": 0.75,"upscaler": 10,"resizedWidth": 1024,"resizedHeight": 1536}}}try:# 发送POST请求response = requests.post(uri, headers=headers, data=json.dumps(data))# 处理响应if response.status_code == 200:result = response.json()generateUuid = result['data']['generateUuid']print('API调用成功,返回结果:', result)else:print('API调用失败,状态码:', response.status_code, ',响应内容:', response.text)except requests.exceptions.RequestException as e:print('请求异常:', e)return generateUuiddef get_cd_laowang_img(generateUuid):result = {}# 生成签名sign, timestamp, signature_nonce = make_sign(generate_webui_status_uri)# 准备请求参数uri = 'https://openapi.liblibai.cloud/api/generate/webui/status'  # 根据API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"generateUuid": generateUuid,}try:# 发送POST请求response = requests.post(uri, headers=headers, data=json.dumps(data))# 处理响应if response.status_code == 200:result = response.json()print('API调用成功,返回结果:', result)else:print('API调用失败,状态码:', response.status_code, ',响应内容:', response.text)except requests.exceptions.RequestException as e:print('请求异常:', e)return resultif __name__ == '__main__':generateUuid = call_liblibai_api()time.sleep(20)if generateUuid != "":print("generateUuid:", generateUuid)result = get_cd_laowang_img(generateUuid)image_url = result['data']['images'][0]["imageUrl"]print(f"generateUuid:{generateUuid}")print(f"图片地址:{image_url}")

相关文章:

【Liblib】基于LiblibAI自定义模型,总结一下Python开发步骤

一、前言 Liblib AI(哩布哩布 AI)是一个集成了先进人工智能技术和用户友好设计的 AI 图像创作绘画平台和模型分享社区。 强大的图像生成能力 :以 Stable Diffusion 技术为核心,提供文生图、图生图、图像后期处理等功能&#xff…...

CCF第七届AIOps国际挑战赛季军分享(RAG)

分享CCF 第七届AIOps国际挑战赛的季军方案,从我们的比赛经历来看,并不会,相反,私域领域问答的优秀效果说明RAG真的很重要 历经4个月的时间,从初赛赛道第1,复赛赛道第2,到最后决赛获得季军&…...

【Cesium入门教程】第七课:Primitive图元

Cesium丰富的空间数据可视化API分为两部分:primitive API面向三维图形开发者,更底层一些。 Entity API是数据驱动更高级一些。 // entity // 调用方便,封装完美 // 是基于primitive的封装// primitive // 更接近底层 // 可以绘制高级图形 /…...

【5分钟学Docker】Docker快速使用

目录 1. 概述 2. 基本操作 2.1. 镜像操作 2.2. 容器操作 2.3. 运行操作 2.4. 镜像保存 2.5. 镜像分享 3. 高级操作 4. 挂载 4.1. 目录挂载 4.2. 卷映射 1. 概述 Docker 镜像有镜像名称和TAG 2. 基本操作 2.1. 镜像操作 查看镜像 docker images docker image ls …...

opencv 一些简单的设置

输出当前程序启动的路径 可能会出现 🔧 设置 C17 标准(解决 std::filesystem 报错) 在 VS 中,右键项目 → 属性。 选择左边的 “C/C” → “语言” 找到 C语言标准(C Language Standard)选项。 设置为&…...

快速地解决Spring循环依赖问题

循环依赖的大体结构如下&#xff1a; AServiceImpl Slf4j Service AllArgsConstructor public class AServiceImpl extends ServiceImpl<AMapper, A> implements AService {private final BService bService; }BServiceImpl Slf4j Service AllArgsConstructor public …...

反向操作:如何用AI检测工具优化自己的论文“人味”?

大家好&#xff0c;这里是论文写手的一线自救指南&#x1f624; 在AIGC横行的今天&#xff0c;谁还没偷偷用过AI写几段论文内容&#xff1f;但问题来了&#xff1a;学校越来越会“识AI”了&#xff01; 有的学校甚至不看重复率&#xff0c;只盯AIGC率报告&#xff0c;一句“AI…...

CPS联盟+小程序聚合平台分销返利系统开发|小红书番茄网盘CPA拉新推广全解析

导语&#xff1a; 在私域流量与社交电商爆发的时代&#xff0c;CPS联盟分销返利系统与小红书CPA拉新推广成为企业增长的核心引擎。本文深度解析如何通过小程序聚合平台开发、多层级返利机制搭建及精准CPA推广策略&#xff0c;快速占领市场&#xff0c;实现用户裂变与收益倍增。…...

苹果处理器“仿生“命名背后的营销策略与技术创新

苹果处理器"仿生"命名背后的营销策略与技术创新 苹果自2017年推出A11 Bionic芯片以来&#xff0c;其处理器系列便开始采用"仿生"&#xff08;Bionic&#xff09;这一名称。这一命名并非源于芯片模仿生物神经系统的技术突破&#xff0c;而是苹果为提升芯片…...

监控易运维管理软件:架构稳健,组件强大

在当今的信息化时代&#xff0c;运维管理对于企业的稳定运营至关重要。一款好的运维管理软件&#xff0c;不仅能够帮助企业高效管理IT基础设施&#xff0c;还能提升运维效率&#xff0c;降低运维成本。今天&#xff0c;我要给大家介绍的&#xff0c;就是我们公司自主研发的监控…...

【Python】抽象基类ABC

抽象基类(Abstract Base Classes)的核心作用 抽象基类(ABC)是Python中一种特殊的类&#xff0c;它通过abc模块实现&#xff0c;主要服务于面向对象编程中的接口规范和设计约束。以下是它的核心作用&#xff1a; 1. 强制接口实现&#xff08;核心作用&#xff09; 确保子类必…...

数字IC后端零基础入门基础理论(Day2)

数字IC后端零基础入门基础理论&#xff08;Day1&#xff09; Placement Blockage: cell摆放阻挡层。它是用来引导工具做placement的一种物理约束或手段&#xff0c;目的是希望工具按照我们的要求来做标准单元的摆放。 它主要有三种类型&#xff0c;分别是hard placement bloc…...

零成本打造专属AI图像处理平台:IOPaint本地部署与远程访问指南

文章目录 前言1.什么是IOPaint&#xff1f;2.本地部署IOPaint3.IOPaint简单实用4.公网远程访问本地IOPaint5.内网穿透工具安装6.配置公网地址7.使用固定公网地址远程访问总结 前言 移动摄影的普及使得记录生活变得轻而易举&#xff0c;然而获得一张高质量的照片往往需要付出不…...

操作系统-物理结构

操作系统使用read系统调用&#xff0c;将逻辑地址转&#xff08;对于用户来说逻辑地址容易计算&#xff0c;因为各个逻辑块都相邻&#xff09;成了逻辑块号和块内偏移量&#xff0c;并根据分配存储方式&#xff0c;将逻辑块号转成物理块号和块内偏移量 对于用户来说的文件的一…...

CGO中引入 <cstddef> <vector> fatal error: cstddef: No such file or directory 失败的原因

原因 可以在CPP里面引入C的头文件&#xff0c;但不能在h文件引入 错误 fatal error: cstddef: No such file or directory 测试case&#xff0c;下面的可以&#xff0c;如果把他放到头文件就会报错 // main.go package main// #cgo CXXFLAGS: -stdc11 // #cgo LDFLAGS: -l…...

亚马逊电商广告革命:当AI推荐沦为红海陷阱,中国卖家如何破局?

一、算法同质化&#xff1a;跨境电商的广告效率危机 亚马逊广告系统正陷入一场自我迭代的悖论。其力推的AI推荐广告模板&#xff08;2023年覆盖率达78%&#xff09;&#xff0c;本意为降低运营门槛&#xff0c;却意外催生出"广告红海效应"——据Jungle Scout监测数据…...

《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot

第64篇&#xff1a;构建你的第一个大模型 Chatbot 手把手教你从零开始搭建一个基于大模型的聊天机器人 摘要 你是否想过&#xff0c;自己也能构建一个像 ChatGPT 一样能对话、能思考的聊天机器人&#xff08;Chatbot&#xff09;&#xff1f;别担心&#xff0c;这并不需要你是…...

STM32 片上资源之串口

STM32 片上资源之串口 1 串口介绍1.1 初步介绍1.2 主要特性1.2.1 USART特性1.2.2 UART特性 1.3 主要寄存器1.4 波特率计算1.5 常用工作模式1.5.1 轮询模式&#xff1a;1.5.2 中断模式&#xff1a;1.5.3 DMA模式&#xff1a; 1.6 常见应用1.7 注意事项 2 软件层面协议2.1 基本概…...

职坐标IT培训:互联网行业核心技能精讲

在互联网行业高速迭代的今天&#xff0c;掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求&#xff0c;系统拆解从需求分析到系统部署的完整能力模型&#xff0c;助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计&#xff0c;还是技术岗的…...

FlashInfer - 介绍 LLM服务加速库 地基的一块石头

FlashInfer - 介绍 LLM服务加速库 地基的一块石头 flyfish 大型语言模型服务中的注意力机制 大型语言模型服务&#xff08;LLM Serving&#xff09;迅速成为重要的工作负载。Transformer中的算子效率——尤其是矩阵乘法&#xff08;GEMM&#xff09;、自注意力&#xff08;S…...

MySQL 学习(七)undo log、redo log、bin log 的作用以及持久化机制

目录 一、前言二、三大日志的概念、作用、存储位置2.1 bin log 二进制执行日志2.2 undo log 事务回滚日志2.3 redo log 快速恢复日志 三、补充说明3.1 补充&#xff1a;为什么使用 buffer pool 而不直接修改磁盘中的数据&#xff1f;3.2 补充&#xff1a;同为操作数据变更的日志…...

vue中,created和mounted两个钩子之间调用时差值受什么影响

在 Vue 中&#xff0c;created 和 mounted 是两个生命周期钩子&#xff0c;它们之间的调用时差主要受以下几个因素影响&#xff1a; &#x1f7e2; 1. 模板复杂度与渲染耗时&#xff08;最主要因素&#xff09; mounted 的触发时间是在组件的 DOM 被挂载之后&#xff08;也就是…...

16S18S_OTU分析(3)

OTU的定义 OTU&#xff1a;操作分类单元是在系统发生学研究或群体遗传学研究中&#xff0c;为了便于进行分析&#xff0c;人为给某一个分类单元&#xff08;如品系、种、属、分组等&#xff09;设置的同一标志。目的&#xff1a;OTU用于将相似的序列归为一类&#xff0c;以便于…...

电机的导程和脉冲之间的关系

文章目录 导程计算关系相互影响关系 在电机相关领域中&#xff0c;导程通常是针对直线电机或带有丝杠等传动机构的电机系统而言的。 导程 导程是指丝杠或类似传动部件旋转一周时&#xff0c;与其相连的运动部件在轴向方向上移动的距离。例如&#xff0c;在一个由电机驱动丝杠来…...

时间序列预测建模的完整流程以及数据分析【学习记录】

文章目录 1.时间序列建模的完整流程2. 模型选取的和数据集2.1.ARIMA模型2.2.数据集介绍 3.时间序列建模3.1.数据获取3.2.处理数据中的异常值3.2.1.Nan值3.2.2.异常值的检测和处理&#xff08;Z-Score方法&#xff09; 3.3.离散度3.4.Z-Score3.4.1.概述3.4.2.公式3.4.3.Z-Score与…...

Flink和Spark的选型

在Flink和Spark的选型中&#xff0c;需要综合考虑多个技术维度和业务需求&#xff0c;以下是在项目中会重点评估的因素及实际案例说明&#xff1a; 一、核心选型因素 处理模式与延迟要求 Flink&#xff1a;基于事件驱动的流处理优先架构&#xff0c;支持毫秒级低延迟、高吞吐的…...

FFmpeg3.4 libavcodec协议框架增加新的decode协议

查看ffmepg下面的configure文件发现&#xff0c;config.h文件;解码协议的配置是通过libavcodec/allcodecs.c文件,通过查找DEC关键字生成的。 1、在libavcodec/allcodecs.c 新增REGISTER_ENCODER(MYCODE, mycode); REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); …...

无人机数据处理与特征提取技术分析!

一、运行逻辑 1. 数据采集与预处理 多传感器融合&#xff1a;集成摄像头、LiDAR、IMU、GPS等传感器&#xff0c;通过硬件时间戳或PPS信号实现数据同步&#xff0c;确保时空一致性。 边缘预处理&#xff1a;在无人机端进行数据压缩&#xff08;如JPEG、H.265&#xff09;…...

前端面试宝典---js垃圾回收机制

什么是垃圾回收 垃圾回收是指一种自动内存管理机制&#xff0c;当声明一个变量时&#xff0c;会在内存中开辟一块内存空间用于存放这个变量。当这个变量被使用过后&#xff0c;可能再也不需要它了&#xff0c;此时垃圾回收器会自动检测并回收这些不再使用的内存空间。垃圾回收…...

IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选

环境描述 IDEA 2025.1.1JDK17Maven 3.9.9 问题描述 IDEA 新建 SpringBoot 项目时&#xff0c;没有高版本 SpringBoot 可选&#xff0c;可以看到此时的最高版本为 3.0.2&#xff1a; 问题分析 返回上一步&#xff0c;可以发现 Spring Initializr 的服务地址为阿里云&#…...