speech
This commit is contained in:
		| @@ -39,13 +39,22 @@ if($ENV{ROS_VERSION} EQUAL 1) | |||||||
|   ) |   ) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | # Install Python scripts for both ROS 1 | ||||||
|  | if($ENV{ROS_VERSION} EQUAL 1) | ||||||
|  |   catkin_install_python( | ||||||
|  |     PROGRAMS | ||||||
|  |     src/bellande_speech_detection.py | ||||||
|  |     DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} | ||||||
|  |   ) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Install Python scripts, configuration files, and launch files | # Install Python scripts, configuration files, and launch files | ||||||
| if($ENV{ROS_VERSION} EQUAL "1") | if($ENV{ROS_VERSION} EQUAL "1") | ||||||
|     install(PROGRAMS src/bellande_2d_computer_vision_api_2d.py DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) |     install(PROGRAMS src/bellande_speech_detection.py DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) | ||||||
|     install(DIRECTORY config/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config) |     install(DIRECTORY config/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config) | ||||||
|     install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch) |     install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch) | ||||||
| elseif($ENV{ROS_VERSION} EQUAL "2") | elseif($ENV{ROS_VERSION} EQUAL "2") | ||||||
|     install(PROGRAMS src/bellande_2d_computer_vision_api_2d.py DESTINATION lib/${PROJECT_NAME}) |     install(PROGRAMS src/bellande_speech_detection.py DESTINATION lib/${PROJECT_NAME}) | ||||||
|     install(DIRECTORY config/ DESTINATION share/${PROJECT_NAME}/config) |     install(DIRECTORY config/ DESTINATION share/${PROJECT_NAME}/config) | ||||||
|     install(DIRECTORY launch/ DESTINATION share/${PROJECT_NAME}/launch) |     install(DIRECTORY launch/ DESTINATION share/${PROJECT_NAME}/launch) | ||||||
| endif() | endif() | ||||||
|   | |||||||
| @@ -1,4 +1,20 @@ | |||||||
| { | { | ||||||
|  |   "license": [ | ||||||
|  |     "Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande", | ||||||
|  |     "This program is free software: you can redistribute it and/or modify", | ||||||
|  |     "it under the terms of the GNU General Public License as published by", | ||||||
|  |     "the Free Software Foundation, either version 3 of the License, or", | ||||||
|  |     "(at your option) any later version.", | ||||||
|  |     "", | ||||||
|  |     "This program is distributed in the hope that it will be useful,", | ||||||
|  |     "but WITHOUT ANY WARRANTY; without even the implied warranty of", | ||||||
|  |     "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the", | ||||||
|  |     "GNU General Public License for more details.", | ||||||
|  |     "", | ||||||
|  |     "You should have received a copy of the GNU General Public License", | ||||||
|  |     "along with this program.  If not, see <https://www.gnu.org/licenses/>.", | ||||||
|  |     "GNU General Public License v3.0 or later" | ||||||
|  |   ], | ||||||
|   "url": "https://bellanderoboticssensorsresearchinnovationcenter-kot42qxp.b4a.run", |   "url": "https://bellanderoboticssensorsresearchinnovationcenter-kot42qxp.b4a.run", | ||||||
|   "endpoint_path": { |   "endpoint_path": { | ||||||
|     "prediction": "/api/Bellande_Speech_Detection/bellande_prediction", |     "prediction": "/api/Bellande_Speech_Detection/bellande_prediction", | ||||||
|   | |||||||
| @@ -0,0 +1,71 @@ | |||||||
|  | # Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande | ||||||
|  | # | ||||||
|  | # This program is free software: you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation, either version 3 of the License, or | ||||||
|  | # (at your option) any later version. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | # You should have received a copy of the GNU General Public License | ||||||
|  | # along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  | import subprocess | ||||||
|  | from launch import LaunchDescription | ||||||
|  | from launch_ros.actions import Node | ||||||
|  | from launch.actions import DeclareLaunchArgument | ||||||
|  | from launch.substitutions import LaunchConfiguration | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def ros1_launch_description(): | ||||||
|  |     # Get command-line arguments | ||||||
|  |     args = sys.argv[1:] | ||||||
|  |     # Construct the ROS 1 launch command | ||||||
|  |     roslaunch_command = ["roslaunch", "ros_web_api_bellande_speech_detection", "bellande_speech_detection.launch"] + args | ||||||
|  |     # Execute the launch command | ||||||
|  |     subprocess.call(roslaunch_command) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def ros2_launch_description(): | ||||||
|  |     # Declare launch arguments | ||||||
|  |     audio_data_arg = DeclareLaunchArgument('audio_data') | ||||||
|  |     sample_rate_arg = DeclareLaunchArgument('sample_rate') | ||||||
|  |     language_arg = DeclareLaunchArgument('language') | ||||||
|  |  | ||||||
|  |     # Create a list to hold all nodes to be launched | ||||||
|  |     nodes_to_launch = [] | ||||||
|  |  | ||||||
|  |     # ROS2 specific configurations | ||||||
|  |     ros_launch_arguments = [ | ||||||
|  |         audio_data_arg, sample_rate_arg, language_arg, | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     nodes_to_launch.append(Node( | ||||||
|  |         package='ros_web_api_bellande_speech_detection', | ||||||
|  |         executable='bellande_speech_detection.py', | ||||||
|  |         name='bellande_speech_detection_node', | ||||||
|  |         output='screen', | ||||||
|  |         parameters=[ | ||||||
|  |             {'audio_data': LaunchConfiguration('audio_data')}, | ||||||
|  |             {'sample_rate': LaunchConfiguration('sample_rate')}, | ||||||
|  |             {'language': LaunchConfiguration('language')}, | ||||||
|  |         ], | ||||||
|  |     )) | ||||||
|  |  | ||||||
|  |     # Return the LaunchDescription containing all nodes and arguments | ||||||
|  |     return LaunchDescription(ros_launch_arguments + nodes_to_launch) | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     ros_version = os.getenv("ROS_VERSION") | ||||||
|  |     if ros_version == "1": | ||||||
|  |         ros1_launch_description() | ||||||
|  |     elif ros_version == "2": | ||||||
|  |         ros2_launch_description() | ||||||
|  |     else: | ||||||
|  |         print("Unsupported ROS version. Please set the ROS_VERSION environment variable to '1' for ROS 1 or '2' for ROS 2.") | ||||||
|  |         sys.exit(1) | ||||||
| @@ -0,0 +1,30 @@ | |||||||
|  | <?xml version="1.0"?> | ||||||
|  | <!-- | ||||||
|  | Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); you may not | ||||||
|  | use this file except in compliance with the License. You may obtain a copy of | ||||||
|  | the License at | ||||||
|  |  | ||||||
|  | http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||||
|  | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||||
|  | License for the specific language governing permissions and limitations under | ||||||
|  | the License. | ||||||
|  | --> | ||||||
|  | <launch> | ||||||
|  |   <!-- Define arguments --> | ||||||
|  |   <arg name="audio_data" default="" /> | ||||||
|  |   <arg name="sample_rate" default="16000" /> | ||||||
|  |   <arg name="language" default="en-US" /> | ||||||
|  |  | ||||||
|  |   <!-- Launch the speech detection node --> | ||||||
|  |   <node name="bellande_speech_detection_node" pkg="ros_web_api_bellande_speech_detection" | ||||||
|  |     type="bellande_speech_detection.py" output="screen"> | ||||||
|  |     <param name="audio_data" value="$(arg audio_data)" /> | ||||||
|  |     <param name="sample_rate" value="$(arg sample_rate)" /> | ||||||
|  |     <param name="language" value="$(arg language)" /> | ||||||
|  |   </node> | ||||||
|  | </launch> | ||||||
							
								
								
									
										11
									
								
								ros_web_api_bellande_speech_detection/setup.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								ros_web_api_bellande_speech_detection/setup.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | from distutils.core import setup | ||||||
|  | from catkin_pkg.python_setup import generate_distutils_setup | ||||||
|  |  | ||||||
|  | # fetch values from package.xml | ||||||
|  | setup_args = generate_distutils_setup( | ||||||
|  |     scripts=['src/bellande_speech_detection.py'], | ||||||
|  |     packages=['ros_web_api_bellande_speech_detection'], | ||||||
|  |     package_dir={'': 'src'}, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | setup(**setup_args) | ||||||
							
								
								
									
										73
									
								
								ros_web_api_bellande_speech_detection/src/bellande_speech_detection.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								ros_web_api_bellande_speech_detection/src/bellande_speech_detection.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,73 @@ | |||||||
|  | # Copyright (C) 2024 Bellande Robotics Sensors Research Innovation Center, Ronaldson Bellande | ||||||
|  | # | ||||||
|  | # This program is free software: you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation, either version 3 of the License, or | ||||||
|  | # (at your option) any later version. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | # You should have received a copy of the GNU General Public License | ||||||
|  | # along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | import json | ||||||
|  | import os | ||||||
|  | import requests | ||||||
|  |  | ||||||
|  | def main(): | ||||||
|  |     # Get the absolute path to the config file | ||||||
|  |     config_file_path = os.path.join(os.path.dirname(__file__), '../config/configs.json') | ||||||
|  |      | ||||||
|  |     # Check if the config file exists | ||||||
|  |     if not os.path.exists(config_file_path): | ||||||
|  |         print("Config file not found:", config_file_path) | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     # Read configuration from config.json | ||||||
|  |     with open(config_file_path, 'r') as config_file: | ||||||
|  |         config = json.load(config_file) | ||||||
|  |         url = config['url'] | ||||||
|  |         endpoint_path = config['endpoint_path']["detection"] | ||||||
|  |      | ||||||
|  |     # Get the parameters from the ROS parameter server | ||||||
|  |     audio_data = rospy.get_param('audio_data', '') | ||||||
|  |     sample_rate = rospy.get_param('sample_rate', 16000) | ||||||
|  |     language = rospy.get_param('language', 'en-US') | ||||||
|  |  | ||||||
|  |     # JSON payload | ||||||
|  |     payload = { | ||||||
|  |         "audio_data": audio_data, | ||||||
|  |         "sample_rate": sample_rate, | ||||||
|  |         "language": language | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Headers | ||||||
|  |     headers = { | ||||||
|  |         'accept': 'application/json', | ||||||
|  |         'Content-Type': 'application/json' | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Make POST request | ||||||
|  |     try: | ||||||
|  |         response = requests.post( | ||||||
|  |             url + endpoint_path, | ||||||
|  |             json=payload, | ||||||
|  |             headers=headers | ||||||
|  |         ) | ||||||
|  |         response.raise_for_status()  # Raise an error for unsuccessful responses | ||||||
|  |         data = response.json() | ||||||
|  |         print("Detected Speech:", data['detected_speech']) | ||||||
|  |      | ||||||
|  |     except requests.exceptions.RequestException as e: | ||||||
|  |         print("Error:", e) | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     ros_version = os.getenv("ROS_VERSION") | ||||||
|  |     if ros_version == "1": | ||||||
|  |         import rospy | ||||||
|  |     elif ros_version == "2": | ||||||
|  |         import rclpy | ||||||
|  |     main() | ||||||
		Reference in New Issue
	
	Block a user