FP Perception 0.1.2
Loading...
Searching...
No Matches
sentiment_pipeline.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5
12
13namespace fp_perception
14{
15
17{
18public:
19 using AudioReader = std::function<audio_data(const audio_buffer_request&)>;
20
21 SentimentPipeline(std::shared_ptr<SentimentAnalysisDriver> sentiment_driver,
22 std::shared_ptr<TranscriptionDriver> transcription_driver, AudioReader readDeviceAudio)
23 : sentiment_driver_(std::move(sentiment_driver))
24 , transcription_driver_(std::move(transcription_driver))
25 , read_device_audio_(std::move(readDeviceAudio))
26 {
27 }
28
30 {
32 throw fp_perception_exception("Sentiment driver is not loaded.");
33
34 if (request.use_device_audio)
35 {
37 throw fp_perception_exception("Transcription driver is not loaded.");
38
40 throw fp_perception_exception("Device audio reader is not available.");
41
42 transcription_request transcription_request_data;
43 audio_buffer_request audio_request;
44 audio_request.duration_seconds = request.audio_request_window;
45 audio_request.use_time_window = request.use_device_audio_time_window;
46 audio_request.start_time = request.device_audio_start_time;
47 transcription_request_data.audio = read_device_audio_(audio_request);
48 transcription_request_data.use_device_audio = true;
49 transcription_request_data.audio_request_window = request.audio_request_window;
50 transcription_request_data.use_device_audio_time_window = request.use_device_audio_time_window;
51 transcription_request_data.device_audio_start_time = request.device_audio_start_time;
52
53 const auto transcription_result_data = transcription_driver_->transcribe(transcription_request_data);
54 if (!transcription_result_data.success)
55 throw fp_perception_exception(transcription_result_data.error.empty() ? "No transcription result available for "
56 "sentiment analysis." :
57 transcription_result_data.error);
58
59 request.text = transcription_result_data.text;
60 }
61
62 auto result = sentiment_driver_->analyze(request);
63 result.analyzed_text = request.text;
64 return result;
65 }
66
67private:
68 std::shared_ptr<SentimentAnalysisDriver> sentiment_driver_;
69 std::shared_ptr<TranscriptionDriver> transcription_driver_;
71};
72
73} // namespace fp_perception
Definition sentiment_pipeline.hpp:17
std::shared_ptr< TranscriptionDriver > transcription_driver_
Definition sentiment_pipeline.hpp:69
SentimentPipeline(std::shared_ptr< SentimentAnalysisDriver > sentiment_driver, std::shared_ptr< TranscriptionDriver > transcription_driver, AudioReader readDeviceAudio)
Definition sentiment_pipeline.hpp:21
std::function< audio_data(const audio_buffer_request &)> AudioReader
Definition sentiment_pipeline.hpp:19
AudioReader read_device_audio_
Definition sentiment_pipeline.hpp:70
sentiment_result run(sentiment_request request)
Definition sentiment_pipeline.hpp:29
std::shared_ptr< SentimentAnalysisDriver > sentiment_driver_
Definition sentiment_pipeline.hpp:68
Definition audio_buffer.hpp:16
Definition structs.hpp:26
int duration_seconds
Definition structs.hpp:27
bool use_time_window
Definition structs.hpp:28
rclcpp::Time start_time
Definition structs.hpp:29
Struct to hold audio data.
Definition structs.hpp:16
Base class for driver exceptions.
Definition exceptions.hpp:14
Definition structs.hpp:11
bool use_device_audio
Definition structs.hpp:13
int audio_request_window
Definition structs.hpp:14
rclcpp::Time device_audio_start_time
Definition structs.hpp:16
bool use_device_audio_time_window
Definition structs.hpp:15
std::string text
Definition structs.hpp:12
Definition structs.hpp:20
Definition structs.hpp:13
bool use_device_audio_time_window
Definition structs.hpp:17
rclcpp::Time device_audio_start_time
Definition structs.hpp:18
int audio_request_window
Definition structs.hpp:16
audio_data audio
Definition structs.hpp:14
bool use_device_audio
Definition structs.hpp:15