更换发型成功

This commit is contained in:
xsl
2026-01-18 22:10:48 +08:00
parent bf2d7d2bba
commit 11dd30eddf
8 changed files with 306 additions and 282 deletions
Binary file not shown.
+105 -34
View File
@@ -2,6 +2,7 @@ from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import json
import os
import time
import requests
import base64
from io import BytesIO
@@ -15,29 +16,40 @@ CORS(app) # 启用CORS,允许跨域请求
# 加载发型数据
def load_hairstyles_from_file():
"""
从hair_res.txt文件加载发型数据
从hairId2url.txt文件加载发型数据
解析文件中的发型ID和URL对应关系
"""
hairstyles = []
try:
# 读取hair_res.txt文件
with open('../hair_res.txt', 'r', encoding='utf-8') as f:
# 读取hairId2url.txt文件
with open('../hairId2url.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 解析文件内容,提取图片URL
for i, line in enumerate(lines):
# 解析文件内容,提取发型ID和URL
for line in lines:
line = line.strip()
# 查找以https开头的行,这些是图片URL
if line.startswith('https://'):
# 生成发型ID和名称
hairstyle_id = f'hair_{i:03d}'
hairstyle_name = f'发型{i}'
# 添加到发型列表
hairstyles.append({
'id': hairstyle_id,
'name': hairstyle_name,
'image_url': line
})
# 查找包含 -> 分隔符的行,这些是发型ID和URL的映射
if '->' in line and '.jpg' in line:
# 分割行获取文件名和URL
parts = line.split('->')
if len(parts) == 2:
filename = parts[0].strip()
url = parts[1].strip()
# 提取发型ID(去掉.jpg后缀)
if filename.endswith('.jpg'):
hair_id = filename[:-4]
# 生成发型名称
hairstyle_name = f'发型{hair_id[-4:]}'
# 添加到发型列表
hairstyles.append({
'id': hair_id,
'name': hairstyle_name,
'image_url': url
})
except Exception as e:
print(f'加载发型数据失败: {str(e)}')
@@ -129,30 +141,89 @@ def allowed_file(filename):
def call_remote_api(image_data, hairstyle_id):
"""
调用远程API处理图片
注意:这里是模拟实现,实际项目中需要根据远程API的要求进行调整
根据test_hair.py的实现方式
"""
try:
# 构建请求数据
# 注意:这里需要根据远程API的实际要求调整请求格式
files = {'image': ('upload.jpg', BytesIO(image_data), 'image/jpeg')}
data = {'hairstyle_id': hairstyle_id}
# 将图片数据转换为base64格式
encoded_string = base64.b64encode(image_data).decode('utf-8')
img64_str = f"data:image/jpeg;base64,{encoded_string}"
# 构建请求数据(参考test_hair.py的格式)
data = {
"hair_id": hairstyle_id,
"task_id": f"task_{int(time.time())}", # 生成唯一的任务ID
"user_img_path": img64_str,
"is_hr": "false",
"output_format": "base64"
}
# 打印传入的参数(只打印部分信息,避免日志过长)
print("=== 调用远程API参数 ===")
print(f"hair_id: {hairstyle_id}")
print(f"task_id: {data['task_id']}")
print(f"is_hr: {data['is_hr']}")
print(f"output_format: {data['output_format']}")
print(f"user_img_path 长度: {len(img64_str)}")
print(f"user_img_path 前缀: {img64_str[:50]}...") # 只打印前缀
print("====================")
# 设置请求头(参考test_hair.py
headers = {'Content-Type': 'application/json'}
# 发送请求到远程API
# 注意:实际项目中需要替换为真实的远程API地址
# response = requests.post(
# app.config['REMOTE_API_URL'],
# files=files,
# data=data,
# timeout=app.config['API_TIMEOUT']
# )
print(f"发送请求到: {app.config['REMOTE_API_URL']}")
response = requests.post(
app.config['REMOTE_API_URL'],
headers=headers,
json=data,
timeout=app.config['API_TIMEOUT']
)
# 模拟远程API返回结果
# 这里简单返回原始图片数据作为模拟结果
# 实际项目中应该使用远程API的返回结果
return image_data
# 打印响应状态
print(f"响应状态码: {response.status_code}")
print(f"响应内容长度: {len(response.text)}")
# 只打印响应内容的前100个字符,避免base64数据过长
response_text = response.text
if len(response_text) > 100:
print(f"响应内容: {response_text[:100]}...")
else:
print(f"响应内容: {response_text}")
# 解析响应数据
response_data = response.json()
# 检查响应状态
if response.status_code != 200:
raise Exception(f"远程API返回错误: {response_data.get('msg', '未知错误')}")
# 参考test_hair.py的处理方式,直接检查是否有'data'字段
# 不再依赖'state'字段,因为远程API可能使用不同的成功标识
result_base64 = response_data.get('data', '')
# 检查是否有数据返回,即使有msg字段也不视为错误
# 因为远程API可能在成功时同时返回msg: "success"和data字段
if not result_base64:
# 如果没有'data'字段,检查是否有其他错误信息
error_msg = response_data.get('msg', '未知错误')
raise Exception(f"远程API返回错误: {error_msg}")
# 如果有数据返回,即使msg字段有值也视为成功
# 打印成功信息
success_msg = response_data.get('msg', '成功')
print(f"远程API调用成功: {success_msg}")
# 移除可能的前缀
if result_base64.startswith("data:image"):
result_base64 = result_base64.split(",", 1)[1]
# 解码base64数据为图片
result_image = base64.b64decode(result_base64)
print("远程API调用成功,返回处理后的图片")
return result_image
except Exception as e:
print(f'调用远程API失败: {str(e)}')
# 如果远程API调用失败,返回原始图片
# 实际项目中应该根据需要进行错误处理
return image_data
@app.route('/')
+2 -3
View File
@@ -4,11 +4,10 @@ class Config:
APP_NAME = "Hair Change Color"
# 远程发型更换API地址
# 注意:这里需要根据实际的远程API地址进行修改
REMOTE_API_URL = "https://api.example.com/change-hair"
REMOTE_API_URL = "http://xiangsilian.com:18801/api/swapHair/v1"
# 远程API请求超时时间(秒)
API_TIMEOUT = 30
API_TIMEOUT = 120 # 延长超时时间,因为发型更换可能需要60秒
# 文件上传配置
MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16MB
+9
View File
@@ -177,7 +177,15 @@ async function handleConfirmHairstyle() {
}
try {
// 显示加载状态,并提示用户可能需要等待的时间
elements.loading.innerHTML = `
<div class="loading-spinner"></div>
<p>正在处理发型更换,请稍候...</p>
<p style="font-size: 0.9rem; color: #666;">此过程可能需要10-60秒</p>
`;
showLoading();
// 发起发型更换请求
const response = await changeHair(uploadedImage, selectedHairstyle);
if (response.success) {
@@ -187,6 +195,7 @@ async function handleConfirmHairstyle() {
alert(response.message || '处理失败,请重试');
}
} catch (error) {
console.error('处理失败:', error);
alert('处理失败,请重试');
} finally {
hideLoading();
+64
View File
@@ -0,0 +1,64 @@
图片文件名 -> OSS URL 映射
生成时间: 2026-01-18 21:55:09
--------------------------------------------------------------------------------
1953267161121464322.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953267161121464322.jpg
1953267288284372994.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953267288284372994.jpg
1953270523594317826.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953270523594317826.jpg
1953270724765720577.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953270724765720577.jpg
1953271922151432194.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953271922151432194.jpg
1953272913265467394.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953272913265467394.jpg
1953288800932503554.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953288800932503554.jpg
1954536242109784066.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536242109784066.jpg
1954536297776586754.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536297776586754.jpg
1954536402516746241.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536402516746241.jpg
1954536893304840194.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536893304840194.jpg
1954536956919848962.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536956919848962.jpg
1954537022875279362.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537022875279362.jpg
1954537085882114050.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537085882114050.jpg
1954537191729569793.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537191729569793.jpg
1954537709436706817.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537709436706817.jpg
1954537743532204034.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537743532204034.jpg
1954537961069780994.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537961069780994.jpg
1954538119216013313.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538119216013313.jpg
1954538156499181569.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538156499181569.jpg
1954538259330932738.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538259330932738.jpg
1954538335306555393.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538335306555393.jpg
1980312945301954561.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980312945301954561.jpg
1980313052302843905.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313052302843905.jpg
1980313166576656385.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313166576656385.jpg
1980313210109337601.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313210109337601.jpg
1980313433502162946.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313433502162946.jpg
1980313576506957825.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313576506957825.jpg
1980313740403580930.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313740403580930.jpg
1980313819915001858.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313819915001858.jpg
1980314032369082369.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314032369082369.jpg
1980314209322573825.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314209322573825.jpg
1980314290419441665.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314290419441665.jpg
1980314381058351106.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314381058351106.jpg
1980314477720281090.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314477720281090.jpg
1980314710101499906.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314710101499906.jpg
1980314764421931009.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314764421931009.jpg
1980314868713299969.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314868713299969.jpg
1980315179934851074.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980315179934851074.jpg
1980315238260842497.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980315238260842497.jpg
1980361636742209537.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980361636742209537.jpg
1980367742952579074.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367742952579074.jpg
1980367781510815746.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367781510815746.jpg
1980367800787836929.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367800787836929.jpg
1980367852847538177.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367852847538177.jpg
1980367968627105793.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367968627105793.jpg
1980368109866098690.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368109866098690.jpg
1980368205752082434.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368205752082434.jpg
1980368368847593473.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368368847593473.jpg
1980368465631158274.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368465631158274.jpg
1980368588293578754.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368588293578754.jpg
1980413320612847618.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980413320612847618.jpg
1980415346071609345.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980415346071609345.jpg
1980415897056354306.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980415897056354306.jpg
1981177324700549122.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177324700549122.jpg
1981177378714796034.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177378714796034.jpg
1981177477423546370.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177477423546370.jpg
1981177594750812162.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177594750812162.jpg
1981177742742634497.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177742742634497.jpg
1981177931859607554.jpg -> https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177931859607554.jpg
-245
View File
@@ -1,245 +0,0 @@
OSS 图片下载地址列表
生成时间: 2026-01-18 19:43:03
有效期: 7天
----------------------------------------------------------------------------------------------------
1. 1953267183426772993.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953267183426772993.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=J30TNCKCN%2Fga2cHnxxl2sXf3HAQ%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953267183426772993.jpg
2. 1953267306382794754.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953267306382794754.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=iwhuJi4QJNcXeTGSAbTXMAIICUs%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953267306382794754.jpg
3. 1953270535736827906.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953270535736827906.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=tAGbcGZOZ1nwhb9iLxLgtYcRn0U%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953270535736827906.jpg
4. 1953270765379166210.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953270765379166210.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=7Owy2MKtfo3J8z%2Bd6HV4bWlSFwc%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953270765379166210.jpg
5. 1953271979655340033.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953271979655340033.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=9z9jlCoNvhssT0%2FE8TUhbyktXmk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953271979655340033.jpg
6. 1953273003010990081.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953273003010990081.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=qbuFkWtdcvoBrKZBSQMQ%2FeDmwf4%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953273003010990081.jpg
7. 1953288832876322818.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1953288832876322818.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=BA21g5N1j6gFI7tAC8JVAbRPUzs%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1953288832876322818.jpg
8. 1954536274779217921.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954536274779217921.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=JCV%2Fg7TFB7BEew9HF9Y%2Fzqb%2Bjqw%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536274779217921.jpg
9. 1954536378869260289.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954536378869260289.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=qMc35r6evXIFcFY9att6DLc1EGA%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536378869260289.jpg
10. 1954536462671454210.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954536462671454210.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=n5xCbJpM5rEsZK7BUwy8GwY9ttk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536462671454210.jpg
11. 1954536908916039681.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954536908916039681.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=vTCweNOaT1XPe91pNenaBcYCJd4%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536908916039681.jpg
12. 1954536989530562562.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954536989530562562.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=wXztzfZl%2B5TrvqZ9%2BrlVeDL%2F3VI%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954536989530562562.jpg
13. 1954537056534568962.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954537056534568962.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=k1t6Ah%2BUnYx7JyoBxPoB7dVHMBo%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537056534568962.jpg
14. 1954537118522187778.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954537118522187778.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=lZq6QdHis005jUprFxNLOFEJWOc%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537118522187778.jpg
15. 1954537220443774978.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954537220443774978.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=b%2F%2BXRbP7VaIbgiNWc3sArWZl9OQ%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537220443774978.jpg
16. 1954537722342580225.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954537722342580225.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=sV4pQvEz2aJK%2BVAzgk5gJD%2BvRDw%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537722342580225.jpg
17. 1954537836041773058.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954537836041773058.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=rrrWyVsRXJzLm72gpzt7OglHGSk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954537836041773058.jpg
18. 1954538018150064130.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954538018150064130.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=EtojY0%2BajUSRIIPHBgW7B3HO%2BMs%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538018150064130.jpg
19. 1954538127558483970.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954538127558483970.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=FUcuPhab2Hy45Li8t%2FyrHSAxyeI%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538127558483970.jpg
20. 1954538206658863106.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954538206658863106.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=4ZzTGliU0xlyGRr2FOgCaa1lvDM%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538206658863106.jpg
21. 1954538312665702402.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954538312665702402.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=8XtLzjFoU%2F4UVM1vWW2Tb3JiHw4%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538312665702402.jpg
22. 1954538399596847105.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1954538399596847105.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=cP6hECwOodfmvvDFJ7cRdPJ2pYo%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1954538399596847105.jpg
23. 1980312959671640066.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980312959671640066.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=wyZoqiybARkhX0VzLaxNCATR8l0%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980312959671640066.jpg
24. 1980313137564655617.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313137564655617.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=sCunXHIhDpwfzorRS%2FMELL5S51w%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313137564655617.jpg
25. 1980313176303247362.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313176303247362.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=75xDKKqm6LMEx78V12pJd6K8V30%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313176303247362.jpg
26. 1980313387905884161.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313387905884161.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=LtVwta24J10UN9NCgApt%2FhNL0ac%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313387905884161.jpg
27. 1980313509876244482.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313509876244482.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=CVbR16xL4IMcv77Bo1fYfFcynSE%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313509876244482.jpg
28. 1980313698993217538.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313698993217538.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=LVB21yqsCl%2FoniUuxHKkfYpsfK0%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313698993217538.jpg
29. 1980313788407390209.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313788407390209.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=Y8nL5%2Ba1X0cSnDV2vxAoV55Yj%2FM%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313788407390209.jpg
30. 1980313965625122818.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980313965625122818.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=Cr3kp3pVEMU4JkJXVmb47H9Pf5A%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980313965625122818.jpg
31. 1980314095635963906.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314095635963906.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=Naaq3DWK09vfFhiZocB7vB4vc5U%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314095635963906.jpg
32. 1980314270513274881.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314270513274881.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=pQz2WLnrvgfXGHH5gMNp0XDvgkU%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314270513274881.jpg
33. 1980314359856144386.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314359856144386.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=usf%2FpFGpN19DnJbiuSPMz70ytYE%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314359856144386.jpg
34. 1980314448372736001.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314448372736001.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=XbnCavqYxxdrlwqNoGUvqt7BK3M%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314448372736001.jpg
35. 1980314530165858305.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314530165858305.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=IF8pHMgpj5ehMrKwJ9f%2FSqg3Sy4%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314530165858305.jpg
36. 1980314735825166337.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314735825166337.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=x3vi49fohgoiSOVu2F4fDFKOgtA%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314735825166337.jpg
37. 1980314825046401025.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314825046401025.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=IDYtf4CqcQv80hkeAkun2IgpFZI%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314825046401025.jpg
38. 1980314913021927426.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980314913021927426.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=k0Vj6KBMo5oQZdRE1B%2FfAvKxWIc%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980314913021927426.jpg
39. 1980315190596771842.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980315190596771842.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=O4JoBUGCr7tdaP0TKHTfsXslomY%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980315190596771842.jpg
40. 1980315251485483009.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980315251485483009.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=AlASa41wpcIckobaL78w6bFqi94%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980315251485483009.jpg
41. 1980361645583802369.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980361645583802369.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=t09flD8Er%2Fz7E7JdrSJHP1UHDCk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980361645583802369.jpg
42. 1980367759775932418.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980367759775932418.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=2CZztgTQcXsofVDjpkmUgtbTinA%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367759775932418.jpg
43. 1980367786975993857.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980367786975993857.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=goyLdGIttHQFCOE1s74HWG7IhEQ%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367786975993857.jpg
44. 1980367822954733569.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980367822954733569.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=01BmPdUDD5DmWrgKHHEzVN3x6no%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367822954733569.jpg
45. 1980367945432604674.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980367945432604674.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=7xcWvSmpGTDl%2FfWBdoEEVAi%2F%2F%2Fw%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980367945432604674.jpg
46. 1980368060729827329.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368060729827329.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=Iq0vyIpE5SlUDKrnDptmw1Zxfqw%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368060729827329.jpg
47. 1980368182154928129.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368182154928129.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=23QZbeAHpSpWl1GByEPqhZRt1Uc%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368182154928129.jpg
48. 1980368318314618881.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368318314618881.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=2rLl6YDVxzNA5b7OTNoR5TJjiBQ%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368318314618881.jpg
49. 1980368442726064130.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368442726064130.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=OIRFLuemfFMp874fESBXFU6CXHo%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368442726064130.jpg
50. 1980368569217884162.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368569217884162.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=SOURnVC0Xg0OHDw5JtgmhMb5b6I%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368569217884162.jpg
51. 1980368701497843714.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980368701497843714.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=0Kyv6mvAqCW4SW6Dsh1mkYGwyQk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980368701497843714.jpg
52. 1980413331509649409.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980413331509649409.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=aF%2F%2BT54NeSsVPs%2B8%2FlFjQcQLH04%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980413331509649409.jpg
53. 1980415354346971137.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980415354346971137.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=FVbFJ6Iob2oKWj0R3FhVlyV1eKc%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980415354346971137.jpg
54. 1980415913099567106.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1980415913099567106.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=xDxM7XKPshiaoch4Tf6rhNIciO0%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1980415913099567106.jpg
55. 1981177348821991426.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177348821991426.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=j1kSUgMSRd4mHom2wXplTwk%2F%2Bdk%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177348821991426.jpg
56. 1981177450269622273.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177450269622273.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=7UUYMWTEZsTFgceH6geSHc60Uz8%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177450269622273.jpg
57. 1981177567613665282.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177567613665282.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=sw07uihKbWggf8pn2%2Bppnx1pwIo%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177567613665282.jpg
58. 1981177689399476226.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177689399476226.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=kwm9YVWio8Q8%2FFLOnqCyNy3FvwQ%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177689399476226.jpg
59. 1981177812825260034.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177812825260034.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=gFs3LlHWc9eF%2Bm8DT6%2F8cSXDLoI%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177812825260034.jpg
60. 1981177943427497985.jpg
http://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images%2F1981177943427497985.jpg?OSSAccessKeyId=LTAI5t7nY99pt7fN9J56A5vN&Expires=1769341383&Signature=hAyOiP9nLt9y7S3sYSPl8aH%2Flpw%3D
https://xiangsilian.oss-cn-beijing.aliyuncs.com/hair_images/1981177943427497985.jpg
+126
View File
@@ -0,0 +1,126 @@
import threading
import requests
import json
import base64
import time
import random
url = 'http://xiangsilian.com:18801/api/swapHair/v1'
headers = {'Content-Type': 'application/json'}
data = {
"hair_id": "1907651680352395265",
"task_id": "345564352345",
"user_img_path": "https://cdn.meidaojia.com/ZoeFiles/testuser_8.JPG",
"is_hr": "false",
"output_format": "base64"
}
def image_to_base64(file_path, mime_type=None):
"""
将图片文件转换为带Base64前缀的Data URI字符串
参数:
file_path (str): 图片文件路径
mime_type (str): 可选,指定MIME类型。如果为None,则根据文件扩展名自动判断
返回:
str: 带Base64前缀的Data URI字符串
"""
# 如果没有指定MIME类型,根据文件扩展名推断
if mime_type is None:
extension = file_path.split('.')[-1].lower()
mime_types = {
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'png': 'image/png',
'gif': 'image/gif',
'webp': 'image/webp',
'bmp': 'image/bmp'
}
mime_type = mime_types.get(extension, 'application/octet-stream')
# 读取文件内容并编码为Base64
with open(file_path, 'rb') as image_file:
encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
# 组合成Data URI格式
return f"data:{mime_type};base64,{encoded_string}"
img64_str = image_to_base64("wertwert.jpg")
data['user_img_path'] = img64_str
responses = []
lock = threading.Lock()
send_index = 0
def send_request(start_time):
try:
sleep_time = start_time
time.sleep(sleep_time)
global send_index
send_data = data
response = requests.post(url, headers=headers, json=send_data)
with lock: # 加锁,防止多线程同时修改 responses
responses.append(response)
except Exception as e:
with lock:
responses.append({"error": str(e)})
threads = []
num_requests = 1
time_start = time.time()
start_time = 0
for _ in range(num_requests):
start_time = 0
t = threading.Thread(target=send_request, args=(start_time,))
t.start()
threads.append(t)
for t in threads:
t.join()
end_time = time.time()
total_time = (end_time - time_start)
qps = num_requests/total_time
print(f"num_requests:{num_requests} total_time:{total_time} qps:{qps}")
import base64
import os
def save_base64_image(base64_str, filename):
"""
将 Base64 编码的图片字符串保存为本地 JPG 文件。
:param base64_str: Base64 编码的图片字符串(可能包含 data:image/jpeg;base64, 前缀)
:param filename: 保存的文件名(例如 'image.jpg'
"""
# 如果包含 data URL 前缀,去掉它
if base64_str.startswith("data:image"):
base64_str = base64_str.split(",", 1)[1]
try:
image_data = base64.b64decode(base64_str)
with open(filename, "wb") as f:
f.write(image_data)
print(f"图片已保存为 {filename}")
except Exception as e:
print(f"保存图片失败: {e}")
# 打印所有响应
for i, resp in enumerate(responses, 1):
print(f"请求 {i} 结果: {resp.status_code, resp.text[:128]}")
json_obj = json.loads(resp.text)
data_string = json_obj['data']
save_base64_image(data_string, f"response_{i}.jpg")
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB