diff --git a/api/models.py b/api/models.py index 8a836b8..a814d0b 100644 --- a/api/models.py +++ b/api/models.py @@ -34,11 +34,12 @@ class Video(models.Model): else: raise TooLargeFile() - def create_comic(self, frames_mode=0, rl_mode=0): + def create_comic(self, frames_mode=0, rl_mode=0, image_assessment_mode=0): keyframes, keyframes_extraction_time = KeyFramesExtractor.get_keyframes( video=self, frames_mode=frames_mode, - rl_mode=rl_mode + rl_mode=rl_mode, + image_assessment_mode=image_assessment_mode ) stylized_keyframes, stylization_time = StyleTransfer.get_stylized_frames(frames=keyframes) comic_image, layout_generation_time = LayoutGenerator.get_layout(frames=stylized_keyframes) diff --git a/api/serializers.py b/api/serializers.py index 7c956db..47c7c05 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -8,6 +8,7 @@ class VideoSerializer(serializers.Serializer): file = serializers.FileField() frames_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_FRAMES_SAMPLING_MODE) rl_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_RL_MODE) + image_assessment_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_IMAGE_ASSESSMENT_MODE) def validate(self, attrs): file = attrs.get("file") @@ -22,3 +23,4 @@ class YouTubeDownloadSerializer(serializers.Serializer): url = serializers.URLField() frames_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_FRAMES_SAMPLING_MODE) rl_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_RL_MODE) + image_assessment_mode = serializers.IntegerField(min_value=0, max_value=1, default=settings.DEFAULT_IMAGE_ASSESSMENT_MODE) diff --git a/api/views.py b/api/views.py index 54343bd..77cde9d 100644 --- a/api/views.py +++ b/api/views.py @@ -21,7 +21,8 @@ class Comixify(APIView): video = Video.objects.create(file=video_file) comic_image, timings = video.create_comic( frames_mode=serializer.validated_data["frames_mode"], - rl_mode=serializer.validated_data["rl_mode"] + rl_mode=serializer.validated_data["rl_mode"], + image_assessment_mode=serializer.validated_data["image_assessment_mode"] ) comic, from_nparray_time = Comic.create_from_nparray(comic_image, video) timings['from_nparray_time'] = from_nparray_time @@ -52,7 +53,8 @@ class ComixifyFromYoutube(APIView): video.save() comic_image, timings = video.create_comic( frames_mode=serializer.validated_data["frames_mode"], - rl_mode=serializer.validated_data["rl_mode"] + rl_mode=serializer.validated_data["rl_mode"], + image_assessment_mode=serializer.validated_data["image_assessment_mode"] ) comic, from_nparray_time = Comic.create_from_nparray(comic_image, video) timings['from_nparray_time'] = from_nparray_time diff --git a/frontend/client/App.js b/frontend/client/App.js index 275c605..db415a3 100644 --- a/frontend/client/App.js +++ b/frontend/client/App.js @@ -31,13 +31,15 @@ class App extends React.Component { drop_errors: [], result_comics: null, framesMode: "0", - rlMode: "0" + rlMode: "0", + imageAssessment: "0" }; this.onVideoDrop = this.onVideoDrop.bind(this); this.onModelChange = this.onModelChange.bind(this); this.handleResponse = this.handleResponse.bind(this); this.onYouTubeSubmit = this.onYouTubeSubmit.bind(this); this.onSamplingChange = this.onSamplingChange.bind(this); + this.onImageAssessmentChange = this.onImageAssessmentChange.bind(this); } static onVideoUploadProgress(progressEvent) { let percentCompleted = Math.round( @@ -56,6 +58,12 @@ class App extends React.Component { this.setState({ framesMode: value }) + } + onImageAssessmentChange(e) { + let value = e.currentTarget.value; + this.setState({ + imageAssessment: value + }) } handleResponse(res) { if (res.data["status_message"] === "ok") { @@ -70,11 +78,12 @@ class App extends React.Component { } } processVideo(video) { - let { framesMode, rlMode } = this.state + let { framesMode, rlMode, imageAssessment } = this.state; let data = new FormData(); data.append("file", video); data.set('frames_mode', parseInt(framesMode)); data.set('rl_mode', parseInt(rlMode)); + data.set("image_assessment_mode", parseInt(imageAssessment)); post(COMIXIFY_API, data, { headers: { "content-type": "multipart/form-data" }, onUploadProgress: App.onVideoUploadProgress @@ -102,11 +111,12 @@ class App extends React.Component { this.processVideo(files[0]); } submitYouTube(link) { - let { framesMode, rlMode } = this.state; + let { framesMode, rlMode, imageAssessment } = this.state; post(FROM_YOUTUBE_API, { url: link, frames_mode: parseInt(framesMode), - rl_mode: parseInt(rlMode) + rl_mode: parseInt(rlMode), + image_assessment_mode: parseInt(imageAssessment) }) .then(this.handleResponse) .catch(err => { @@ -132,7 +142,9 @@ class App extends React.Component { }); } render() { - let { state, drop_errors, result_comics, framesMode, rlMode, videoId } = this.state; + let { + state, drop_errors, result_comics, framesMode, rlMode, videoId, imageAssessment + } = this.state; let showUsage = [ App.appStates.INITIAL, App.appStates.UPLOAD_ERROR, @@ -198,9 +210,30 @@ class App extends React.Component { onChange={this.onModelChange} /> + +