更换发型成功
This commit is contained in:
Binary file not shown.
+105
-34
@@ -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
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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")
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 294 KiB |
Reference in New Issue
Block a user