forked from prehistoric-systems/comixify
* Add endpoint to getting images * Add migration * Fix minor bug * Fix another bug * Fix problem with CartoonGAN not change model and add timestamp to Comic * Add minimum response delay Update sample
89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
from rest_framework.parsers import FormParser, MultiPartParser
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from .models import Video, Comic
|
|
from .serializers import VideoSerializer, YouTubeDownloadSerializer
|
|
|
|
|
|
class Comixify(APIView):
|
|
parser_classes = (FormParser, MultiPartParser)
|
|
|
|
def post(self, request):
|
|
"""
|
|
Receives video, and returns comic image
|
|
"""
|
|
|
|
serializer = VideoSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
video_file = serializer.validated_data["file"]
|
|
frames_mode = serializer.validated_data["frames_mode"]
|
|
rl_mode = serializer.validated_data["rl_mode"]
|
|
image_assessment_mode = serializer.validated_data["image_assessment_mode"]
|
|
style_transfer_mode = serializer.validated_data["style_transfer_mode"]
|
|
|
|
video = Video.objects.create(file=video_file)
|
|
comix, timings = video.create_comix(
|
|
yt_url='',
|
|
frames_mode=frames_mode,
|
|
rl_mode=rl_mode,
|
|
image_assessment_mode=image_assessment_mode,
|
|
style_transfer_mode=style_transfer_mode
|
|
)
|
|
|
|
response = {
|
|
"status_message": "ok",
|
|
"comic": comix.file.url,
|
|
"timings": timings,
|
|
}
|
|
# Remove to spare storage
|
|
video.file.delete()
|
|
return Response(response)
|
|
|
|
|
|
class ComixifyFromYoutube(APIView):
|
|
def post(self, request):
|
|
"""
|
|
Receives video, and returns comic image
|
|
"""
|
|
|
|
serializer = YouTubeDownloadSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
yt_url = serializer.validated_data["url"]
|
|
frames_mode = serializer.validated_data["frames_mode"]
|
|
rl_mode = serializer.validated_data["rl_mode"]
|
|
image_assessment_mode = serializer.validated_data["image_assessment_mode"]
|
|
style_transfer_mode = serializer.validated_data["style_transfer_mode"]
|
|
|
|
try:
|
|
comix = Comic.objects.filter(yt_url=yt_url,
|
|
frames_mode=frames_mode,
|
|
rl_mode=rl_mode,
|
|
image_assessment_mode=image_assessment_mode,
|
|
style_transfer_mode=style_transfer_mode
|
|
).latest('timestamp')
|
|
response = {
|
|
"status_message": "ok",
|
|
"comic": comix.file.url,
|
|
}
|
|
except Comic.DoesNotExist:
|
|
video = Video()
|
|
_, yt_download_time = video.download_from_youtube(yt_url)
|
|
video.save()
|
|
comix, timings = video.create_comix(
|
|
yt_url=yt_url,
|
|
frames_mode=frames_mode,
|
|
rl_mode=rl_mode,
|
|
image_assessment_mode=image_assessment_mode,
|
|
style_transfer_mode=style_transfer_mode
|
|
)
|
|
|
|
timings['yt_download_time'] = yt_download_time
|
|
response = {
|
|
"status_message": "ok",
|
|
"comic": comix.file.url,
|
|
"timings": timings,
|
|
}
|
|
# Remove to spare storage
|
|
video.file.delete()
|
|
return Response(response)
|