From 7bfc3e277d9e1e0e6752b4613c2586d293a93b79 Mon Sep 17 00:00:00 2001 From: Maleehak Date: Thu, 11 Apr 2024 15:15:44 +0500 Subject: [PATCH] introduce api --- .../example/BriefMe/BriefMeApplication.java | 13 ------ .../YoutubeVideoSummaryController.java | 24 ++++++++++ .../service/client/AudioExtractor.java | 2 +- .../service/client/AudioToTextConverter.java | 2 +- .../client/YoutubeVideoSummaryService.java | 5 +++ .../impl/AudioToTextConverterImpl.java | 14 ++++-- .../service/impl/CustomTextSummarizer.java | 2 + .../service/impl/Mp4AudioExtractorImpl.java | 44 +++++++++++-------- .../impl/YoutubeAudioExtractorImpl.java | 6 ++- .../impl/YoutubeVideoSummaryServiceImpl.java | 34 ++++++++++++++ 10 files changed, 109 insertions(+), 37 deletions(-) create mode 100644 backend/src/main/java/com/example/BriefMe/controllers/YoutubeVideoSummaryController.java create mode 100644 backend/src/main/java/com/example/BriefMe/service/client/YoutubeVideoSummaryService.java create mode 100644 backend/src/main/java/com/example/BriefMe/service/impl/YoutubeVideoSummaryServiceImpl.java diff --git a/backend/src/main/java/com/example/BriefMe/BriefMeApplication.java b/backend/src/main/java/com/example/BriefMe/BriefMeApplication.java index 0f12bbe..d9cbc47 100644 --- a/backend/src/main/java/com/example/BriefMe/BriefMeApplication.java +++ b/backend/src/main/java/com/example/BriefMe/BriefMeApplication.java @@ -17,18 +17,5 @@ public class BriefMeApplication { public static void main(String[] args) throws IOException { SpringApplication.run(BriefMeApplication.class, args); - - AudioExtractor audioExtractor = new YoutubeAudioExtractorImpl(); - String audioFile = audioExtractor.extractAudio("https://www.youtube.com/watch?v=Fkd9TWUtFm0"); - - AudioToTextConverter audioToTextConverter = new AudioToTextConverterImpl(); - String text = audioToTextConverter.covertAudioToText(audioFile); - - TextSummarizer textSummarizer = new CustomTextSummarizer(); - int numberOfLines = 5; - String summary = textSummarizer.generateSummary(text, numberOfLines); - - log.info("Text summarization completed..."); - log.info("Summary: {}", summary); } } diff --git a/backend/src/main/java/com/example/BriefMe/controllers/YoutubeVideoSummaryController.java b/backend/src/main/java/com/example/BriefMe/controllers/YoutubeVideoSummaryController.java new file mode 100644 index 0000000..61d6533 --- /dev/null +++ b/backend/src/main/java/com/example/BriefMe/controllers/YoutubeVideoSummaryController.java @@ -0,0 +1,24 @@ +package com.example.BriefMe.controllers; + +import com.example.BriefMe.service.client.YoutubeVideoSummaryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api") +public class YoutubeVideoSummaryController { + + @Autowired + YoutubeVideoSummaryService youtubeVideoSummaryService; + + @GetMapping("/get-summary") + public ResponseEntity generateSummary(@RequestParam String video, @RequestParam int lines){ + String summary = youtubeVideoSummaryService.generateSummary(video, lines); + return ResponseEntity.ok(summary); + } + +} diff --git a/backend/src/main/java/com/example/BriefMe/service/client/AudioExtractor.java b/backend/src/main/java/com/example/BriefMe/service/client/AudioExtractor.java index 85e25ce..679425d 100644 --- a/backend/src/main/java/com/example/BriefMe/service/client/AudioExtractor.java +++ b/backend/src/main/java/com/example/BriefMe/service/client/AudioExtractor.java @@ -3,5 +3,5 @@ import java.io.IOException; public interface AudioExtractor { - String extractAudio(String inputVideo) throws IOException; + String extractAudio(String inputVideo); } diff --git a/backend/src/main/java/com/example/BriefMe/service/client/AudioToTextConverter.java b/backend/src/main/java/com/example/BriefMe/service/client/AudioToTextConverter.java index 624daae..1112c70 100644 --- a/backend/src/main/java/com/example/BriefMe/service/client/AudioToTextConverter.java +++ b/backend/src/main/java/com/example/BriefMe/service/client/AudioToTextConverter.java @@ -3,5 +3,5 @@ import java.io.IOException; public interface AudioToTextConverter { - String covertAudioToText(String audioFile) throws IOException; + String covertAudioToText(String audioFile); } diff --git a/backend/src/main/java/com/example/BriefMe/service/client/YoutubeVideoSummaryService.java b/backend/src/main/java/com/example/BriefMe/service/client/YoutubeVideoSummaryService.java new file mode 100644 index 0000000..b015a7c --- /dev/null +++ b/backend/src/main/java/com/example/BriefMe/service/client/YoutubeVideoSummaryService.java @@ -0,0 +1,5 @@ +package com.example.BriefMe.service.client; + +public interface YoutubeVideoSummaryService { + String generateSummary(String youtubeVideoUrl, int summarizeIn); +} diff --git a/backend/src/main/java/com/example/BriefMe/service/impl/AudioToTextConverterImpl.java b/backend/src/main/java/com/example/BriefMe/service/impl/AudioToTextConverterImpl.java index bb57ada..dac2211 100644 --- a/backend/src/main/java/com/example/BriefMe/service/impl/AudioToTextConverterImpl.java +++ b/backend/src/main/java/com/example/BriefMe/service/impl/AudioToTextConverterImpl.java @@ -11,17 +11,19 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; @Slf4j +@Component public class AudioToTextConverterImpl implements AudioToTextConverter { - public String covertAudioToText(String audioFile) throws IOException { + public String covertAudioToText(String audioFile){ try (SpeechClient speechClient = SpeechClient.create()) { log.info("Loading the audio file into memory..."); - Path path = Paths.get(audioFile); + Path path = Path.of(audioFile); byte[] data = Files.readAllBytes(path); log.info("Audio file loaded..."); @@ -52,8 +54,14 @@ public String covertAudioToText(String audioFile) throws IOException { executor.shutdown(); - log.info("Audio conversion to text completed. Transcript: {}", completeTranscript); + log.info("Audio conversion to text completed"); + + Files.deleteIfExists(path); + return completeTranscript.toString(); + } catch (IOException e) { + log.error("Exception occurred with audio to text conversion: {}", e.getMessage()); + return ""; } } } diff --git a/backend/src/main/java/com/example/BriefMe/service/impl/CustomTextSummarizer.java b/backend/src/main/java/com/example/BriefMe/service/impl/CustomTextSummarizer.java index 1e3e16a..5d1c6d0 100644 --- a/backend/src/main/java/com/example/BriefMe/service/impl/CustomTextSummarizer.java +++ b/backend/src/main/java/com/example/BriefMe/service/impl/CustomTextSummarizer.java @@ -10,8 +10,10 @@ import java.util.stream.IntStream; import lombok.extern.slf4j.Slf4j; import org.apache.commons.text.similarity.CosineSimilarity; +import org.springframework.stereotype.Component; @Slf4j +@Component public class CustomTextSummarizer implements TextSummarizer { private static final int MAX_ITERATIONS = 50; diff --git a/backend/src/main/java/com/example/BriefMe/service/impl/Mp4AudioExtractorImpl.java b/backend/src/main/java/com/example/BriefMe/service/impl/Mp4AudioExtractorImpl.java index a634d48..d84e2ea 100644 --- a/backend/src/main/java/com/example/BriefMe/service/impl/Mp4AudioExtractorImpl.java +++ b/backend/src/main/java/com/example/BriefMe/service/impl/Mp4AudioExtractorImpl.java @@ -1,13 +1,16 @@ package com.example.BriefMe.service.impl; import com.example.BriefMe.service.client.AudioExtractor; -import java.io.IOException; import java.util.UUID; +import lombok.extern.slf4j.Slf4j; import net.bramp.ffmpeg.FFmpeg; import net.bramp.ffmpeg.FFmpegExecutor; import net.bramp.ffmpeg.FFprobe; import net.bramp.ffmpeg.builder.FFmpegBuilder; +import org.springframework.stereotype.Component; +@Slf4j +@Component public class Mp4AudioExtractorImpl implements AudioExtractor { public static final String OUTPUT_FILE = "output-"; @@ -15,22 +18,27 @@ public class Mp4AudioExtractorImpl implements AudioExtractor { public static final String MP_3 = "mp3"; @Override - public String extractAudio(String inputVideoFile) throws IOException { - FFmpeg ffmpeg = new FFmpeg("/opt/homebrew/bin/ffmpeg"); - FFprobe ffprobe = new FFprobe(); - - String outputFile = OUTPUT_FILE + UUID.randomUUID() + DOT + MP_3; - - FFmpegBuilder builder = new FFmpegBuilder() - .setInput(inputVideoFile) - .overrideOutputFiles(true) - .addOutput(outputFile) - .setFormat(MP_3) - .done(); - - FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); - executor.createJob(builder).run(); - - return outputFile; + public String extractAudio(String inputVideoFile) { + try{ + FFmpeg ffmpeg = new FFmpeg("/opt/homebrew/bin/ffmpeg"); + FFprobe ffprobe = new FFprobe(); + + String outputFile = OUTPUT_FILE + UUID.randomUUID() + DOT + MP_3; + + FFmpegBuilder builder = new FFmpegBuilder() + .setInput(inputVideoFile) + .overrideOutputFiles(true) + .addOutput(outputFile) + .setFormat(MP_3) + .done(); + + FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); + executor.createJob(builder).run(); + + return outputFile; + }catch(Exception e){ + log.error("Unable to extract audio from the link. Exception occured. {}", e.getMessage()); + return ""; + } } } diff --git a/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeAudioExtractorImpl.java b/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeAudioExtractorImpl.java index d729daf..0b5703d 100644 --- a/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeAudioExtractorImpl.java +++ b/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeAudioExtractorImpl.java @@ -6,8 +6,12 @@ import java.io.InputStreamReader; import java.util.UUID; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; @Slf4j +@Component +@Primary public class YoutubeAudioExtractorImpl implements AudioExtractor { public static final String OUTPUT_FILE = "output-"; @@ -15,7 +19,7 @@ public class YoutubeAudioExtractorImpl implements AudioExtractor { public static final String MP_3 = "mp3"; @Override - public String extractAudio(String inputVideoFile) throws IOException { + public String extractAudio(String inputVideoFile) { String outputFile = OUTPUT_FILE + UUID.randomUUID() + DOT; String defaultSearch = "ytsearch"; String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; diff --git a/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeVideoSummaryServiceImpl.java b/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeVideoSummaryServiceImpl.java new file mode 100644 index 0000000..710e1e3 --- /dev/null +++ b/backend/src/main/java/com/example/BriefMe/service/impl/YoutubeVideoSummaryServiceImpl.java @@ -0,0 +1,34 @@ +package com.example.BriefMe.service.impl; + +import com.example.BriefMe.service.client.AudioExtractor; +import com.example.BriefMe.service.client.AudioToTextConverter; +import com.example.BriefMe.service.client.TextSummarizer; +import com.example.BriefMe.service.client.YoutubeVideoSummaryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class YoutubeVideoSummaryServiceImpl implements YoutubeVideoSummaryService { + + @Autowired + AudioExtractor audioExtractor; + + @Autowired + AudioToTextConverter audioToTextConverter; + + @Autowired + TextSummarizer textSummarizer; + + @Override + public String generateSummary(String youtubeVideoUrl, int summarizeIn) { + String audioFile = audioExtractor.extractAudio(youtubeVideoUrl); + String text = audioToTextConverter.covertAudioToText(audioFile); + String summary = textSummarizer.generateSummary(text, summarizeIn); + + log.info("Text summarization completed..."); + + return summary; + } +}