fix(视频): 场景/商品也送火山审核, 避免含真人参考图被判「疑似真人」拒

场景图与商品图可能出现真人(模特出镜/上身), 此前从不送审, 视频路只能
传原始直链 → 火山报 InputImageSensitiveContentDetected.PrivacyInformation
→ 整批段失败。现按角色流程把 scene/product_image 也纳入送审:

- REVIEW_CATEGORIES 增加 scene + product_image(送审 + 轮询自动覆盖)
- 场景/商品基础资产生成后 on_commit 自动静默送审, 拿到 remote_id
  → 视频路 _seedance_ref_url 换成 asset:// 素材库引用即可放行
- 前端场景卡 + 商品三视图面板挂同款审核盾牌, 可查状态/手动补送审

未改动生成前硬性过审闸(避免无真人的场景/商品被误拦; asset:// 在
processing 态也能引用, 故不拦也能正常出片)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-06-29 17:01:16 +08:00
co-authored by Claude Opus 4.8
parent f89de99c05
commit 6f9b728ac3
3 changed files with 22 additions and 8 deletions
+5 -4
View File
@@ -1337,11 +1337,12 @@ def run_base_asset_task(*, task_id: str) -> None:
group.candidate_assets.add(asset)
group.adopted_asset = asset
group.save(update_fields=["adopted_asset", "prompt", "updated_at"])
# 真人资产:事务提交后静默送火山审核(best-effort,网络调用放 on_commit 避免占着事务)
if kind == BaseAssetGroup.Kind.PERSON:
from apps.assets.review import submit_asset_for_review
# 含人脸资产(角色 / 场景 / 商品):事务提交后静默送火山审核(best-effort,网络调用放 on_commit 避免占着事务)
# 场景 / 商品也送审,因为它们可能出现真人(模特出镜/上身),拿到 remote_id 后视频路才能换 asset:// 引用,
# 否则传原始直链会被火山判「疑似真人」拒。submit_asset_for_review 自身按 REVIEW_CATEGORIES 兜底,非送审类不会真送。
from apps.assets.review import submit_asset_for_review
transaction.on_commit(lambda a=asset: submit_asset_for_review(a))
transaction.on_commit(lambda a=asset: submit_asset_for_review(a))
except Exception as exc: # noqa: BLE001 — 失败要退费并把错误记进 AITask 供前端轮询读取;不向上抛(避免 celery 重试二次扣费)
task.status = AITask.Status.FAILED
task.error_message = str(exc)
+4 -2
View File
@@ -34,8 +34,10 @@ class Asset(TeamOwnedModel):
FREE_CREATE = "free_create", "Free Create" # 自由创作(图片趴)
STORYBOARD = "storyboard", "Storyboard" # 分镜图(视频趴·送审)
# 送审范围(火山人像审核):视频趴含人脸 = 角色定妆照 / 三视图 / 分镜图。图片趴(上身图/套图/创作)不送审
REVIEW_CATEGORIES = ("person", "tri_view", "storyboard")
# 送审范围(火山人像审核):视频趴含人脸 = 角色定妆照 / 三视图 / 分镜图 / 场景 / 商品图
# 场景图与商品图也可能出现真人(模特出镜/上身),不送审则视频路只能传原始直链 → 火山判「疑似真人」拒;
# 送审后拿到 remote_id,视频路换 asset:// 素材库引用即可放行。图片趴(上身图/套图/创作)仍不送审。
REVIEW_CATEGORIES = ("person", "tri_view", "storyboard", "scene", "product_image")
name = models.CharField(max_length=255)
asset_type = models.CharField(max_length=24, choices=Type.choices)