Files
change_hair/project/hair_service_sd/upload_oss.py
T
xsl 215663177a feat: 新增mask区域重绘功能 + 羽化贴回优化 + 发丝增强
新增功能:
- inpaint_mask.py: mask区域重绘服务(enhance/pure_inpaint两种模式)
  严格只在mask区做SD inpainting,发丝自然化
- /inpaint 页面 + /api/inpaint 接口:画板手绘mask + 提示词编辑 + denoising可调
- enhance_hair.webui_img2img: 新增denoising_strength参数(原硬编码0.35)

羽化贴回优化(hair_swap_manual.py 步骤⑥):
- feather_px(羽化范围)+ feather_alpha(羽化强度)拆分为两个独立参数
- 改为只羽化边缘(mask内部保持硬切,仅边缘带渐变)
- 新增黑底羽化对比图(纯黑背景凸显边缘过渡)

其他改动:
- OSS/COS密钥脱敏:改为可选import,未设环境变量时不崩溃
- manual页面:发型列表改为本次训练的8个(含hair_flow)
- enhance二次增强:重绘区改为「原图头发∪手绘mask」并外扩10%+减发际线带3cm
- 发型清单文档更新:179→180个可用发型(+hair_flow)

涉及文件:
- 新增: inpaint_mask.py, inpaint.html
- 修改: app.py, manual.html, hair_swap_manual.py, enhance_hair.py
- 修改: oss_module.py, upload_oss.py, cos_module.py(密钥脱敏)
- 文档: HAIRSTYLES_AVAILABLE.md, hairstyles_available.csv
2026-07-08 20:38:31 +08:00

44 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import time
import os
try:
import oss2
_OSS2_AVAILABLE = True
except Exception as _e:
print(f'[OSS upload_oss] ⚠️ oss2 导入失败({_e})OSS 上传功能不可用')
_OSS2_AVAILABLE = False
class OSS_object():
def __init__(self):
if not _OSS2_AVAILABLE:
print('[OSS upload_oss] oss2 不可用,OSS 功能关闭')
self.bucket = None
return
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '<your-access-key-id>')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '<your-access-key-secret>')
bucket_name = os.getenv('OSS_TEST_BUCKET', '<your-bucket-name>')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '<your-endpoint>')
# 密钥未设置时标记不可用(不抛异常)
if '<' in access_key_id or '<' in access_key_secret:
print('[OSS upload_oss] ⚠️ 未设置 OSS 密钥环境变量,OSS 上传功能不可用')
self.bucket = None
return
self.bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
def upload_file(self, file, target_name):
t0 = time.time()
with open(oss2.to_unicode(file), 'rb') as f:
ret = self.bucket.put_object(target_name, f)
print(ret.headers['x-oss-request-id'])
url = "https://oss-aidigitalfield.oss-cn-beijing.aliyuncs.com/{}".format(target_name)
print('耗时:{},签名url的地址为:{}'.format(time.time() - t0, url))
return url
if __name__ == '__main__':
oss_2 = OSS_object()
t0 = time.time()
url = oss_2.upload_file('/home/szlc/Downloads/多中心录入模版.xlsx', 'tongji/多中心录入模版.xlsx')
print('url:', url)