comixify/api/views.py
Maciej Pęśko ffc6b2dc28
Add get comix endpoint (#18)
* 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
2018-11-18 13:48:39 +01:00

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)