RealSanjay commited on
Commit
9dd67b8
·
verified ·
1 Parent(s): aa850b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -78
app.py CHANGED
@@ -1,103 +1,73 @@
1
  import streamlit as st
2
  from faster_whisper import WhisperModel
3
  from transformers import pipeline
4
- from textblob import TextBlob
5
  import numpy as np
6
- import queue
7
- import threading
8
- import time
9
-
10
- # Initialize shared state
11
- audio_queue = queue.Queue()
12
- transcription_results = []
13
- ai_detection_results = []
14
-
15
- # Global stop event for threads
16
- stop_event = threading.Event()
17
 
18
  def initialize_model():
19
- """Initialize Whisper model and AI detectors."""
20
- try:
21
  st.session_state.model = WhisperModel("small", device="cpu", compute_type="int8")
22
- st.session_state.ai_detector = pipeline('text-classification', model='roberta-base-openai-detector')
23
- except Exception as e:
24
- st.error(f"Error initializing models: {str(e)}")
 
 
 
 
 
 
 
 
 
 
25
 
26
  def advanced_ai_detection(text, ai_detector):
27
- """Perform AI detection on the text."""
28
- if len(text.split()) < 5: # Skip short texts
29
- return "Insufficient Data"
30
-
31
  result = ai_detector(text)[0]
32
- return result
33
-
34
- def analyze_text_linguistics(text):
35
- """Perform linguistic analysis on the text."""
36
- blob = TextBlob(text)
37
  return {
38
- "sentiment": blob.sentiment.polarity,
39
- "subjectivity": blob.sentiment.subjectivity
 
40
  }
41
 
42
- def transcribe_audio(audio_chunk, model):
43
- """Transcribe audio using the Whisper model."""
44
- segments, _ = model.transcribe(audio_chunk, language="en")
45
- return [segment.text for segment in segments]
46
-
47
  def run_app():
48
- """Main Streamlit app function."""
49
  st.title("AI Speech Detector")
50
- st.subheader("Real-Time Speech Transcription and AI Detection")
51
- st.text("This app transcribes audio input and detects if the text is AI-generated.")
 
 
 
52
 
53
- # Sidebar for controls
54
- st.sidebar.title("Controls")
55
- start_button = st.sidebar.button("Start Recording")
56
- stop_button = st.sidebar.button("Stop Recording")
57
 
58
- if "model" not in st.session_state:
59
- st.text("Loading AI models...")
60
- initialize_model()
61
- st.text("Models loaded successfully!")
62
-
63
- # Display transcript
64
- st.text_area("Real-Time Transcript", height=200, key="transcript")
65
-
66
- # Display AI detection results
67
- st.text_area("AI Detection Results", height=200, key="ai_detection")
68
-
69
- if start_button:
70
- st.session_state.is_recording = True
71
- threading.Thread(target=process_audio_stream).start()
72
-
73
- if stop_button:
74
- st.session_state.is_recording = False
75
- stop_event.set()
76
 
77
- def process_audio_stream():
78
- """Simulated audio capture and processing."""
79
- model = st.session_state.model
80
- ai_detector = st.session_state.ai_detector
81
-
82
- while not stop_event.is_set():
83
  try:
84
- # Simulate real-time audio input
85
- fake_audio_chunk = np.random.rand(16000 * 3).astype(np.float32) # 3 seconds of fake audio
86
- transcription = transcribe_audio(fake_audio_chunk, model)
 
87
 
88
- # Update real-time transcript
 
89
  for text in transcription:
90
- st.session_state.transcript += text + "\n"
91
-
92
- # Perform AI detection
93
- ai_result = advanced_ai_detection(text, ai_detector)
94
- st.session_state.ai_detection += f"Text: {text}\nResult: {ai_result}\n\n"
95
-
96
  except Exception as e:
97
- st.error(f"Error during transcription: {str(e)}")
98
- break
99
-
100
- stop_event.clear()
101
 
102
  if __name__ == "__main__":
103
  run_app()
 
1
  import streamlit as st
2
  from faster_whisper import WhisperModel
3
  from transformers import pipeline
 
4
  import numpy as np
5
+ from pydub import AudioSegment
6
+ from textblob import TextBlob
 
 
 
 
 
 
 
 
 
7
 
8
  def initialize_model():
9
+ """Initialize the Whisper model and AI detection pipeline."""
10
+ if "model" not in st.session_state:
11
  st.session_state.model = WhisperModel("small", device="cpu", compute_type="int8")
12
+ if "ai_detector" not in st.session_state:
13
+ st.session_state.ai_detector = pipeline("text-classification", model="roberta-base-openai-detector")
14
+
15
+ def process_uploaded_audio(uploaded_file, model):
16
+ """Process uploaded audio file for transcription."""
17
+ # Convert uploaded file to a WAV file
18
+ audio = AudioSegment.from_file(uploaded_file)
19
+ audio = audio.set_frame_rate(16000).set_channels(1)
20
+ samples = np.array(audio.get_array_of_samples(), dtype=np.float32) / 32768.0
21
+
22
+ # Perform transcription
23
+ segments, _ = model.transcribe(samples, language="en", vad_filter=True)
24
+ return [segment.text for segment in segments]
25
 
26
  def advanced_ai_detection(text, ai_detector):
27
+ """Perform AI detection on transcribed text."""
28
+ if len(text.split()) < 5:
29
+ return {"classification": "Insufficient Data", "probability": 0.0, "confidence": "Low"}
 
30
  result = ai_detector(text)[0]
 
 
 
 
 
31
  return {
32
+ "classification": result["label"],
33
+ "probability": result["score"],
34
+ "confidence": "High" if result["score"] > 0.7 else "Medium" if result["score"] > 0.5 else "Low"
35
  }
36
 
 
 
 
 
 
37
  def run_app():
38
+ """Main Streamlit app."""
39
  st.title("AI Speech Detector")
40
+ st.subheader("Upload an audio file for transcription and AI analysis.")
41
+ st.markdown("""
42
+ This app uses the Whisper model for speech-to-text transcription and AI detection to classify the text.
43
+ Supported audio formats: **.wav**, **.mp3**.
44
+ """)
45
 
46
+ # Initialize models
47
+ initialize_model()
 
 
48
 
49
+ # File uploader
50
+ uploaded_file = st.file_uploader("Upload an audio file", type=["wav", "mp3"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ if uploaded_file:
53
+ st.info("Processing audio... Please wait.")
 
 
 
 
54
  try:
55
+ # Transcription
56
+ transcription = process_uploaded_audio(uploaded_file, st.session_state.model)
57
+ full_transcript = "\n".join(transcription)
58
+ st.text_area("Transcription", value=full_transcript, height=300)
59
 
60
+ # AI Detection
61
+ st.subheader("AI Detection Results")
62
  for text in transcription:
63
+ detection_result = advanced_ai_detection(text, st.session_state.ai_detector)
64
+ st.write(f"**Text:** {text}")
65
+ st.write(f"- **Classification:** {detection_result['classification']}")
66
+ st.write(f"- **Probability:** {detection_result['probability']:.2f}")
67
+ st.write(f"- **Confidence:** {detection_result['confidence']}")
68
+ st.markdown("---")
69
  except Exception as e:
70
+ st.error(f"Error processing audio: {str(e)}")
 
 
 
71
 
72
  if __name__ == "__main__":
73
  run_app()