2026-03-17 13:17:02 +08:00

209 lines
8.1 KiB
Python
Raw Permalink 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.

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from rest_framework import serializers
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from . import vi # 确保你的vi模块可用
# 定义 Schema
class ImageUrlRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
class ImageUrlResponseSchema(serializers.Serializer):
image_url = serializers.URLField(help_text="处理后的图片URL")
class ErrorResponseSchema(serializers.Serializer):
message = serializers.CharField(help_text="错误消息")
details = serializers.CharField(help_text="详细错误信息")
class Meta:
ref_name = "AliViErrorResponse"
class TemplateRequestSchema(serializers.Serializer):
template_id = serializers.CharField(required=True, help_text="模板ID")
image_url = serializers.URLField(required=True, help_text="图片URL")
class BeautyRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
sharp = serializers.FloatField(required=False, default=1, help_text="锐化程度范围0-1")
smooth = serializers.FloatField(required=False, default=1, help_text="平滑程度范围0-1")
white = serializers.FloatField(required=False, default=0.3, help_text="美白程度范围0-1")
class TidyupRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
shape_type = serializers.IntegerField(required=False, default=0, help_text="五官调整类型0-瘦脸1-大眼2-瘦鼻")
strength = serializers.FloatField(required=False, default=1, help_text="调整强度范围0-1")
class MakeupRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
resource_type = serializers.IntegerField(required=False, default=0, help_text="化妆类型0-淡妆1-浓妆")
strength = serializers.FloatField(required=False, default=1, help_text="化妆强度范围0-1")
class LiquifyRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
slim_degree = serializers.FloatField(required=False, default=1, help_text="瘦脸程度范围0-1")
class RetouchRequestSchema(serializers.Serializer):
image_url = serializers.URLField(required=True, help_text="图片URL")
retouch_degree = serializers.FloatField(required=False, default=1, help_text="磨皮程度范围0-1")
whitening_degree = serializers.FloatField(required=False, default=1, help_text="美白程度范围0-1")
@swagger_auto_schema(
method='post',
request_body=ImageUrlRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="添加图片模板",
tags=['图像处理']
)
@api_view(['POST'])
def add_template(request):
"""添加模板"""
try:
image_url = request.data.get('image_url')
my_vi = vi.VI()
resp = my_vi.add_template(image_url)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=TemplateRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="合并图片和人脸模板",
tags=['图像处理']
)
@api_view(['POST'])
def merge_image_face(request):
"""合并图片和模板"""
try:
template_id = request.data.get('template_id')
image_url = request.data.get('image_url')
my_vi = vi.VI()
resp = my_vi.merge_image_face(template_id, image_url)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=BeautyRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="图片美颜处理",
tags=['图像处理']
)
@api_view(['POST'])
def face_beauty(request):
"""美颜"""
try:
image_url = request.data.get('image_url')
sharp = request.data.get('sharp', 1)
smooth = request.data.get('smooth', 1)
white = request.data.get('white', 0.3)
my_vi = vi.VI()
resp = my_vi.face_beauty(image_url, sharp, smooth, white)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=TidyupRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="五官调整",
tags=['图像处理']
)
@api_view(['POST'])
def face_tidyup(request):
"""五官调整"""
try:
image_url = request.data.get('image_url')
shape_type = request.data.get('shape_type', 0)
strength = request.data.get('strength', 1)
my_vi = vi.VI()
resp = my_vi.face_tidyup(image_url, shape_type, strength)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=MakeupRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="化妆效果处理",
tags=['图像处理']
)
@api_view(['POST'])
def face_makeup(request):
"""化妆"""
try:
image_url = request.data.get('image_url')
resource_type = request.data.get('resource_type', 0)
strength = request.data.get('strength', 1)
my_vi = vi.VI()
resp = my_vi.face_makeup(image_url, resource_type, strength)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=LiquifyRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="瘦脸处理",
tags=['图像处理']
)
@api_view(['POST'])
def liquify_face(request):
"""瘦脸"""
try:
image_url = request.data.get('image_url')
slim_degree = request.data.get('slim_degree', 1)
my_vi = vi.VI()
resp = my_vi.liquify_face(image_url, slim_degree)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)
@swagger_auto_schema(
method='post',
request_body=RetouchRequestSchema,
responses={
200: openapi.Response('成功', ImageUrlResponseSchema),
400: openapi.Response('请求错误', ErrorResponseSchema)
},
operation_description="皮肤磨皮和美白",
tags=['图像处理']
)
@api_view(['POST'])
def retouch_skin(request):
"""皮肤磨皮"""
try:
image_url = request.data.get('image_url')
retouch_degree = request.data.get('retouch_degree', 1)
whitening_degree = request.data.get('whitening_degree', 1)
my_vi = vi.VI()
resp = my_vi.retouch_skin(image_url, retouch_degree, whitening_degree)
return Response({"image_url": resp})
except Exception as e:
return Response({"message": "An error occurred", "details": str(e)}, status=status.HTTP_400_BAD_REQUEST)