On Day 4, we’ll integrate voice commands into the AI fitness coach using React Native Voice. Users can start, pause, switch workouts, and get AI coaching feedback hands-free.
1. Why Add Voice Control to AI Workouts?
✅ Hands-Free Workout Control → No need to tap buttons during exercise.
✅ Start, Pause, & Switch Workouts by Voice → Users can say “Start Squats”, “Pause Workout”.
✅ AI Workout Coaching → AI gives real-time form feedback through voice.
✅ Enhances Accessibility → Beneficial for injured users or visually impaired athletes.
2. Installing Voice Recognition Library
Run:
npm install react-native-voice
For iOS, enable NSMicrophoneUsageDescription
in Info.plist
:
<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone for voice commands.</string>
3. Implementing Voice Commands for Workouts
We’ll allow users to start, pause, and switch workouts using voice commands.
✅ Step 1: Modify WorkoutScreen.js
Modify src/screens/WorkoutScreen.js
to include voice commands:
import React, { useRef, useState, useEffect } from 'react';
import { View, Text, Button, StyleSheet, Alert } from 'react-native';
import Voice from 'react-native-voice';
import { Camera } from 'expo-camera';
import * as tf from '@tensorflow/tfjs';
import * as poseDetection from '@tensorflow-models/pose-detection';
import { cameraWithTensors } from '@tensorflow/tfjs-react-native';
const TensorCamera = cameraWithTensors(Camera);
export default function WorkoutScreen() {
const [permission, setPermission] = useState(null);
const [isListening, setIsListening] = useState(false);
const [command, setCommand] = useState('');
const [workoutState, setWorkoutState] = useState('stopped');
const cameraRef = useRef(null);
let detector = null;
useEffect(() => {
(async () => {
const { status } = await Camera.requestPermissionsAsync();
setPermission(status === 'granted');
await tf.ready();
detector = await poseDetection.createDetector(poseDetection.SupportedModels.BlazePose);
})();
}, []);
useEffect(() => {
Voice.onSpeechResults = (e) => {
if (e.value && e.value.length > 0) {
handleVoiceCommand(e.value[0]);
}
};
return () => {
Voice.destroy().then(Voice.removeAllListeners);
};
}, []);
const startListening = async () => {
try {
await Voice.start('en-US');
setIsListening(true);
} catch (error) {
console.error('Voice recognition error:', error);
}
};
const stopListening = async () => {
try {
await Voice.stop();
setIsListening(false);
} catch (error) {
console.error('Voice stop error:', error);
}
};
const handleVoiceCommand = (text) => {
setCommand(text);
if (text.includes('start squats')) {
setWorkoutState('squats');
Alert.alert('Workout Started', 'Squats detected!');
} else if (text.includes('pause workout')) {
setWorkoutState('paused');
Alert.alert('Workout Paused');
} else if (text.includes('next exercise')) {
setWorkoutState('lunges');
Alert.alert('Switching to Lunges');
}
};
if (permission === null) return <Text>Requesting camera permission...</Text>;
if (permission === false) return <Text>No access to camera</Text>;
return (
<View style={styles.container}>
<TensorCamera
ref={cameraRef}
style={styles.camera}
type={Camera.Constants.Type.front}
autorender={true}
/>
<Text style={styles.commandText}>Voice Command: {command}</Text>
<Button title={isListening ? 'Stop Listening' : 'Start Listening'} onPress={isListening ? stopListening : startListening} />
<Text style={styles.statusText}>Workout State: {workoutState}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
camera: { width: '100%', height: '70%' },
commandText: { fontSize: 18, fontWeight: 'bold', marginTop: 10 },
statusText: { fontSize: 20, marginTop: 15 },
});
4. Testing Voice Commands
Run:
npx expo start
Try saying:
- “Start Squats” → Squats workout starts.
- “Pause Workout” → Workout pauses.
- “Next Exercise” → AI switches to the next workout.
5. Preparing for Tomorrow: AI-Based Health & Fitness Insights
Tomorrow, we’ll:
- Integrate Google Fit & Apple HealthKit to track heart rate & calories.
- Use AI to analyze health trends and suggest workouts.
6. Key Concepts Covered
✅ Enabled voice-controlled workout commands.
✅ Integrated AI voice recognition with React Native Voice.
✅ Built a hands-free workout experience.
7. Next Steps: AI-Powered Health Tracking & Workout Recommendations
Tomorrow, we’ll:
- Sync fitness data with Google Fit/Apple HealthKit.
- AI-based workout recommendations based on user health stats.
8. References & Learning Resources
9. SEO Keywords:
Voice-controlled fitness app, AI-powered workout tracker, React Native voice commands, AI personal trainer, hands-free fitness assistant.