PMS61 commited on
Commit
ebf88d6
·
1 Parent(s): 4bed022

server files added

Browse files
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ GROQ_API_KEY=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
.gitignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+
2
+ /server/node_modules
3
+ /server/.venv
4
+ /server/__pycache__
5
+ /server/myenv
6
+ .env.local
Dockerfile ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use an official Python runtime as a parent image
2
+ FROM python:3.11-slim
3
+
4
+ # Set the working directory in the container
5
+ WORKDIR /code
6
+
7
+ # Install system dependencies required by your project (ffmpeg, opencv)
8
+ RUN apt-get update && apt-get install -y --no-install-recommends \
9
+ ffmpeg \
10
+ libsm6 \
11
+ libxext6 \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
+ # Copy the dependencies file to the working directory
15
+ COPY ./requirements.txt /code/requirements.txt
16
+
17
+ # Install any needed packages specified in requirements.txt
18
+ # We add gunicorn here for a production-ready web server
19
+ RUN pip install --no-cache-dir --upgrade pip
20
+ RUN pip install --no-cache-dir -r requirements.txt gunicorn
21
+
22
+ # Copy the rest of the application's code to the working directory
23
+ COPY . /code/
24
+
25
+ # Expose the port the app runs on (Hugging Face Spaces default is 7860)
26
+ EXPOSE 7860
27
+
28
+ # Command to run the application using Gunicorn
29
+ CMD ["gunicorn", "--bind", "0.spacing.large0.spacing.large:7860", "--timeout", "600", "app:app"]
__init__.py ADDED
File without changes
__pycache__/__init__.cpython-312.pyc ADDED
Binary file (156 Bytes). View file
 
__pycache__/auth_routes.cpython-312.pyc ADDED
Binary file (3.7 kB). View file
 
app.py ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ import pymongo
3
+ from routes.auth_routes import auth_bp
4
+ from flask_cors import CORS
5
+ import os
6
+ from werkzeug.utils import secure_filename
7
+ from utils.audioextraction import extract_audio
8
+ from utils.expressions import analyze_video_emotions
9
+ from utils.transcription import speech_to_text_long
10
+ from utils.vocals import predict_emotion
11
+ from utils.vocabulary import evaluate_vocabulary
12
+ from groq import Groq
13
+ from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
14
+ import pandas as pd
15
+ from bson import ObjectId
16
+ import json
17
+ from dotenv import load_dotenv
18
+ from datetime import datetime
19
+
20
+ load_dotenv()
21
+ app = Flask(__name__)
22
+ CORS(app)
23
+
24
+ # MongoDB connection
25
+ client = pymongo.MongoClient("mongodb+srv://pmsankheb23:[email protected]/")
26
+ db = client["Eloquence"]
27
+ collections_user = db["user"]
28
+ reports_collection = db["reports"]
29
+ overall_reports_collection = db["overall_reports"]
30
+
31
+ # Groq client setup
32
+ groq_client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
33
+
34
+ # Configure upload folder
35
+ UPLOAD_FOLDER = 'uploads'
36
+ ALLOWED_EXTENSIONS = {'mp4', 'webm', 'wav'}
37
+ app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
38
+
39
+ if not os.path.exists(UPLOAD_FOLDER):
40
+ os.makedirs(UPLOAD_FOLDER)
41
+
42
+ model_id = "firdhokk/speech-emotion-recognition-with-openai-whisper-large-v3"
43
+ model = AutoModelForAudioClassification.from_pretrained(model_id)
44
+ feature_extractor = AutoFeatureExtractor.from_pretrained(model_id, do_normalize=True)
45
+ id2label = model.config.id2label
46
+
47
+ def allowed_file(filename):
48
+ return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
49
+
50
+ def convert_objectid_to_string(data):
51
+ if isinstance(data, dict):
52
+ new_dict = {}
53
+ for k, v in data.items():
54
+ if isinstance(v, datetime):
55
+ new_dict[k] = v.isoformat()
56
+ else:
57
+ new_dict[k] = convert_objectid_to_string(v)
58
+ return new_dict
59
+ elif isinstance(data, list):
60
+ return [convert_objectid_to_string(item) for item in data]
61
+ elif isinstance(data, ObjectId):
62
+ return str(data)
63
+ return data
64
+
65
+ app.register_blueprint(auth_bp)
66
+
67
+ @app.route('/')
68
+ def home():
69
+ return "Hello World"
70
+
71
+ @app.route('/upload', methods=['POST'])
72
+ def upload_file():
73
+ if 'file' not in request.files:
74
+ return jsonify({"error": "No file part"}), 400
75
+ file = request.files['file']
76
+ context = request.form.get('context', '')
77
+ title = request.form.get('title', 'Untitled Session')
78
+ mode = request.form.get('mode', 'video')
79
+ user_id = request.form.get('userId')
80
+
81
+ if not user_id:
82
+ return jsonify({"error": "User ID is required"}), 400
83
+
84
+ if file.filename == '':
85
+ return jsonify({"error": "No selected file"}), 400
86
+
87
+ if file and allowed_file(file.filename):
88
+ filename = secure_filename(file.filename)
89
+ file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
90
+ file.save(file_path)
91
+
92
+ audio_path = os.path.join(app.config['UPLOAD_FOLDER'], 'output.wav')
93
+ if not extract_audio(file_path, audio_path):
94
+ os.remove(file_path)
95
+ return jsonify({"error": "Failed to process audio from the file"}), 500
96
+
97
+ emotion_analysis = pd.DataFrame()
98
+ if mode == "video":
99
+ emotion_analysis = analyze_video_emotions(file_path)
100
+
101
+ transcription = speech_to_text_long(audio_path)
102
+ audio_emotion = predict_emotion(audio_path, model, feature_extractor, id2label)
103
+ vocabulary_report = evaluate_vocabulary(transcription, context)
104
+ scores = generate_scores(transcription, audio_emotion, emotion_analysis)
105
+ speech_report = generate_speech_report(transcription, context, audio_emotion)
106
+ expression_report = generate_expression_report(emotion_analysis) if mode == "video" else "No expression analysis for audio-only mode."
107
+
108
+ report_data = {
109
+ "userId": user_id,
110
+ "title": title,
111
+ "context": context,
112
+ "transcription": transcription,
113
+ "vocabulary_report": vocabulary_report,
114
+ "speech_report": speech_report,
115
+ "expression_report": expression_report,
116
+ "scores": scores,
117
+ "createdAt": datetime.utcnow()
118
+ }
119
+
120
+ result = reports_collection.insert_one(report_data)
121
+ report_data["_id"] = str(result.inserted_id)
122
+ update_overall_reports(user_id)
123
+
124
+ os.remove(file_path)
125
+ os.remove(audio_path)
126
+
127
+ return jsonify(convert_objectid_to_string(report_data)), 200
128
+ return jsonify({"error": "File type not allowed"}), 400
129
+
130
+ @app.route('/chat', methods=['POST'])
131
+ def chat():
132
+ try:
133
+ data = request.get_json()
134
+ user_id = data.get('userId')
135
+ user_message = data.get('message')
136
+
137
+ if not user_id or not user_message:
138
+ return jsonify({"error": "User ID and message are required"}), 400
139
+
140
+ user_reports = list(reports_collection.find({"userId": user_id}))
141
+ reports_summary = "Here is a summary of the user's past performance:\n"
142
+ for report in user_reports:
143
+ reports_summary += f"- Session '{report.get('title', 'Untitled')}':\n"
144
+ reports_summary += f" - Vocabulary Score: {report['scores']['vocabulary']}\n"
145
+ reports_summary += f" - Voice Score: {report['scores']['voice']}\n"
146
+ reports_summary += f" - Expressions Score: {report['scores']['expressions']}\n"
147
+ reports_summary += f" - Feedback: {report.get('speech_report', '')}\n\n"
148
+
149
+ system_message = f"""
150
+ You are 'Eloquence AI', a friendly and expert public speaking coach. Your goal is to help users improve their speaking skills by providing constructive, encouraging, and actionable feedback.
151
+
152
+ User's Past Performance Summary:
153
+ {reports_summary}
154
+
155
+ Based on this history and the user's current message, provide a helpful and encouraging response. Be conversational and supportive.
156
+ """
157
+
158
+ chat_completion = groq_client.chat.completions.create(
159
+ messages=[
160
+ {"role": "system", "content": system_message},
161
+ {"role": "user", "content": user_message},
162
+ ],
163
+ model="llama3-70b-8192",
164
+ )
165
+
166
+ ai_response = chat_completion.choices[0].message.content
167
+ return jsonify({"response": ai_response}), 200
168
+
169
+ except Exception as e:
170
+ print(f"Error in /chat endpoint: {e}")
171
+ return jsonify({"error": "An internal error occurred"}), 500
172
+
173
+ def update_overall_reports(user_id):
174
+ user_reports = list(reports_collection.find({"userId": user_id}))
175
+ if not user_reports:
176
+ return
177
+
178
+ num_reports = len(user_reports)
179
+ avg_vocabulary = sum(r["scores"]["vocabulary"] for r in user_reports) / num_reports
180
+ avg_voice = sum(r["scores"]["voice"] for r in user_reports) / num_reports
181
+ avg_expressions = sum(r["scores"]["expressions"] for r in user_reports) / num_reports
182
+
183
+ overall_report_data = {
184
+ "userId": user_id,
185
+ "avg_vocabulary": avg_vocabulary,
186
+ "avg_voice": avg_voice,
187
+ "avg_expressions": avg_expressions,
188
+ "overall_reports": generate_overall_reports(user_reports)
189
+ }
190
+
191
+ overall_reports_collection.update_one(
192
+ {"userId": user_id},
193
+ {"$set": overall_report_data},
194
+ upsert=True
195
+ )
196
+
197
+ @app.route('/user-reports-list', methods=['GET'])
198
+ def get_user_reports_list():
199
+ user_id = request.args.get('userId')
200
+ if not user_id:
201
+ return jsonify({"error": "User ID is required"}), 400
202
+ user_reports = list(reports_collection.find({"userId": user_id}))
203
+ if not user_reports:
204
+ return jsonify([]), 200
205
+ return jsonify(convert_objectid_to_string(user_reports)), 200
206
+
207
+ @app.route('/user-reports', methods=['GET'])
208
+ def get_user_reports():
209
+ user_id = request.args.get('userId')
210
+ if not user_id:
211
+ return jsonify({"error": "User ID is required"}), 400
212
+ overall_report = overall_reports_collection.find_one({"userId": user_id})
213
+ if not overall_report:
214
+ return jsonify({"error": "No overall report found for the user"}), 404
215
+ return jsonify(convert_objectid_to_string(overall_report)), 200
216
+
217
+ def generate_report(system_message, user_message):
218
+ try:
219
+ chat_completion = groq_client.chat.completions.create(
220
+ messages=[
221
+ {"role": "system", "content": system_message},
222
+ {"role": "user", "content": user_message},
223
+ ],
224
+ model="llama3-70b-8192",
225
+ )
226
+ return chat_completion.choices[0].message.content
227
+ except Exception as e:
228
+ print(f"Error generating report: {e}")
229
+ return "Could not generate report due to an API error."
230
+
231
+ def generate_overall_reports(user_reports):
232
+ reports_json = json.dumps(convert_objectid_to_string(user_reports), indent=2)
233
+ voice_report = generate_report(
234
+ "You are an expert in speech analysis...",
235
+ f"Reports: {reports_json}\nProvide a short one paragraph report summarizing the user's overall performance in Voice..."
236
+ )
237
+ expressions_report = generate_report(
238
+ "You are an expert in facial expression analysis...",
239
+ f"Reports: {reports_json}\nProvide a short one paragraph report summarizing the user's overall performance in Facial Expressions..."
240
+ )
241
+ vocabulary_report = generate_report(
242
+ "You are an expert in language and vocabulary analysis...",
243
+ f"Reports: {reports_json}\nProvide a short one paragraph report summarizing the user's overall performance in Vocabulary..."
244
+ )
245
+ return {
246
+ "voice_report": voice_report,
247
+ "expressions_report": expressions_report,
248
+ "vocabulary_report": vocabulary_report,
249
+ }
250
+
251
+ def generate_scores(transcription, audio_emotion, emotion_analysis):
252
+ system_message = """
253
+ You are an expert in speech analysis. Based on the provided data, generate scores (out of 100) for Vocabulary, Voice, and Expressions.
254
+ Provide only the three scores in JSON format, like:
255
+ {"vocabulary": 85, "voice": 78, "expressions": 90}
256
+ """
257
+ emotion_str = emotion_analysis.to_string(index=False) if not emotion_analysis.empty else "No facial data"
258
+ user_message = f"""
259
+ Transcription: {transcription}
260
+ Audio Emotion Data: {audio_emotion}
261
+ Facial Emotion Analysis: {emotion_str}
262
+ Provide only the JSON output with numeric scores.
263
+ """
264
+ report_content = generate_report(system_message, user_message)
265
+ try:
266
+ return json.loads(report_content)
267
+ except (json.JSONDecodeError, TypeError):
268
+ return {"vocabulary": 0, "voice": 0, "expressions": 0}
269
+
270
+ def generate_speech_report(transcription, context, audio_emotion):
271
+ system_message = f"Context: \"{context}\". Evaluate if emotions in audio match. Emotion data: {audio_emotion}."
272
+ user_message = "Provide a short one paragraph report on the emotional appropriateness of speech..."
273
+ return generate_report(system_message, user_message)
274
+
275
+ def generate_expression_report(emotion_analysis_str):
276
+ system_message = f"Evaluate the following emotion data: {emotion_analysis_str}."
277
+ user_message = "Provide a short one paragraph report on the emotional appropriateness of facial expressions..."
278
+ return generate_report(system_message, user_message)
279
+
280
+ if __name__ == '__main__':
281
+ app.run(debug=True)
auth_routes.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Blueprint, request, jsonify
2
+ from utils.auth import hash_password, check_password, generate_token, verify_token
3
+ import pymongo
4
+ from bson import ObjectId
5
+
6
+ # Define a Blueprint for authentication routes
7
+ auth_bp = Blueprint('auth', __name__, url_prefix='/auth')
8
+
9
+ # MongoDB connection
10
+ client = pymongo.MongoClient("mongodb+srv://pmsankheb23:[email protected]/")
11
+ db = client["Eloquence"]
12
+ collections_user = db["user"]
13
+
14
+ # ROUTE 1: Create a user using POST: auth/create, no auth required
15
+ @auth_bp.route('/create', methods=['POST'])
16
+ def create_user():
17
+ try:
18
+ data = request.get_json()
19
+ username = data['username']
20
+ email = data['email']
21
+ password = data['password']
22
+
23
+ # Check if user already exists
24
+ if collections_user.find_one({'email': email}):
25
+ return jsonify({"error": "User with this email already exists"}), 400
26
+
27
+ # Hash the password
28
+ hashed_password = hash_password(password)
29
+
30
+ # Insert the new user
31
+ result = collections_user.insert_one({'username': username, 'password': hashed_password, 'email': email})
32
+ user_id = str(result.inserted_id)
33
+
34
+ # Generate JWT token
35
+ token = generate_token(username) # Or email, depending on your token strategy
36
+
37
+ return jsonify({
38
+ "message": "User created",
39
+ "authToken": token,
40
+ "userId": user_id,
41
+ "username": username
42
+ }), 201
43
+
44
+ except Exception as e:
45
+ return jsonify({"error": str(e)}), 500
46
+
47
+ # ROUTE 2: Authenticate a user using POST: auth/login, no login required
48
+ @auth_bp.route('/login', methods=['POST'])
49
+ def login_user():
50
+ try:
51
+ data = request.get_json()
52
+ email = data['email']
53
+ password = data['password']
54
+
55
+ user = collections_user.find_one({'email': email})
56
+ if not user:
57
+ return jsonify({"error": "User not found"}), 404
58
+
59
+ if not check_password(user['password'], password):
60
+ return jsonify({"error": "Invalid password"}), 401
61
+
62
+ user_id = str(user['_id'])
63
+ username = user['username']
64
+
65
+ # Generate JWT token
66
+ token = generate_token(username) # Or email, consistent with your token strategy
67
+
68
+ return jsonify({
69
+ "message": "Login successful",
70
+ "token": token,
71
+ "userId": user_id,
72
+ "username": username
73
+ }), 200
74
+
75
+ except Exception as e:
76
+ return jsonify({"error": str(e)}), 500
77
+
78
+ # ROUTE 3: Get logged-in user details using POST: auth/protected, login required
79
+ @auth_bp.route('/protected', methods=['POST'])
80
+ def protected():
81
+ # Get token from the body as it's a post method
82
+ token = request.json.get("token", None)
83
+
84
+ if not token:
85
+ return jsonify({"error": "Token missing"}), 401
86
+
87
+ # Remove 'Bearer ' from the token string if it's present
88
+ token = token.replace("Bearer ", "")
89
+ username = verify_token(token) # Verify the token
90
+
91
+ if not username:
92
+ return jsonify({"error": "Invalid or expired token"}), 401
93
+
94
+ return jsonify({"message": f"Hello, {username}! This is a protected route."})
data.csv ADDED
@@ -0,0 +1,811 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ angry0,box0,disgust0,fear0,happy0,neutral0,sad0,surprise0
2
+ 0.01,"[208, 71, 87, 108]",0.0,0.0,0.63,0.36,0.0,0.0
3
+ 0.0,"[208, 70, 88, 110]",0.0,0.0,0.68,0.31,0.0,0.0
4
+ 0.01,"[208, 71, 88, 109]",0.0,0.0,0.77,0.22,0.0,0.0
5
+ 0.01,"[208, 71, 87, 110]",0.0,0.0,0.94,0.04,0.0,0.0
6
+ 0.01,"[208, 69, 88, 112]",0.0,0.0,0.93,0.05,0.0,0.0
7
+ 0.02,"[208, 69, 88, 112]",0.0,0.0,0.94,0.04,0.0,0.0
8
+ 0.01,"[208, 68, 88, 112]",0.0,0.0,0.96,0.02,0.0,0.0
9
+ 0.01,"[207, 68, 88, 111]",0.0,0.0,0.96,0.02,0.0,0.0
10
+ 0.01,"[208, 66, 89, 113]",0.0,0.0,0.98,0.01,0.0,0.0
11
+ 0.01,"[208, 66, 89, 112]",0.0,0.0,0.98,0.01,0.0,0.0
12
+ 0.01,"[207, 66, 90, 113]",0.0,0.0,0.98,0.01,0.0,0.0
13
+ 0.01,"[208, 67, 89, 112]",0.0,0.0,0.97,0.02,0.0,0.0
14
+ 0.02,"[208, 68, 89, 111]",0.0,0.0,0.95,0.02,0.0,0.0
15
+ 0.01,"[208, 68, 88, 111]",0.0,0.0,0.98,0.01,0.0,0.0
16
+ 0.01,"[208, 68, 88, 112]",0.0,0.0,0.97,0.02,0.0,0.0
17
+ 0.0,"[208, 69, 88, 110]",0.0,0.0,0.99,0.01,0.0,0.0
18
+ 0.01,"[208, 70, 88, 111]",0.0,0.0,0.97,0.02,0.0,0.0
19
+ 0.02,"[209, 71, 86, 111]",0.0,0.01,0.95,0.02,0.01,0.0
20
+ 0.01,"[209, 70, 88, 113]",0.0,0.0,0.95,0.03,0.01,0.0
21
+ 0.01,"[209, 72, 87, 111]",0.0,0.0,0.96,0.02,0.0,0.0
22
+ 0.01,"[209, 70, 89, 115]",0.0,0.0,0.98,0.01,0.0,0.0
23
+ 0.02,"[209, 71, 88, 114]",0.0,0.0,0.96,0.01,0.0,0.0
24
+ 0.01,"[210, 71, 88, 115]",0.0,0.0,0.97,0.01,0.0,0.0
25
+ 0.01,"[210, 72, 89, 115]",0.0,0.0,0.96,0.02,0.0,0.0
26
+ 0.02,"[210, 72, 89, 115]",0.0,0.0,0.94,0.03,0.0,0.0
27
+ 0.03,"[210, 73, 89, 113]",0.0,0.0,0.91,0.05,0.0,0.0
28
+ 0.02,"[210, 72, 89, 114]",0.0,0.0,0.93,0.05,0.0,0.0
29
+ 0.02,"[211, 73, 88, 113]",0.0,0.0,0.85,0.12,0.0,0.01
30
+ 0.02,"[209, 72, 88, 113]",0.0,0.0,0.95,0.02,0.0,0.0
31
+ 0.02,"[210, 70, 89, 115]",0.0,0.0,0.96,0.02,0.0,0.0
32
+ 0.04,"[210, 70, 88, 113]",0.0,0.01,0.87,0.07,0.0,0.01
33
+ 0.01,"[209, 71, 89, 113]",0.0,0.0,0.97,0.01,0.0,0.0
34
+ 0.04,"[209, 71, 90, 114]",0.0,0.01,0.93,0.02,0.0,0.01
35
+ 0.07,"[210, 70, 90, 116]",0.0,0.02,0.81,0.05,0.02,0.03
36
+ 0.05,"[210, 71, 90, 113]",0.0,0.01,0.45,0.44,0.03,0.02
37
+ 0.03,"[212, 72, 87, 110]",0.0,0.0,0.27,0.67,0.02,0.0
38
+ 0.02,"[211, 72, 87, 110]",0.0,0.0,0.31,0.64,0.02,0.0
39
+ 0.04,"[212, 71, 86, 111]",0.0,0.0,0.3,0.63,0.02,0.0
40
+ 0.1,"[211, 72, 87, 110]",0.0,0.01,0.34,0.52,0.03,0.0
41
+ 0.1,"[211, 71, 87, 112]",0.0,0.0,0.19,0.67,0.04,0.0
42
+ 0.03,"[210, 71, 87, 111]",0.0,0.0,0.32,0.63,0.02,0.01
43
+ 0.02,"[210, 71, 88, 111]",0.0,0.0,0.22,0.74,0.02,0.0
44
+ 0.03,"[210, 71, 88, 111]",0.0,0.0,0.28,0.66,0.03,0.0
45
+ 0.13,"[210, 71, 88, 113]",0.0,0.04,0.51,0.24,0.04,0.04
46
+ 0.19,"[211, 75, 87, 108]",0.0,0.05,0.45,0.24,0.06,0.01
47
+ 0.1,"[212, 73, 85, 111]",0.0,0.02,0.5,0.34,0.04,0.0
48
+ 0.07,"[211, 72, 86, 111]",0.0,0.01,0.72,0.17,0.02,0.01
49
+ 0.06,"[210, 71, 88, 111]",0.0,0.0,0.8,0.12,0.01,0.0
50
+ 0.05,"[211, 71, 88, 113]",0.0,0.01,0.75,0.18,0.01,0.01
51
+ 0.09,"[210, 70, 88, 111]",0.0,0.01,0.7,0.18,0.01,0.01
52
+ 0.07,"[210, 70, 88, 111]",0.0,0.01,0.76,0.14,0.01,0.01
53
+ 0.07,"[210, 69, 89, 113]",0.0,0.01,0.76,0.12,0.01,0.03
54
+ 0.02,"[210, 70, 89, 113]",0.0,0.0,0.94,0.02,0.0,0.01
55
+ 0.07,"[211, 74, 88, 110]",0.0,0.02,0.83,0.03,0.01,0.04
56
+ 0.05,"[210, 68, 91, 116]",0.0,0.01,0.76,0.11,0.02,0.05
57
+ 0.1,"[212, 71, 87, 112]",0.0,0.05,0.42,0.13,0.05,0.26
58
+ 0.09,"[210, 72, 89, 113]",0.0,0.05,0.24,0.44,0.1,0.08
59
+ 0.04,"[211, 73, 87, 110]",0.0,0.01,0.29,0.58,0.07,0.0
60
+ 0.04,"[210, 73, 88, 110]",0.0,0.02,0.29,0.51,0.14,0.01
61
+ 0.06,"[211, 73, 87, 109]",0.0,0.01,0.21,0.6,0.11,0.0
62
+ 0.06,"[210, 72, 88, 110]",0.0,0.01,0.4,0.49,0.03,0.01
63
+ 0.06,"[209, 69, 91, 115]",0.0,0.01,0.4,0.48,0.03,0.02
64
+ 0.08,"[208, 69, 91, 115]",0.0,0.01,0.34,0.52,0.03,0.02
65
+ 0.03,"[208, 71, 91, 113]",0.0,0.01,0.5,0.43,0.02,0.0
66
+ 0.11,"[208, 74, 88, 110]",0.07,0.02,0.29,0.38,0.13,0.0
67
+ 0.09,"[207, 74, 89, 110]",0.04,0.03,0.26,0.48,0.11,0.0
68
+ 0.04,"[208, 72, 88, 110]",0.0,0.01,0.51,0.4,0.05,0.0
69
+ 0.02,"[208, 72, 87, 109]",0.0,0.0,0.44,0.51,0.02,0.0
70
+ 0.05,"[206, 69, 90, 113]",0.0,0.01,0.58,0.34,0.01,0.01
71
+ 0.05,"[206, 70, 88, 111]",0.0,0.02,0.65,0.25,0.01,0.01
72
+ 0.14,"[205, 69, 89, 114]",0.0,0.03,0.48,0.2,0.02,0.12
73
+ 0.15,"[205, 68, 90, 117]",0.0,0.08,0.27,0.15,0.06,0.29
74
+ 0.07,"[204, 67, 92, 118]",0.0,0.09,0.09,0.21,0.05,0.5
75
+ 0.03,"[205, 69, 89, 113]",0.0,0.02,0.13,0.76,0.04,0.02
76
+ 0.03,"[205, 67, 89, 115]",0.0,0.01,0.11,0.77,0.06,0.01
77
+ 0.03,"[205, 67, 89, 115]",0.0,0.01,0.08,0.82,0.06,0.01
78
+ 0.17,"[206, 70, 89, 114]",0.0,0.02,0.21,0.53,0.06,0.01
79
+ 0.15,"[206, 69, 89, 115]",0.0,0.03,0.33,0.15,0.02,0.32
80
+ 0.14,"[206, 71, 87, 113]",0.0,0.02,0.51,0.27,0.03,0.04
81
+ 0.1,"[205, 70, 88, 112]",0.0,0.02,0.44,0.38,0.03,0.04
82
+ 0.04,"[205, 70, 89, 113]",0.0,0.01,0.6,0.31,0.02,0.01
83
+ 0.05,"[205, 71, 89, 112]",0.0,0.01,0.52,0.41,0.01,0.01
84
+ 0.02,"[206, 70, 88, 113]",0.0,0.0,0.56,0.41,0.01,0.01
85
+ 0.02,"[206, 71, 88, 111]",0.0,0.0,0.67,0.3,0.01,0.01
86
+ 0.04,"[208, 70, 89, 112]",0.0,0.0,0.47,0.46,0.01,0.01
87
+ 0.03,"[207, 70, 89, 112]",0.0,0.01,0.56,0.38,0.01,0.01
88
+ 0.03,"[208, 68, 90, 115]",0.0,0.0,0.53,0.41,0.01,0.01
89
+ 0.07,"[208, 67, 90, 116]",0.0,0.0,0.75,0.15,0.01,0.02
90
+ 0.04,"[209, 69, 88, 112]",0.0,0.01,0.52,0.39,0.02,0.02
91
+ 0.12,"[209, 73, 87, 111]",0.0,0.02,0.15,0.64,0.06,0.01
92
+ 0.06,"[210, 73, 86, 109]",0.0,0.02,0.16,0.7,0.06,0.01
93
+ 0.06,"[209, 72, 87, 109]",0.0,0.02,0.35,0.53,0.04,0.01
94
+ 0.04,"[208, 70, 88, 111]",0.0,0.03,0.2,0.66,0.06,0.02
95
+ 0.05,"[208, 69, 88, 113]",0.0,0.02,0.12,0.73,0.05,0.02
96
+ 0.05,"[209, 70, 87, 112]",0.0,0.01,0.1,0.82,0.03,0.01
97
+ 0.02,"[207, 71, 89, 112]",0.0,0.01,0.15,0.77,0.04,0.0
98
+ 0.02,"[207, 72, 88, 111]",0.0,0.0,0.15,0.8,0.03,0.0
99
+ 0.02,"[207, 72, 88, 111]",0.0,0.0,0.13,0.81,0.03,0.0
100
+ 0.03,"[207, 72, 87, 111]",0.0,0.01,0.17,0.68,0.1,0.0
101
+ 0.03,"[205, 71, 89, 112]",0.0,0.03,0.32,0.53,0.06,0.02
102
+ 0.07,"[206, 71, 89, 112]",0.0,0.03,0.37,0.44,0.05,0.03
103
+ 0.08,"[207, 70, 88, 113]",0.0,0.02,0.48,0.32,0.03,0.08
104
+ 0.16,"[207, 70, 88, 115]",0.0,0.04,0.45,0.1,0.03,0.23
105
+ 0.17,"[206, 75, 87, 110]",0.01,0.02,0.46,0.3,0.03,0.0
106
+ 0.26,"[207, 76, 87, 111]",0.03,0.04,0.35,0.29,0.03,0.0
107
+ 0.12,"[205, 75, 87, 110]",0.01,0.02,0.57,0.26,0.01,0.0
108
+ 0.05,"[205, 72, 88, 111]",0.0,0.01,0.54,0.39,0.01,0.0
109
+ 0.03,"[207, 71, 89, 112]",0.0,0.0,0.33,0.62,0.01,0.0
110
+ 0.02,"[207, 70, 89, 112]",0.0,0.0,0.66,0.31,0.01,0.0
111
+ 0.04,"[206, 69, 90, 113]",0.0,0.01,0.62,0.32,0.01,0.01
112
+ 0.03,"[207, 73, 86, 109]",0.0,0.01,0.54,0.41,0.01,0.0
113
+ 0.02,"[207, 69, 90, 115]",0.0,0.0,0.68,0.28,0.01,0.0
114
+ 0.06,"[207, 71, 88, 113]",0.0,0.02,0.62,0.26,0.01,0.02
115
+ 0.05,"[208, 70, 89, 114]",0.0,0.02,0.51,0.39,0.02,0.01
116
+ 0.05,"[207, 69, 89, 114]",0.0,0.01,0.12,0.77,0.03,0.02
117
+ 0.03,"[207, 70, 90, 112]",0.0,0.0,0.04,0.87,0.05,0.0
118
+ 0.02,"[208, 70, 89, 113]",0.0,0.0,0.04,0.92,0.02,0.0
119
+ 0.03,"[208, 70, 90, 114]",0.0,0.0,0.03,0.92,0.02,0.0
120
+ 0.05,"[209, 69, 89, 115]",0.0,0.02,0.22,0.65,0.04,0.03
121
+ 0.08,"[209, 70, 91, 117]",0.0,0.04,0.26,0.24,0.05,0.32
122
+ 0.13,"[210, 70, 90, 116]",0.0,0.04,0.19,0.49,0.04,0.11
123
+ 0.09,"[211, 70, 88, 116]",0.0,0.02,0.22,0.6,0.03,0.04
124
+ 0.1,"[210, 70, 90, 117]",0.0,0.02,0.19,0.61,0.06,0.02
125
+ 0.07,"[210, 69, 89, 117]",0.0,0.0,0.09,0.79,0.03,0.02
126
+ 0.11,"[210, 70, 88, 115]",0.0,0.0,0.06,0.76,0.06,0.01
127
+ 0.05,"[210, 71, 88, 114]",0.0,0.0,0.03,0.88,0.04,0.01
128
+ 0.08,"[209, 70, 89, 116]",0.0,0.02,0.08,0.73,0.05,0.03
129
+ 0.07,"[209, 69, 91, 116]",0.0,0.01,0.2,0.67,0.02,0.03
130
+ 0.06,"[210, 71, 88, 115]",0.0,0.01,0.22,0.65,0.05,0.01
131
+ 0.03,"[208, 70, 92, 117]",0.0,0.01,0.16,0.73,0.08,0.0
132
+ 0.08,"[211, 76, 86, 109]",0.0,0.02,0.06,0.65,0.19,0.0
133
+ 0.06,"[209, 71, 91, 115]",0.0,0.01,0.09,0.72,0.12,0.0
134
+ 0.02,"[209, 71, 91, 115]",0.0,0.0,0.07,0.88,0.03,0.0
135
+ 0.03,"[209, 72, 90, 114]",0.0,0.0,0.06,0.87,0.03,0.0
136
+ 0.02,"[210, 70, 91, 116]",0.0,0.0,0.06,0.9,0.02,0.0
137
+ 0.02,"[210, 72, 90, 115]",0.0,0.0,0.08,0.88,0.01,0.0
138
+ 0.04,"[209, 73, 89, 111]",0.0,0.0,0.06,0.88,0.02,0.0
139
+ 0.03,"[209, 73, 89, 112]",0.0,0.0,0.16,0.78,0.02,0.0
140
+ 0.02,"[209, 70, 90, 116]",0.0,0.01,0.2,0.74,0.02,0.0
141
+ 0.02,"[209, 71, 90, 114]",0.0,0.01,0.26,0.68,0.02,0.01
142
+ 0.03,"[208, 71, 91, 114]",0.0,0.01,0.26,0.68,0.01,0.01
143
+ 0.03,"[208, 70, 91, 115]",0.0,0.0,0.25,0.69,0.02,0.01
144
+ 0.05,"[209, 69, 91, 116]",0.0,0.0,0.29,0.64,0.01,0.01
145
+ 0.04,"[209, 70, 89, 114]",0.0,0.0,0.33,0.6,0.02,0.01
146
+ 0.04,"[208, 70, 89, 114]",0.0,0.0,0.31,0.62,0.01,0.01
147
+ 0.06,"[209, 70, 89, 113]",0.0,0.01,0.18,0.72,0.02,0.01
148
+ 0.07,"[207, 69, 90, 115]",0.0,0.01,0.23,0.65,0.02,0.02
149
+ 0.03,"[207, 70, 89, 113]",0.0,0.0,0.27,0.68,0.01,0.01
150
+ 0.03,"[207, 71, 89, 111]",0.0,0.0,0.3,0.64,0.01,0.0
151
+ 0.03,"[207, 71, 88, 113]",0.0,0.0,0.19,0.75,0.02,0.01
152
+ 0.02,"[207, 72, 88, 112]",0.0,0.01,0.28,0.66,0.02,0.01
153
+ 0.09,"[208, 72, 87, 113]",0.0,0.02,0.14,0.67,0.03,0.05
154
+ 0.07,"[207, 71, 89, 117]",0.0,0.02,0.17,0.45,0.04,0.25
155
+ 0.08,"[207, 71, 89, 116]",0.0,0.01,0.16,0.61,0.04,0.1
156
+ 0.07,"[207, 71, 89, 116]",0.0,0.02,0.18,0.6,0.05,0.08
157
+ 0.07,"[207, 71, 89, 117]",0.0,0.06,0.2,0.21,0.05,0.4
158
+ 0.11,"[206, 71, 90, 115]",0.0,0.03,0.42,0.31,0.02,0.12
159
+ 0.13,"[206, 70, 90, 116]",0.0,0.03,0.37,0.35,0.02,0.09
160
+ 0.11,"[207, 71, 89, 117]",0.0,0.03,0.53,0.21,0.02,0.1
161
+ 0.12,"[207, 71, 89, 117]",0.0,0.03,0.53,0.22,0.02,0.08
162
+ 0.21,"[206, 71, 89, 116]",0.0,0.08,0.26,0.31,0.05,0.09
163
+ 0.29,"[207, 71, 88, 116]",0.0,0.11,0.26,0.19,0.05,0.1
164
+ 0.17,"[205, 72, 91, 117]",0.0,0.04,0.57,0.12,0.03,0.06
165
+ 0.11,"[204, 75, 90, 114]",0.0,0.03,0.61,0.22,0.02,0.01
166
+ 0.13,"[206, 76, 87, 112]",0.05,0.03,0.37,0.38,0.04,0.0
167
+ 0.24,"[207, 75, 88, 112]",0.13,0.03,0.22,0.33,0.05,0.0
168
+ 0.06,"[206, 74, 89, 111]",0.01,0.01,0.37,0.53,0.03,0.0
169
+ 0.04,"[206, 73, 86, 111]",0.0,0.01,0.42,0.51,0.02,0.0
170
+ 0.05,"[205, 72, 89, 113]",0.0,0.01,0.45,0.47,0.02,0.0
171
+ 0.04,"[204, 72, 89, 113]",0.0,0.01,0.55,0.37,0.02,0.0
172
+ 0.04,"[205, 73, 86, 112]",0.0,0.01,0.32,0.6,0.03,0.0
173
+ 0.05,"[204, 72, 87, 113]",0.0,0.01,0.52,0.4,0.02,0.0
174
+ 0.04,"[203, 71, 89, 113]",0.0,0.02,0.5,0.42,0.02,0.0
175
+ 0.04,"[204, 73, 85, 111]",0.0,0.01,0.46,0.47,0.02,0.0
176
+ 0.04,"[205, 72, 86, 111]",0.0,0.02,0.09,0.8,0.06,0.0
177
+ 0.02,"[203, 71, 88, 111]",0.0,0.01,0.07,0.85,0.05,0.0
178
+ 0.04,"[204, 71, 88, 113]",0.0,0.02,0.07,0.78,0.1,0.0
179
+ 0.07,"[205, 72, 87, 111]",0.0,0.03,0.15,0.59,0.17,0.0
180
+ 0.11,"[206, 73, 87, 112]",0.01,0.03,0.19,0.56,0.1,0.0
181
+ 0.09,"[206, 73, 88, 112]",0.01,0.02,0.4,0.43,0.04,0.0
182
+ 0.04,"[208, 71, 88, 112]",0.0,0.01,0.59,0.35,0.02,0.0
183
+ 0.05,"[208, 70, 89, 113]",0.0,0.01,0.7,0.21,0.03,0.0
184
+ 0.06,"[209, 69, 88, 114]",0.0,0.01,0.72,0.17,0.03,0.01
185
+ 0.07,"[212, 70, 88, 115]",0.0,0.01,0.54,0.33,0.03,0.02
186
+ 0.09,"[212, 69, 88, 114]",0.0,0.01,0.66,0.2,0.02,0.02
187
+ 0.11,"[213, 70, 90, 117]",0.0,0.01,0.69,0.14,0.02,0.02
188
+ 0.11,"[213, 71, 88, 115]",0.0,0.02,0.53,0.28,0.02,0.04
189
+ 0.08,"[213, 71, 90, 117]",0.0,0.01,0.54,0.31,0.02,0.04
190
+ 0.09,"[213, 72, 90, 115]",0.0,0.01,0.64,0.21,0.01,0.04
191
+ 0.18,"[212, 74, 89, 114]",0.0,0.04,0.43,0.3,0.04,0.01
192
+ 0.11,"[213, 74, 89, 114]",0.0,0.02,0.58,0.25,0.03,0.01
193
+ 0.1,"[212, 74, 88, 114]",0.0,0.02,0.59,0.25,0.03,0.01
194
+ 0.09,"[212, 74, 88, 113]",0.0,0.03,0.43,0.4,0.04,0.01
195
+ 0.12,"[213, 73, 88, 115]",0.0,0.03,0.35,0.44,0.03,0.03
196
+ 0.06,"[211, 74, 89, 113]",0.0,0.02,0.31,0.58,0.03,0.01
197
+ 0.1,"[214, 74, 87, 113]",0.0,0.05,0.23,0.53,0.04,0.05
198
+ 0.12,"[213, 74, 88, 114]",0.0,0.04,0.38,0.38,0.06,0.02
199
+ 0.09,"[209, 74, 89, 113]",0.0,0.03,0.43,0.4,0.04,0.02
200
+ 0.11,"[211, 75, 88, 113]",0.0,0.03,0.26,0.54,0.04,0.02
201
+ 0.13,"[213, 73, 88, 114]",0.0,0.02,0.3,0.47,0.04,0.04
202
+ 0.12,"[211, 72, 89, 115]",0.0,0.01,0.54,0.23,0.01,0.08
203
+ 0.16,"[211, 72, 89, 116]",0.0,0.01,0.52,0.24,0.01,0.06
204
+ 0.08,"[212, 73, 88, 115]",0.0,0.01,0.48,0.38,0.02,0.03
205
+ 0.12,"[211, 73, 89, 116]",0.0,0.01,0.42,0.4,0.01,0.04
206
+ 0.06,"[211, 74, 88, 115]",0.0,0.01,0.23,0.66,0.01,0.03
207
+ 0.07,"[212, 74, 88, 114]",0.0,0.01,0.34,0.53,0.01,0.04
208
+ 0.06,"[212, 75, 88, 113]",0.0,0.01,0.19,0.69,0.02,0.03
209
+ 0.03,"[213, 76, 87, 112]",0.0,0.01,0.19,0.74,0.02,0.02
210
+ 0.08,"[214, 76, 87, 113]",0.0,0.02,0.28,0.56,0.03,0.03
211
+ 0.06,"[215, 76, 86, 113]",0.0,0.02,0.32,0.53,0.03,0.04
212
+ 0.1,"[214, 74, 90, 115]",0.0,0.01,0.32,0.53,0.02,0.03
213
+ 0.14,"[216, 74, 88, 115]",0.0,0.01,0.05,0.71,0.06,0.03
214
+ 0.14,"[215, 73, 89, 116]",0.0,0.01,0.04,0.68,0.07,0.07
215
+ 0.11,"[215, 72, 89, 117]",0.0,0.01,0.03,0.74,0.06,0.05
216
+ 0.06,"[216, 70, 89, 119]",0.0,0.01,0.04,0.78,0.05,0.06
217
+ 0.06,"[213, 72, 88, 114]",0.0,0.01,0.03,0.46,0.03,0.41
218
+ 0.08,"[212, 72, 89, 115]",0.0,0.01,0.03,0.7,0.04,0.14
219
+ 0.08,"[212, 73, 88, 114]",0.0,0.01,0.02,0.81,0.06,0.03
220
+ 0.08,"[212, 72, 89, 115]",0.0,0.0,0.02,0.81,0.05,0.04
221
+ 0.09,"[211, 71, 90, 117]",0.0,0.03,0.05,0.62,0.07,0.15
222
+ 0.17,"[210, 74, 87, 113]",0.0,0.08,0.04,0.51,0.08,0.1
223
+ 0.21,"[209, 74, 87, 113]",0.0,0.08,0.06,0.45,0.09,0.12
224
+ 0.18,"[209, 74, 87, 112]",0.0,0.02,0.04,0.67,0.05,0.05
225
+ 0.09,"[209, 73, 88, 113]",0.0,0.01,0.03,0.84,0.03,0.01
226
+ 0.2,"[210, 73, 88, 114]",0.0,0.01,0.06,0.63,0.04,0.05
227
+ 0.13,"[209, 72, 90, 116]",0.0,0.01,0.17,0.65,0.02,0.02
228
+ 0.13,"[211, 72, 90, 117]",0.0,0.02,0.31,0.46,0.04,0.05
229
+ 0.12,"[210, 71, 90, 117]",0.0,0.01,0.39,0.44,0.01,0.04
230
+ 0.06,"[209, 71, 91, 117]",0.0,0.0,0.36,0.54,0.01,0.02
231
+ 0.05,"[209, 70, 91, 118]",0.0,0.0,0.4,0.51,0.01,0.03
232
+ 0.11,"[210, 71, 90, 118]",0.0,0.02,0.36,0.38,0.03,0.1
233
+ 0.1,"[210, 71, 90, 118]",0.0,0.02,0.4,0.32,0.03,0.14
234
+ 0.08,"[209, 70, 91, 120]",0.0,0.02,0.41,0.26,0.02,0.22
235
+ 0.1,"[209, 71, 91, 119]",0.0,0.03,0.31,0.28,0.03,0.26
236
+ 0.04,"[209, 77, 87, 111]",0.0,0.01,0.16,0.74,0.03,0.01
237
+ 0.11,"[209, 76, 89, 112]",0.0,0.01,0.04,0.53,0.3,0.0
238
+ 0.08,"[209, 77, 88, 111]",0.01,0.02,0.05,0.48,0.36,0.0
239
+ 0.06,"[208, 76, 89, 111]",0.0,0.0,0.12,0.69,0.12,0.0
240
+ 0.03,"[208, 76, 89, 111]",0.0,0.01,0.17,0.75,0.05,0.0
241
+ 0.06,"[208, 74, 90, 114]",0.0,0.01,0.2,0.68,0.05,0.0
242
+ 0.04,"[208, 74, 89, 113]",0.0,0.01,0.15,0.75,0.04,0.01
243
+ 0.11,"[209, 74, 88, 113]",0.0,0.01,0.14,0.67,0.06,0.01
244
+ 0.07,"[207, 71, 89, 115]",0.0,0.01,0.18,0.67,0.04,0.03
245
+ 0.05,"[207, 72, 88, 114]",0.0,0.02,0.09,0.74,0.09,0.01
246
+ 0.06,"[208, 72, 87, 112]",0.0,0.01,0.02,0.86,0.06,0.0
247
+ 0.05,"[207, 71, 88, 112]",0.0,0.0,0.03,0.88,0.03,0.0
248
+ 0.04,"[207, 72, 87, 113]",0.0,0.0,0.02,0.91,0.03,0.0
249
+ 0.03,"[207, 72, 88, 113]",0.0,0.0,0.04,0.88,0.04,0.01
250
+ 0.04,"[206, 72, 89, 116]",0.0,0.0,0.04,0.87,0.03,0.02
251
+ 0.03,"[206, 73, 89, 115]",0.0,0.01,0.04,0.88,0.03,0.01
252
+ 0.03,"[207, 73, 88, 115]",0.0,0.0,0.03,0.89,0.04,0.01
253
+ 0.12,"[207, 73, 88, 114]",0.0,0.01,0.11,0.71,0.05,0.01
254
+ 0.1,"[207, 73, 88, 114]",0.0,0.01,0.23,0.6,0.04,0.01
255
+ 0.11,"[208, 73, 87, 114]",0.0,0.02,0.18,0.62,0.06,0.01
256
+ 0.05,"[205, 71, 90, 116]",0.0,0.01,0.16,0.75,0.02,0.01
257
+ 0.15,"[206, 72, 89, 115]",0.0,0.01,0.26,0.52,0.04,0.02
258
+ 0.12,"[207, 73, 88, 114]",0.0,0.02,0.17,0.6,0.05,0.03
259
+ 0.11,"[208, 73, 87, 115]",0.0,0.03,0.3,0.47,0.06,0.03
260
+ 0.11,"[207, 72, 89, 116]",0.0,0.01,0.31,0.51,0.05,0.01
261
+ 0.09,"[207, 72, 89, 116]",0.0,0.01,0.32,0.53,0.03,0.01
262
+ 0.08,"[207, 71, 89, 117]",0.0,0.01,0.33,0.52,0.03,0.03
263
+ 0.11,"[207, 71, 89, 116]",0.0,0.01,0.42,0.41,0.03,0.02
264
+ 0.08,"[207, 71, 89, 117]",0.0,0.01,0.35,0.49,0.04,0.02
265
+ 0.11,"[207, 71, 89, 117]",0.0,0.02,0.33,0.47,0.04,0.03
266
+ 0.15,"[206, 71, 89, 117]",0.0,0.03,0.5,0.25,0.04,0.03
267
+ 0.26,"[206, 71, 89, 116]",0.0,0.05,0.36,0.19,0.04,0.11
268
+ 0.23,"[205, 70, 90, 117]",0.0,0.04,0.38,0.21,0.03,0.1
269
+ 0.17,"[205, 69, 89, 118]",0.0,0.03,0.55,0.17,0.03,0.05
270
+ 0.28,"[205, 73, 89, 116]",0.0,0.02,0.43,0.24,0.03,0.0
271
+ 0.42,"[204, 73, 90, 118]",0.03,0.04,0.35,0.09,0.07,0.0
272
+ 0.42,"[203, 74, 90, 115]",0.02,0.06,0.33,0.09,0.08,0.0
273
+ 0.37,"[203, 72, 91, 118]",0.0,0.03,0.42,0.13,0.04,0.01
274
+ 0.29,"[203, 70, 91, 119]",0.0,0.03,0.57,0.06,0.03,0.02
275
+ 0.36,"[204, 74, 88, 115]",0.0,0.02,0.41,0.13,0.05,0.03
276
+ 0.27,"[203, 73, 90, 115]",0.0,0.04,0.5,0.12,0.04,0.03
277
+ 0.3,"[203, 73, 90, 115]",0.0,0.03,0.44,0.15,0.04,0.03
278
+ 0.32,"[205, 73, 88, 114]",0.0,0.04,0.38,0.21,0.04,0.01
279
+ 0.19,"[205, 71, 89, 115]",0.0,0.04,0.35,0.36,0.04,0.02
280
+ 0.12,"[205, 75, 88, 111]",0.0,0.03,0.33,0.45,0.05,0.01
281
+ 0.13,"[206, 74, 88, 112]",0.0,0.04,0.23,0.5,0.1,0.0
282
+ 0.08,"[206, 70, 90, 115]",0.0,0.01,0.06,0.77,0.07,0.0
283
+ 0.03,"[207, 71, 88, 112]",0.0,0.0,0.06,0.88,0.03,0.0
284
+ 0.03,"[207, 71, 88, 112]",0.0,0.0,0.03,0.9,0.03,0.0
285
+ 0.02,"[208, 70, 88, 112]",0.0,0.0,0.04,0.92,0.02,0.0
286
+ 0.25,"[209, 70, 87, 114]",0.0,0.14,0.02,0.23,0.13,0.23
287
+ 0.2,"[208, 70, 91, 116]",0.0,0.06,0.05,0.56,0.11,0.03
288
+ 0.08,"[208, 69, 89, 115]",0.0,0.04,0.11,0.61,0.12,0.02
289
+ 0.03,"[208, 70, 89, 114]",0.0,0.0,0.05,0.89,0.02,0.0
290
+ 0.04,"[210, 72, 87, 112]",0.0,0.0,0.02,0.92,0.02,0.0
291
+ 0.04,"[209, 70, 89, 115]",0.0,0.0,0.05,0.88,0.02,0.0
292
+ 0.03,"[210, 72, 87, 112]",0.0,0.01,0.04,0.91,0.02,0.0
293
+ 0.03,"[210, 71, 89, 114]",0.0,0.0,0.01,0.94,0.02,0.0
294
+ 0.02,"[211, 71, 88, 113]",0.0,0.0,0.02,0.93,0.02,0.0
295
+ 0.02,"[211, 71, 88, 113]",0.0,0.0,0.01,0.94,0.02,0.0
296
+ 0.05,"[211, 70, 90, 114]",0.0,0.01,0.06,0.85,0.03,0.0
297
+ 0.04,"[210, 68, 91, 118]",0.0,0.01,0.06,0.85,0.03,0.01
298
+ 0.04,"[210, 67, 92, 119]",0.0,0.01,0.06,0.81,0.03,0.05
299
+ 0.02,"[211, 70, 91, 116]",0.0,0.0,0.04,0.92,0.02,0.0
300
+ 0.04,"[209, 66, 94, 122]",0.0,0.0,0.06,0.86,0.02,0.02
301
+ 0.03,"[210, 67, 94, 122]",0.0,0.0,0.12,0.79,0.03,0.03
302
+ 0.06,"[213, 70, 92, 120]",0.0,0.02,0.22,0.6,0.07,0.02
303
+ 0.04,"[213, 71, 93, 119]",0.0,0.01,0.33,0.55,0.03,0.03
304
+ 0.06,"[212, 70, 95, 121]",0.0,0.02,0.3,0.46,0.03,0.14
305
+ 0.03,"[211, 72, 93, 119]",0.0,0.01,0.23,0.65,0.05,0.03
306
+ 0.03,"[214, 72, 91, 120]",0.0,0.02,0.15,0.73,0.04,0.03
307
+ 0.01,"[212, 74, 91, 117]",0.0,0.01,0.1,0.81,0.03,0.04
308
+ 0.02,"[214, 74, 91, 119]",0.0,0.0,0.05,0.89,0.02,0.02
309
+ 0.04,"[213, 73, 92, 121]",0.0,0.0,0.07,0.82,0.03,0.05
310
+ 0.03,"[213, 75, 91, 119]",0.0,0.0,0.05,0.86,0.03,0.03
311
+ 0.04,"[213, 74, 91, 120]",0.0,0.0,0.05,0.86,0.03,0.02
312
+ 0.06,"[212, 73, 91, 120]",0.0,0.0,0.06,0.82,0.02,0.03
313
+ 0.08,"[212, 73, 91, 120]",0.0,0.02,0.12,0.66,0.07,0.05
314
+ 0.07,"[212, 72, 90, 119]",0.0,0.01,0.16,0.69,0.02,0.06
315
+ 0.08,"[211, 71, 92, 121]",0.0,0.01,0.24,0.58,0.03,0.06
316
+ 0.03,"[208, 74, 91, 116]",0.0,0.04,0.16,0.57,0.1,0.09
317
+ 0.05,"[211, 71, 91, 119]",0.0,0.0,0.02,0.86,0.05,0.01
318
+ 0.04,"[211, 71, 91, 119]",0.0,0.0,0.03,0.86,0.05,0.01
319
+ 0.07,"[211, 72, 91, 118]",0.0,0.0,0.04,0.82,0.05,0.02
320
+ 0.03,"[207, 75, 90, 115]",0.0,0.02,0.14,0.7,0.06,0.06
321
+ 0.04,"[208, 74, 89, 117]",0.0,0.01,0.26,0.59,0.06,0.04
322
+ 0.03,"[208, 75, 90, 115]",0.0,0.0,0.15,0.79,0.02,0.01
323
+ 0.04,"[207, 74, 91, 116]",0.0,0.01,0.22,0.71,0.02,0.01
324
+ 0.02,"[207, 72, 92, 118]",0.0,0.0,0.13,0.82,0.02,0.01
325
+ 0.04,"[209, 71, 90, 119]",0.0,0.0,0.14,0.78,0.01,0.02
326
+ 0.05,"[207, 72, 92, 118]",0.0,0.01,0.18,0.72,0.03,0.02
327
+ 0.06,"[206, 72, 93, 119]",0.0,0.0,0.08,0.8,0.05,0.02
328
+ 0.04,"[206, 73, 91, 117]",0.0,0.0,0.09,0.78,0.05,0.04
329
+ 0.08,"[208, 72, 90, 118]",0.0,0.0,0.05,0.8,0.04,0.02
330
+ 0.03,"[208, 74, 90, 117]",0.0,0.0,0.08,0.82,0.05,0.02
331
+ 0.06,"[207, 73, 92, 119]",0.0,0.0,0.08,0.79,0.03,0.04
332
+ 0.03,"[206, 74, 92, 119]",0.0,0.01,0.19,0.65,0.03,0.09
333
+ 0.04,"[206, 74, 91, 120]",0.0,0.02,0.12,0.61,0.04,0.17
334
+ 0.03,"[206, 73, 92, 121]",0.0,0.01,0.16,0.51,0.01,0.27
335
+ 0.03,"[204, 75, 91, 117]",0.0,0.02,0.25,0.59,0.04,0.08
336
+ 0.03,"[205, 76, 90, 115]",0.0,0.01,0.39,0.53,0.02,0.02
337
+ 0.04,"[204, 76, 91, 116]",0.0,0.0,0.48,0.45,0.01,0.01
338
+ 0.04,"[205, 75, 90, 117]",0.0,0.01,0.33,0.6,0.02,0.01
339
+ 0.08,"[206, 76, 90, 116]",0.0,0.01,0.32,0.56,0.02,0.01
340
+ 0.04,"[206, 73, 92, 120]",0.0,0.01,0.35,0.56,0.01,0.04
341
+ 0.01,"[206, 73, 92, 119]",0.0,0.0,0.3,0.67,0.0,0.02
342
+ 0.06,"[206, 74, 91, 119]",0.0,0.01,0.35,0.56,0.01,0.02
343
+ 0.16,"[205, 73, 92, 121]",0.0,0.02,0.43,0.29,0.02,0.09
344
+ 0.15,"[204, 73, 92, 120]",0.0,0.04,0.46,0.22,0.03,0.1
345
+ 0.21,"[206, 72, 93, 122]",0.0,0.06,0.45,0.15,0.05,0.08
346
+ 0.12,"[206, 71, 93, 120]",0.0,0.02,0.28,0.51,0.02,0.05
347
+ 0.07,"[206, 71, 93, 119]",0.0,0.02,0.2,0.66,0.03,0.02
348
+ 0.03,"[206, 70, 93, 120]",0.0,0.01,0.13,0.81,0.02,0.01
349
+ 0.02,"[207, 72, 92, 116]",0.0,0.0,0.1,0.86,0.02,0.0
350
+ 0.03,"[207, 74, 90, 114]",0.0,0.0,0.09,0.86,0.02,0.0
351
+ 0.01,"[207, 76, 89, 112]",0.0,0.0,0.13,0.84,0.02,0.0
352
+ 0.02,"[208, 75, 90, 115]",0.0,0.0,0.18,0.77,0.03,0.0
353
+ 0.04,"[207, 73, 93, 118]",0.0,0.0,0.33,0.57,0.06,0.0
354
+ 0.02,"[206, 74, 91, 117]",0.0,0.0,0.26,0.71,0.01,0.0
355
+ 0.02,"[205, 75, 92, 115]",0.0,0.0,0.3,0.66,0.01,0.0
356
+ 0.01,"[206, 76, 89, 112]",0.0,0.0,0.38,0.6,0.01,0.0
357
+ 0.03,"[205, 73, 91, 117]",0.0,0.0,0.48,0.47,0.01,0.0
358
+ 0.03,"[205, 72, 93, 119]",0.0,0.0,0.56,0.39,0.01,0.01
359
+ 0.01,"[206, 74, 90, 114]",0.0,0.0,0.56,0.43,0.01,0.0
360
+ 0.02,"[203, 74, 92, 115]",0.0,0.0,0.27,0.68,0.02,0.0
361
+ 0.02,"[204, 74, 91, 115]",0.0,0.0,0.2,0.75,0.02,0.0
362
+ 0.03,"[205, 74, 90, 114]",0.0,0.0,0.19,0.75,0.02,0.0
363
+ 0.03,"[204, 73, 91, 116]",0.0,0.01,0.33,0.6,0.03,0.0
364
+ 0.07,"[203, 74, 92, 116]",0.0,0.02,0.4,0.44,0.04,0.02
365
+ 0.04,"[203, 74, 92, 116]",0.0,0.01,0.66,0.25,0.02,0.02
366
+ 0.01,"[203, 73, 93, 118]",0.0,0.0,0.81,0.15,0.01,0.02
367
+ 0.02,"[204, 72, 92, 119]",0.0,0.0,0.75,0.19,0.01,0.02
368
+ 0.02,"[203, 72, 93, 118]",0.0,0.0,0.75,0.21,0.0,0.02
369
+ 0.02,"[203, 72, 92, 116]",0.0,0.0,0.77,0.2,0.0,0.01
370
+ 0.01,"[204, 74, 89, 113]",0.0,0.0,0.84,0.13,0.0,0.01
371
+ 0.01,"[203, 73, 90, 114]",0.0,0.0,0.88,0.1,0.0,0.01
372
+ 0.02,"[203, 73, 90, 114]",0.0,0.0,0.84,0.12,0.0,0.01
373
+ 0.02,"[203, 73, 90, 114]",0.0,0.0,0.86,0.11,0.0,0.01
374
+ 0.02,"[202, 72, 91, 116]",0.0,0.0,0.87,0.1,0.0,0.01
375
+ 0.02,"[203, 71, 92, 118]",0.0,0.0,0.76,0.2,0.01,0.01
376
+ 0.01,"[203, 72, 92, 117]",0.0,0.01,0.33,0.62,0.02,0.01
377
+ 0.01,"[203, 74, 90, 113]",0.0,0.01,0.22,0.73,0.02,0.01
378
+ 0.02,"[204, 74, 89, 114]",0.0,0.01,0.33,0.61,0.02,0.02
379
+ 0.02,"[203, 73, 92, 116]",0.0,0.0,0.28,0.66,0.02,0.01
380
+ 0.04,"[203, 73, 92, 116]",0.0,0.02,0.43,0.45,0.04,0.02
381
+ 0.07,"[203, 73, 92, 116]",0.0,0.04,0.37,0.44,0.04,0.05
382
+ 0.07,"[204, 73, 91, 116]",0.0,0.02,0.5,0.35,0.02,0.04
383
+ 0.08,"[204, 72, 92, 118]",0.0,0.03,0.47,0.33,0.03,0.07
384
+ 0.08,"[205, 72, 92, 118]",0.0,0.04,0.47,0.32,0.03,0.06
385
+ 0.08,"[205, 72, 91, 118]",0.0,0.03,0.47,0.34,0.03,0.05
386
+ 0.09,"[205, 73, 90, 115]",0.0,0.03,0.42,0.37,0.03,0.06
387
+ 0.06,"[205, 73, 90, 116]",0.0,0.03,0.46,0.43,0.02,0.01
388
+ 0.09,"[205, 75, 90, 114]",0.01,0.04,0.24,0.57,0.05,0.0
389
+ 0.2,"[205, 74, 92, 116]",0.03,0.06,0.28,0.33,0.09,0.0
390
+ 0.08,"[207, 74, 89, 116]",0.01,0.03,0.16,0.66,0.06,0.0
391
+ 0.1,"[207, 71, 90, 116]",0.0,0.03,0.49,0.35,0.03,0.0
392
+ 0.1,"[206, 70, 90, 117]",0.0,0.07,0.59,0.19,0.04,0.01
393
+ 0.11,"[207, 70, 91, 115]",0.0,0.1,0.15,0.49,0.1,0.05
394
+ 0.03,"[206, 71, 89, 113]",0.0,0.04,0.04,0.83,0.03,0.04
395
+ 0.02,"[207, 70, 89, 113]",0.0,0.01,0.04,0.88,0.04,0.01
396
+ 0.03,"[207, 71, 90, 112]",0.0,0.01,0.05,0.86,0.04,0.01
397
+ 0.04,"[207, 70, 90, 113]",0.0,0.02,0.06,0.82,0.05,0.01
398
+ 0.08,"[207, 69, 91, 114]",0.0,0.04,0.05,0.7,0.04,0.1
399
+ 0.21,"[208, 70, 90, 115]",0.0,0.07,0.05,0.47,0.16,0.03
400
+ 0.19,"[207, 69, 93, 117]",0.0,0.06,0.1,0.46,0.1,0.09
401
+ 0.11,"[207, 70, 89, 114]",0.0,0.05,0.27,0.45,0.04,0.07
402
+ 0.11,"[207, 70, 90, 114]",0.0,0.09,0.37,0.25,0.06,0.13
403
+ 0.12,"[208, 69, 90, 115]",0.0,0.1,0.29,0.33,0.06,0.11
404
+ 0.15,"[209, 69, 89, 116]",0.0,0.09,0.3,0.28,0.06,0.12
405
+ 0.16,"[208, 68, 90, 117]",0.0,0.06,0.23,0.25,0.05,0.26
406
+ 0.09,"[208, 68, 92, 117]",0.0,0.02,0.35,0.45,0.03,0.06
407
+ 0.09,"[209, 68, 91, 117]",0.0,0.02,0.36,0.45,0.03,0.05
408
+ 0.07,"[207, 68, 92, 117]",0.0,0.04,0.49,0.31,0.03,0.07
409
+ 0.08,"[207, 68, 91, 116]",0.0,0.04,0.39,0.38,0.04,0.07
410
+ 0.06,"[208, 69, 90, 115]",0.0,0.04,0.25,0.54,0.06,0.05
411
+ 0.05,"[208, 66, 91, 118]",0.0,0.03,0.12,0.68,0.05,0.07
412
+ 0.02,"[208, 69, 90, 116]",0.0,0.01,0.05,0.84,0.07,0.0
413
+ 0.02,"[208, 70, 90, 115]",0.0,0.01,0.06,0.86,0.04,0.01
414
+ 0.03,"[208, 70, 90, 114]",0.0,0.01,0.02,0.85,0.07,0.01
415
+ 0.11,"[208, 68, 90, 117]",0.0,0.09,0.1,0.35,0.08,0.27
416
+ 0.09,"[208, 69, 89, 115]",0.0,0.02,0.18,0.62,0.04,0.06
417
+ 0.1,"[207, 69, 89, 115]",0.0,0.02,0.18,0.61,0.03,0.06
418
+ 0.04,"[209, 70, 88, 115]",0.0,0.01,0.21,0.71,0.03,0.01
419
+ 0.05,"[208, 70, 89, 115]",0.0,0.01,0.39,0.5,0.03,0.02
420
+ 0.05,"[209, 70, 88, 114]",0.0,0.01,0.22,0.67,0.03,0.02
421
+ 0.05,"[206, 70, 90, 115]",0.0,0.01,0.24,0.65,0.03,0.02
422
+ 0.05,"[207, 71, 89, 114]",0.0,0.01,0.16,0.73,0.03,0.01
423
+ 0.05,"[207, 71, 89, 114]",0.0,0.01,0.12,0.79,0.03,0.01
424
+ 0.08,"[207, 70, 90, 116]",0.0,0.01,0.19,0.66,0.03,0.03
425
+ 0.06,"[207, 70, 89, 117]",0.0,0.01,0.29,0.6,0.03,0.02
426
+ 0.09,"[207, 72, 88, 115]",0.0,0.02,0.27,0.54,0.04,0.05
427
+ 0.05,"[207, 72, 88, 115]",0.0,0.01,0.17,0.72,0.03,0.01
428
+ 0.05,"[204, 71, 90, 116]",0.0,0.01,0.06,0.82,0.02,0.04
429
+ 0.03,"[205, 72, 89, 116]",0.0,0.0,0.02,0.9,0.02,0.02
430
+ 0.03,"[205, 71, 91, 119]",0.0,0.0,0.01,0.93,0.02,0.01
431
+ 0.04,"[204, 73, 91, 119]",0.0,0.0,0.02,0.89,0.02,0.03
432
+ 0.04,"[206, 74, 90, 120]",0.0,0.0,0.01,0.91,0.03,0.01
433
+ 0.05,"[203, 75, 92, 120]",0.0,0.01,0.02,0.87,0.02,0.03
434
+ 0.04,"[203, 77, 91, 119]",0.0,0.01,0.02,0.87,0.02,0.05
435
+ 0.04,"[203, 77, 92, 120]",0.0,0.0,0.02,0.9,0.01,0.02
436
+ 0.03,"[204, 77, 92, 122]",0.0,0.0,0.03,0.91,0.01,0.01
437
+ 0.02,"[203, 78, 91, 120]",0.0,0.0,0.03,0.92,0.01,0.02
438
+ 0.03,"[203, 77, 92, 121]",0.0,0.01,0.07,0.74,0.01,0.13
439
+ 0.03,"[203, 78, 91, 120]",0.0,0.0,0.08,0.67,0.01,0.2
440
+ 0.03,"[203, 78, 92, 120]",0.0,0.01,0.1,0.54,0.01,0.32
441
+ 0.03,"[203, 78, 92, 118]",0.0,0.01,0.08,0.73,0.01,0.15
442
+ 0.02,"[204, 76, 92, 121]",0.0,0.0,0.07,0.82,0.01,0.07
443
+ 0.04,"[204, 77, 92, 120]",0.0,0.0,0.05,0.84,0.01,0.06
444
+ 0.02,"[205, 77, 91, 119]",0.0,0.0,0.06,0.87,0.01,0.04
445
+ 0.01,"[204, 76, 92, 120]",0.0,0.0,0.1,0.86,0.0,0.02
446
+ 0.01,"[205, 76, 92, 119]",0.0,0.0,0.12,0.82,0.0,0.04
447
+ 0.03,"[205, 77, 90, 118]",0.0,0.0,0.59,0.36,0.0,0.02
448
+ 0.02,"[205, 74, 91, 119]",0.0,0.0,0.43,0.52,0.0,0.02
449
+ 0.03,"[204, 73, 92, 121]",0.0,0.0,0.53,0.42,0.0,0.02
450
+ 0.03,"[203, 74, 90, 117]",0.0,0.0,0.55,0.41,0.0,0.01
451
+ 0.03,"[202, 73, 91, 117]",0.0,0.0,0.66,0.29,0.0,0.01
452
+ 0.03,"[203, 71, 91, 118]",0.0,0.0,0.66,0.29,0.0,0.02
453
+ 0.03,"[203, 71, 92, 118]",0.0,0.0,0.71,0.23,0.01,0.02
454
+ 0.04,"[203, 72, 90, 116]",0.0,0.01,0.76,0.18,0.01,0.01
455
+ 0.04,"[203, 69, 92, 119]",0.0,0.01,0.72,0.18,0.01,0.05
456
+ 0.05,"[203, 68, 93, 119]",0.0,0.01,0.7,0.2,0.01,0.04
457
+ 0.03,"[203, 66, 92, 120]",0.0,0.0,0.75,0.21,0.01,0.01
458
+ 0.06,"[203, 67, 93, 119]",0.0,0.01,0.78,0.09,0.01,0.06
459
+ 0.07,"[204, 67, 91, 118]",0.0,0.01,0.75,0.13,0.01,0.04
460
+ 0.09,"[204, 66, 91, 120]",0.0,0.01,0.59,0.27,0.02,0.02
461
+ 0.07,"[204, 67, 90, 116]",0.0,0.01,0.15,0.69,0.06,0.01
462
+ 0.05,"[204, 67, 90, 116]",0.0,0.0,0.1,0.81,0.03,0.01
463
+ 0.05,"[204, 67, 90, 116]",0.0,0.0,0.08,0.84,0.03,0.01
464
+ 0.04,"[204, 68, 90, 116]",0.0,0.02,0.16,0.72,0.04,0.02
465
+ 0.04,"[204, 67, 90, 116]",0.0,0.01,0.14,0.76,0.03,0.02
466
+ 0.06,"[205, 67, 90, 116]",0.0,0.0,0.05,0.85,0.03,0.01
467
+ 0.04,"[206, 68, 89, 115]",0.0,0.0,0.06,0.86,0.02,0.01
468
+ 0.04,"[206, 71, 89, 111]",0.0,0.01,0.03,0.85,0.06,0.0
469
+ 0.11,"[206, 71, 89, 112]",0.0,0.05,0.09,0.6,0.13,0.02
470
+ 0.11,"[207, 69, 89, 113]",0.0,0.07,0.19,0.45,0.11,0.06
471
+ 0.08,"[207, 69, 88, 112]",0.0,0.01,0.06,0.81,0.03,0.01
472
+ 0.1,"[205, 68, 91, 114]",0.0,0.02,0.15,0.65,0.06,0.03
473
+ 0.08,"[206, 68, 90, 115]",0.0,0.01,0.17,0.66,0.04,0.03
474
+ 0.05,"[206, 71, 88, 112]",0.0,0.02,0.34,0.5,0.07,0.02
475
+ 0.11,"[206, 67, 91, 117]",0.0,0.02,0.55,0.26,0.03,0.04
476
+ 0.1,"[206, 67, 91, 117]",0.0,0.01,0.53,0.29,0.04,0.02
477
+ 0.07,"[206, 67, 91, 117]",0.0,0.01,0.54,0.32,0.03,0.03
478
+ 0.04,"[205, 68, 91, 117]",0.0,0.01,0.75,0.17,0.0,0.02
479
+ 0.05,"[205, 68, 91, 116]",0.0,0.01,0.66,0.25,0.01,0.02
480
+ 0.03,"[204, 68, 91, 116]",0.0,0.0,0.74,0.21,0.0,0.01
481
+ 0.02,"[204, 68, 91, 115]",0.0,0.0,0.79,0.18,0.0,0.01
482
+ 0.04,"[205, 69, 90, 115]",0.0,0.01,0.76,0.17,0.01,0.01
483
+ 0.03,"[204, 69, 91, 115]",0.0,0.0,0.79,0.17,0.0,0.01
484
+ 0.01,"[203, 68, 92, 116]",0.0,0.0,0.9,0.08,0.0,0.0
485
+ 0.02,"[203, 68, 90, 115]",0.0,0.0,0.89,0.09,0.0,0.0
486
+ 0.02,"[204, 69, 90, 113]",0.0,0.01,0.78,0.18,0.0,0.01
487
+ 0.03,"[204, 71, 90, 114]",0.0,0.0,0.82,0.13,0.0,0.01
488
+ 0.02,"[204, 70, 90, 115]",0.0,0.0,0.88,0.09,0.0,0.0
489
+ 0.02,"[206, 72, 87, 112]",0.0,0.0,0.84,0.13,0.0,0.01
490
+ 0.02,"[206, 74, 88, 111]",0.0,0.0,0.74,0.22,0.01,0.0
491
+ 0.01,"[207, 71, 89, 113]",0.0,0.0,0.86,0.12,0.0,0.01
492
+ 0.02,"[208, 70, 90, 114]",0.0,0.0,0.85,0.12,0.0,0.0
493
+ 0.03,"[210, 70, 90, 113]",0.0,0.01,0.49,0.46,0.01,0.01
494
+ 0.01,"[213, 73, 88, 107]",0.0,0.01,0.12,0.83,0.02,0.01
495
+ 0.02,"[215, 73, 87, 106]",0.0,0.02,0.06,0.86,0.04,0.01
496
+ 0.02,"[216, 72, 88, 106]",0.0,0.01,0.04,0.9,0.03,0.0
497
+ 0.02,"[220, 74, 85, 103]",0.0,0.01,0.04,0.89,0.04,0.0
498
+ 0.02,"[220, 70, 86, 107]",0.0,0.01,0.06,0.89,0.02,0.0
499
+ 0.02,"[222, 71, 85, 104]",0.0,0.01,0.06,0.89,0.02,0.0
500
+ 0.02,"[223, 71, 87, 105]",0.0,0.01,0.09,0.84,0.03,0.01
501
+ 0.03,"[225, 71, 86, 106]",0.0,0.02,0.11,0.8,0.04,0.01
502
+ 0.04,"[226, 71, 87, 107]",0.0,0.01,0.14,0.79,0.02,0.01
503
+ 0.04,"[228, 73, 86, 106]",0.0,0.01,0.18,0.73,0.03,0.01
504
+ 0.02,"[230, 75, 86, 106]",0.0,0.01,0.26,0.67,0.02,0.01
505
+ 0.01,"[232, 77, 85, 104]",0.0,0.0,0.19,0.79,0.01,0.0
506
+ 0.01,"[234, 79, 84, 104]",0.0,0.0,0.13,0.83,0.02,0.0
507
+ 0.01,"[234, 80, 84, 103]",0.0,0.0,0.1,0.87,0.02,0.0
508
+ 0.01,"[234, 79, 84, 104]",0.0,0.01,0.22,0.73,0.02,0.01
509
+ 0.01,"[234, 76, 85, 105]",0.0,0.0,0.27,0.71,0.01,0.0
510
+ 0.01,"[234, 76, 85, 104]",0.0,0.0,0.36,0.61,0.01,0.0
511
+ 0.01,"[232, 74, 85, 106]",0.0,0.0,0.34,0.62,0.02,0.0
512
+ 0.02,"[231, 74, 85, 105]",0.0,0.01,0.33,0.61,0.02,0.01
513
+ 0.05,"[230, 72, 84, 107]",0.0,0.01,0.37,0.53,0.04,0.01
514
+ 0.02,"[228, 72, 84, 107]",0.0,0.0,0.51,0.46,0.01,0.0
515
+ 0.01,"[227, 75, 83, 103]",0.0,0.0,0.21,0.76,0.01,0.0
516
+ 0.03,"[225, 74, 82, 104]",0.0,0.0,0.29,0.67,0.01,0.0
517
+ 0.03,"[223, 71, 78, 105]",0.0,0.0,0.24,0.7,0.01,0.0
518
+ 0.01,"[221, 75, 81, 104]",0.0,0.0,0.24,0.74,0.01,0.0
519
+ 0.01,"[218, 75, 82, 107]",0.0,0.0,0.19,0.79,0.01,0.0
520
+ 0.02,"[216, 77, 80, 106]",0.0,0.0,0.27,0.69,0.02,0.0
521
+ 0.07,"[213, 76, 79, 106]",0.0,0.01,0.42,0.42,0.08,0.0
522
+ 0.06,"[212, 77, 78, 107]",0.0,0.01,0.34,0.49,0.09,0.0
523
+ 0.06,"[207, 80, 76, 103]",0.0,0.01,0.08,0.78,0.08,0.0
524
+ 0.01,"[204, 80, 75, 104]",0.0,0.0,0.03,0.9,0.05,0.0
525
+ 0.03,"[203, 84, 69, 104]",0.0,0.01,0.06,0.84,0.06,0.0
526
+ 0.04,"[201, 87, 68, 103]",0.0,0.01,0.05,0.86,0.04,0.0
527
+ 0.04,"[198, 89, 67, 102]",0.0,0.04,0.05,0.8,0.07,0.0
528
+ 0.04,"[201, 90, 70, 96]",0.0,0.04,0.06,0.8,0.04,0.02
529
+ 0.05,"[197, 74, 90, 118]",0.0,0.04,0.15,0.67,0.06,0.02
530
+ 0.07,"[199, 74, 85, 112]",0.0,0.03,0.41,0.42,0.06,0.01
531
+ 0.03,"[201, 72, 85, 113]",0.0,0.02,0.33,0.56,0.06,0.01
532
+ 0.04,"[201, 67, 93, 122]",0.0,0.04,0.27,0.53,0.1,0.03
533
+ 0.03,"[211, 70, 79, 104]",0.0,0.01,0.09,0.85,0.02,0.01
534
+ 0.08,"[221, 72, 79, 103]",0.0,0.0,0.11,0.79,0.02,0.0
535
+ 0.06,"[222, 73, 80, 103]",0.0,0.0,0.17,0.75,0.02,0.0
536
+ 0.11,"[225, 71, 79, 106]",0.0,0.01,0.12,0.75,0.02,0.0
537
+ 0.05,"[224, 74, 83, 106]",0.0,0.01,0.12,0.8,0.02,0.0
538
+ 0.02,"[225, 75, 81, 104]",0.0,0.0,0.21,0.76,0.01,0.0
539
+ 0.02,"[227, 74, 83, 106]",0.0,0.0,0.37,0.59,0.01,0.0
540
+ 0.03,"[226, 76, 82, 103]",0.0,0.0,0.19,0.77,0.01,0.0
541
+ 0.02,"[227, 76, 82, 103]",0.0,0.0,0.11,0.85,0.01,0.0
542
+ 0.02,"[226, 75, 83, 104]",0.0,0.0,0.07,0.89,0.01,0.0
543
+ 0.02,"[226, 75, 83, 105]",0.0,0.0,0.13,0.83,0.01,0.0
544
+ 0.01,"[225, 74, 84, 105]",0.0,0.0,0.09,0.89,0.01,0.0
545
+ 0.01,"[225, 74, 84, 105]",0.0,0.0,0.09,0.89,0.01,0.0
546
+ 0.01,"[226, 75, 83, 104]",0.0,0.0,0.06,0.91,0.01,0.0
547
+ 0.01,"[224, 74, 86, 106]",0.0,0.0,0.09,0.88,0.01,0.0
548
+ 0.01,"[225, 75, 84, 105]",0.0,0.0,0.1,0.88,0.01,0.0
549
+ 0.01,"[225, 76, 84, 105]",0.0,0.0,0.12,0.86,0.01,0.0
550
+ 0.02,"[224, 76, 85, 105]",0.0,0.0,0.12,0.85,0.01,0.0
551
+ 0.02,"[224, 76, 84, 105]",0.0,0.0,0.17,0.8,0.01,0.0
552
+ 0.02,"[224, 74, 85, 107]",0.0,0.0,0.15,0.82,0.0,0.0
553
+ 0.01,"[225, 76, 83, 104]",0.0,0.0,0.09,0.89,0.01,0.0
554
+ 0.03,"[223, 75, 86, 106]",0.0,0.0,0.17,0.79,0.01,0.0
555
+ 0.02,"[223, 74, 86, 108]",0.0,0.0,0.17,0.79,0.01,0.0
556
+ 0.01,"[226, 76, 83, 105]",0.0,0.0,0.05,0.93,0.01,0.0
557
+ 0.01,"[226, 76, 83, 105]",0.0,0.0,0.05,0.93,0.01,0.0
558
+ 0.03,"[226, 75, 83, 106]",0.0,0.0,0.09,0.88,0.0,0.0
559
+ 0.02,"[225, 76, 85, 106]",0.0,0.0,0.12,0.85,0.01,0.0
560
+ 0.02,"[225, 74, 84, 107]",0.0,0.0,0.12,0.85,0.01,0.0
561
+ 0.01,"[225, 75, 84, 106]",0.0,0.0,0.13,0.85,0.01,0.0
562
+ 0.02,"[225, 75, 85, 107]",0.0,0.0,0.16,0.81,0.01,0.0
563
+ 0.02,"[224, 75, 85, 107]",0.0,0.0,0.21,0.76,0.01,0.0
564
+ 0.02,"[224, 73, 85, 109]",0.0,0.0,0.17,0.8,0.01,0.0
565
+ 0.03,"[226, 74, 83, 107]",0.0,0.0,0.19,0.77,0.01,0.0
566
+ 0.04,"[225, 74, 84, 108]",0.0,0.0,0.42,0.53,0.0,0.0
567
+ 0.03,"[225, 73, 84, 109]",0.0,0.0,0.68,0.27,0.0,0.0
568
+ 0.05,"[226, 74, 84, 108]",0.0,0.01,0.48,0.47,0.0,0.0
569
+ 0.06,"[226, 74, 84, 108]",0.0,0.01,0.54,0.38,0.0,0.01
570
+ 0.03,"[225, 74, 84, 109]",0.0,0.01,0.56,0.39,0.0,0.0
571
+ 0.02,"[225, 74, 85, 109]",0.0,0.0,0.75,0.22,0.0,0.0
572
+ 0.02,"[225, 74, 84, 110]",0.0,0.0,0.8,0.18,0.0,0.0
573
+ 0.02,"[224, 74, 85, 109]",0.0,0.0,0.92,0.06,0.0,0.0
574
+ 0.02,"[224, 74, 85, 110]",0.0,0.0,0.8,0.17,0.0,0.0
575
+ 0.02,"[224, 73, 85, 111]",0.0,0.0,0.82,0.15,0.0,0.0
576
+ 0.02,"[223, 73, 85, 111]",0.0,0.0,0.82,0.15,0.0,0.01
577
+ 0.03,"[221, 72, 83, 112]",0.0,0.0,0.92,0.05,0.0,0.01
578
+ 0.01,"[222, 72, 82, 112]",0.0,0.0,0.95,0.04,0.0,0.0
579
+ 0.02,"[222, 73, 82, 110]",0.0,0.0,0.95,0.03,0.0,0.01
580
+ 0.01,"[222, 73, 86, 110]",0.0,0.0,0.96,0.02,0.0,0.01
581
+ 0.0,"[222, 74, 86, 110]",0.0,0.0,0.96,0.03,0.0,0.0
582
+ 0.02,"[222, 73, 82, 112]",0.0,0.0,0.95,0.03,0.0,0.01
583
+ 0.02,"[219, 73, 87, 111]",0.0,0.0,0.95,0.03,0.0,0.0
584
+ 0.0,"[222, 76, 84, 107]",0.0,0.0,0.96,0.03,0.0,0.0
585
+ 0.01,"[220, 73, 85, 111]",0.0,0.0,0.95,0.03,0.0,0.01
586
+ 0.0,"[221, 73, 85, 110]",0.0,0.0,0.97,0.02,0.0,0.0
587
+ 0.01,"[220, 72, 86, 110]",0.0,0.0,0.95,0.03,0.0,0.01
588
+ 0.0,"[221, 72, 84, 109]",0.0,0.0,0.98,0.02,0.0,0.0
589
+ 0.0,"[220, 72, 85, 108]",0.0,0.0,0.98,0.02,0.0,0.0
590
+ 0.0,"[221, 74, 84, 105]",0.0,0.0,0.94,0.05,0.0,0.0
591
+ 0.0,"[221, 73, 84, 106]",0.0,0.0,0.98,0.02,0.0,0.0
592
+ 0.01,"[222, 73, 83, 107]",0.0,0.0,0.89,0.1,0.0,0.0
593
+ 0.01,"[223, 73, 83, 107]",0.0,0.0,0.94,0.05,0.0,0.0
594
+ 0.01,"[223, 73, 83, 108]",0.0,0.0,0.88,0.1,0.0,0.0
595
+ 0.01,"[224, 73, 82, 107]",0.0,0.0,0.96,0.03,0.0,0.0
596
+ 0.02,"[222, 71, 83, 110]",0.0,0.0,0.93,0.05,0.0,0.0
597
+ 0.01,"[223, 73, 83, 107]",0.0,0.0,0.91,0.07,0.0,0.0
598
+ 0.02,"[223, 74, 82, 107]",0.0,0.0,0.72,0.26,0.0,0.0
599
+ 0.02,"[224, 71, 81, 109]",0.0,0.0,0.95,0.03,0.0,0.0
600
+ 0.01,"[222, 71, 83, 109]",0.0,0.0,0.96,0.02,0.0,0.0
601
+ 0.01,"[223, 71, 82, 108]",0.0,0.0,0.97,0.02,0.0,0.0
602
+ 0.01,"[222, 69, 83, 110]",0.0,0.0,0.97,0.02,0.0,0.0
603
+ 0.01,"[222, 68, 82, 111]",0.0,0.0,0.98,0.01,0.0,0.0
604
+ 0.01,"[222, 67, 83, 112]",0.0,0.0,0.98,0.01,0.0,0.0
605
+ 0.02,"[222, 68, 83, 111]",0.0,0.0,0.95,0.02,0.0,0.0
606
+ 0.04,"[222, 70, 84, 109]",0.0,0.0,0.91,0.04,0.0,0.0
607
+ 0.04,"[221, 69, 85, 112]",0.0,0.0,0.81,0.14,0.0,0.0
608
+ 0.03,"[220, 69, 87, 112]",0.0,0.0,0.82,0.13,0.0,0.01
609
+ 0.02,"[221, 69, 86, 112]",0.0,0.0,0.83,0.14,0.0,0.01
610
+ 0.02,"[221, 69, 85, 113]",0.0,0.0,0.8,0.17,0.0,0.01
611
+ 0.02,"[219, 69, 87, 113]",0.0,0.01,0.79,0.17,0.0,0.01
612
+ 0.02,"[221, 70, 86, 112]",0.0,0.01,0.6,0.36,0.01,0.01
613
+ 0.02,"[219, 70, 89, 113]",0.0,0.0,0.29,0.66,0.01,0.02
614
+ 0.01,"[219, 71, 89, 112]",0.0,0.0,0.25,0.71,0.01,0.01
615
+ 0.02,"[220, 71, 87, 112]",0.0,0.01,0.31,0.64,0.03,0.0
616
+ 0.01,"[218, 69, 88, 113]",0.0,0.0,0.17,0.8,0.01,0.0
617
+ 0.01,"[219, 68, 86, 112]",0.0,0.0,0.15,0.83,0.0,0.0
618
+ 0.02,"[219, 68, 86, 112]",0.0,0.0,0.09,0.87,0.02,0.0
619
+ 0.02,"[217, 67, 88, 113]",0.0,0.0,0.13,0.83,0.02,0.0
620
+ 0.01,"[216, 67, 90, 112]",0.0,0.0,0.2,0.77,0.01,0.0
621
+ 0.01,"[216, 68, 89, 111]",0.0,0.0,0.26,0.72,0.01,0.0
622
+ 0.01,"[215, 68, 89, 110]",0.0,0.0,0.42,0.56,0.0,0.0
623
+ 0.01,"[213, 70, 88, 108]",0.0,0.0,0.51,0.47,0.01,0.0
624
+ 0.02,"[212, 71, 88, 107]",0.0,0.0,0.49,0.48,0.01,0.0
625
+ 0.01,"[210, 68, 89, 110]",0.0,0.0,0.59,0.39,0.01,0.0
626
+ 0.01,"[209, 68, 88, 110]",0.0,0.0,0.26,0.71,0.02,0.0
627
+ 0.01,"[207, 67, 91, 111]",0.0,0.0,0.33,0.63,0.03,0.0
628
+ 0.01,"[206, 66, 90, 112]",0.0,0.0,0.32,0.63,0.03,0.0
629
+ 0.01,"[205, 66, 89, 112]",0.0,0.01,0.13,0.82,0.03,0.0
630
+ 0.01,"[204, 66, 90, 113]",0.0,0.0,0.37,0.6,0.02,0.0
631
+ 0.01,"[205, 70, 86, 108]",0.0,0.0,0.28,0.7,0.01,0.0
632
+ 0.01,"[204, 68, 88, 113]",0.0,0.0,0.45,0.53,0.01,0.0
633
+ 0.01,"[206, 72, 84, 108]",0.0,0.0,0.3,0.67,0.01,0.0
634
+ 0.02,"[207, 73, 83, 107]",0.0,0.01,0.5,0.45,0.02,0.0
635
+ 0.02,"[210, 74, 81, 106]",0.0,0.01,0.41,0.54,0.02,0.0
636
+ 0.03,"[209, 68, 84, 115]",0.0,0.01,0.27,0.65,0.04,0.0
637
+ 0.02,"[210, 70, 81, 112]",0.0,0.01,0.18,0.76,0.02,0.0
638
+ 0.04,"[215, 67, 84, 114]",0.0,0.02,0.14,0.76,0.04,0.0
639
+ 0.02,"[220, 70, 79, 112]",0.0,0.07,0.2,0.6,0.09,0.02
640
+ 0.01,"[223, 74, 77, 107]",0.0,0.04,0.31,0.56,0.06,0.01
641
+ 0.02,"[193, 76, 78, 96]",0.0,0.0,0.14,0.81,0.03,0.0
642
+ 0.05,"[188, 78, 76, 92]",0.0,0.01,0.11,0.79,0.03,0.01
643
+ 0.03,"[188, 78, 76, 92]",0.0,0.01,0.04,0.88,0.03,0.01
644
+ 0.09,"[187, 80, 76, 91]",0.0,0.02,0.03,0.82,0.03,0.02
645
+ 0.16,"[187, 80, 74, 90]",0.0,0.02,0.03,0.72,0.05,0.03
646
+ 0.14,"[185, 81, 76, 90]",0.0,0.02,0.05,0.73,0.03,0.02
647
+ 0.12,"[185, 82, 76, 90]",0.0,0.03,0.05,0.74,0.04,0.02
648
+ 0.11,"[184, 81, 76, 90]",0.0,0.02,0.06,0.77,0.03,0.02
649
+ 0.11,"[185, 83, 75, 90]",0.0,0.03,0.04,0.75,0.03,0.03
650
+ 0.14,"[184, 82, 75, 90]",0.0,0.02,0.07,0.71,0.01,0.04
651
+ 0.18,"[184, 83, 75, 89]",0.0,0.02,0.08,0.65,0.01,0.06
652
+ 0.2,"[183, 82, 75, 90]",0.0,0.02,0.1,0.61,0.01,0.07
653
+ 0.12,"[183, 82, 75, 91]",0.0,0.02,0.1,0.73,0.01,0.02
654
+ 0.1,"[183, 83, 75, 90]",0.0,0.02,0.09,0.76,0.01,0.02
655
+ 0.12,"[183, 82, 75, 91]",0.0,0.02,0.1,0.72,0.01,0.02
656
+ 0.2,"[183, 83, 75, 91]",0.0,0.02,0.08,0.66,0.01,0.02
657
+ 0.07,"[183, 82, 77, 92]",0.0,0.01,0.06,0.83,0.01,0.02
658
+ 0.13,"[185, 83, 75, 92]",0.0,0.02,0.11,0.69,0.01,0.03
659
+ 0.1,"[185, 83, 75, 93]",0.0,0.02,0.12,0.72,0.01,0.03
660
+ 0.08,"[185, 83, 76, 93]",0.0,0.02,0.12,0.75,0.01,0.01
661
+ 0.07,"[186, 83, 76, 93]",0.0,0.02,0.14,0.74,0.01,0.03
662
+ 0.08,"[187, 83, 76, 92]",0.0,0.01,0.09,0.78,0.01,0.03
663
+ 0.08,"[187, 83, 76, 93]",0.0,0.01,0.07,0.81,0.02,0.02
664
+ 0.12,"[188, 84, 76, 92]",0.0,0.02,0.13,0.7,0.02,0.03
665
+ 0.09,"[189, 84, 76, 93]",0.0,0.01,0.23,0.62,0.01,0.04
666
+ 0.04,"[189, 81, 79, 96]",0.0,0.01,0.09,0.82,0.01,0.02
667
+ 0.05,"[191, 82, 77, 95]",0.0,0.01,0.07,0.81,0.02,0.04
668
+ 0.1,"[191, 83, 76, 94]",0.0,0.02,0.1,0.72,0.02,0.04
669
+ 0.04,"[192, 81, 77, 96]",0.0,0.01,0.09,0.82,0.02,0.03
670
+ 0.08,"[192, 82, 78, 95]",0.0,0.01,0.1,0.75,0.02,0.05
671
+ 0.08,"[193, 82, 78, 95]",0.0,0.01,0.08,0.77,0.01,0.04
672
+ 0.05,"[194, 81, 77, 97]",0.0,0.01,0.1,0.8,0.02,0.02
673
+ 0.07,"[195, 83, 76, 94]",0.0,0.01,0.15,0.75,0.01,0.02
674
+ 0.03,"[195, 83, 76, 94]",0.0,0.0,0.14,0.8,0.01,0.01
675
+ 0.02,"[195, 82, 76, 95]",0.0,0.0,0.16,0.81,0.01,0.0
676
+ 0.02,"[196, 82, 76, 95]",0.0,0.0,0.23,0.74,0.0,0.0
677
+ 0.02,"[195, 82, 78, 96]",0.0,0.0,0.19,0.77,0.01,0.01
678
+ 0.02,"[197, 83, 76, 94]",0.0,0.0,0.24,0.73,0.01,0.01
679
+ 0.03,"[197, 83, 76, 94]",0.0,0.01,0.25,0.69,0.01,0.01
680
+ 0.03,"[197, 83, 77, 94]",0.0,0.0,0.43,0.52,0.0,0.01
681
+ 0.05,"[197, 83, 77, 95]",0.0,0.0,0.63,0.32,0.0,0.01
682
+ 0.04,"[197, 83, 77, 95]",0.0,0.0,0.69,0.27,0.0,0.0
683
+ 0.03,"[196, 82, 79, 98]",0.0,0.0,0.79,0.16,0.0,0.02
684
+ 0.02,"[197, 82, 77, 98]",0.0,0.0,0.88,0.09,0.0,0.01
685
+ 0.01,"[197, 82, 78, 98]",0.0,0.0,0.9,0.08,0.0,0.0
686
+ 0.01,"[197, 82, 78, 99]",0.0,0.0,0.9,0.08,0.0,0.01
687
+ 0.01,"[197, 82, 78, 98]",0.0,0.0,0.92,0.06,0.0,0.0
688
+ 0.02,"[197, 83, 77, 97]",0.0,0.0,0.92,0.06,0.0,0.0
689
+ 0.03,"[198, 83, 77, 97]",0.0,0.0,0.9,0.06,0.0,0.01
690
+ 0.01,"[198, 83, 77, 98]",0.0,0.0,0.96,0.02,0.0,0.0
691
+ 0.02,"[198, 84, 77, 96]",0.0,0.0,0.93,0.04,0.0,0.01
692
+ 0.02,"[198, 84, 77, 97]",0.0,0.0,0.93,0.04,0.0,0.0
693
+ 0.02,"[198, 83, 77, 98]",0.0,0.0,0.95,0.03,0.0,0.0
694
+ 0.02,"[198, 83, 78, 97]",0.0,0.0,0.91,0.06,0.0,0.01
695
+ 0.02,"[199, 83, 77, 97]",0.0,0.0,0.94,0.03,0.0,0.0
696
+ 0.04,"[198, 83, 79, 97]",0.0,0.0,0.91,0.05,0.0,0.0
697
+ 0.01,"[199, 83, 78, 97]",0.0,0.0,0.95,0.03,0.0,0.0
698
+ 0.01,"[199, 82, 78, 99]",0.0,0.0,0.98,0.01,0.0,0.0
699
+ 0.01,"[200, 83, 78, 97]",0.0,0.0,0.93,0.05,0.0,0.01
700
+ 0.0,"[199, 82, 80, 101]",0.0,0.0,0.98,0.01,0.0,0.0
701
+ 0.0,"[198, 82, 79, 100]",0.0,0.0,0.99,0.0,0.0,0.0
702
+ 0.0,"[199, 82, 78, 99]",0.0,0.0,0.98,0.01,0.0,0.0
703
+ 0.0,"[198, 82, 79, 99]",0.0,0.0,0.98,0.01,0.0,0.0
704
+ 0.01,"[197, 81, 80, 100]",0.0,0.0,0.96,0.03,0.0,0.0
705
+ 0.0,"[196, 79, 83, 102]",0.0,0.0,0.97,0.02,0.0,0.0
706
+ 0.0,"[197, 79, 81, 102]",0.0,0.0,0.96,0.03,0.0,0.0
707
+ 0.0,"[197, 80, 79, 99]",0.0,0.0,0.97,0.02,0.0,0.0
708
+ 0.0,"[196, 79, 81, 100]",0.0,0.0,0.95,0.04,0.0,0.0
709
+ 0.0,"[196, 79, 81, 99]",0.0,0.0,0.96,0.03,0.0,0.0
710
+ 0.01,"[197, 79, 78, 98]",0.0,0.0,0.92,0.07,0.0,0.0
711
+ 0.0,"[197, 75, 84, 103]",0.0,0.0,0.99,0.01,0.0,0.0
712
+ 0.0,"[196, 75, 82, 102]",0.0,0.0,0.97,0.02,0.0,0.0
713
+ 0.0,"[196, 75, 83, 102]",0.0,0.0,0.98,0.02,0.0,0.0
714
+ 0.0,"[197, 74, 82, 103]",0.0,0.0,0.99,0.01,0.0,0.0
715
+ 0.0,"[197, 73, 82, 103]",0.0,0.0,0.99,0.01,0.0,0.0
716
+ 0.0,"[197, 72, 84, 103]",0.0,0.0,0.97,0.02,0.0,0.0
717
+ 0.0,"[197, 72, 84, 104]",0.0,0.0,0.99,0.01,0.0,0.0
718
+ 0.01,"[196, 71, 84, 104]",0.0,0.0,0.96,0.03,0.0,0.0
719
+ 0.01,"[197, 71, 83, 104]",0.0,0.0,0.97,0.02,0.0,0.0
720
+ 0.01,"[197, 71, 84, 103]",0.0,0.0,0.97,0.02,0.0,0.0
721
+ 0.0,"[196, 69, 86, 107]",0.0,0.0,0.99,0.01,0.0,0.0
722
+ 0.0,"[196, 69, 86, 106]",0.0,0.0,0.97,0.03,0.0,0.0
723
+ 0.0,"[196, 69, 85, 108]",0.0,0.0,0.98,0.02,0.0,0.0
724
+ 0.0,"[193, 66, 90, 113]",0.0,0.0,0.99,0.01,0.0,0.0
725
+ 0.01,"[194, 69, 88, 109]",0.0,0.0,0.96,0.03,0.0,0.0
726
+ 0.01,"[194, 72, 86, 107]",0.0,0.0,0.94,0.05,0.0,0.0
727
+ 0.01,"[193, 70, 88, 110]",0.0,0.0,0.97,0.02,0.0,0.0
728
+ 0.01,"[192, 71, 89, 110]",0.0,0.0,0.96,0.03,0.0,0.0
729
+ 0.01,"[192, 72, 89, 111]",0.0,0.0,0.96,0.03,0.0,0.01
730
+ 0.01,"[192, 72, 88, 112]",0.0,0.0,0.97,0.02,0.0,0.0
731
+ 0.01,"[192, 72, 88, 112]",0.0,0.0,0.96,0.02,0.0,0.0
732
+ 0.0,"[191, 70, 91, 113]",0.0,0.0,0.98,0.01,0.0,0.0
733
+ 0.0,"[191, 70, 90, 113]",0.0,0.0,0.98,0.01,0.0,0.0
734
+ 0.0,"[191, 68, 92, 114]",0.0,0.0,0.99,0.01,0.0,0.0
735
+ 0.0,"[192, 68, 92, 114]",0.0,0.0,0.99,0.01,0.0,0.0
736
+ 0.0,"[194, 69, 90, 112]",0.0,0.0,0.98,0.02,0.0,0.0
737
+ 0.01,"[193, 68, 93, 114]",0.0,0.0,0.98,0.01,0.0,0.0
738
+ 0.01,"[198, 70, 88, 111]",0.0,0.0,0.96,0.02,0.0,0.0
739
+ 0.0,"[197, 68, 90, 114]",0.0,0.0,0.99,0.01,0.0,0.0
740
+ 0.0,"[199, 68, 90, 114]",0.0,0.0,0.99,0.01,0.0,0.0
741
+ 0.01,"[201, 68, 89, 114]",0.0,0.0,0.98,0.01,0.0,0.0
742
+ 0.01,"[202, 67, 90, 113]",0.0,0.0,0.97,0.02,0.0,0.0
743
+ 0.02,"[204, 66, 89, 114]",0.0,0.0,0.94,0.03,0.0,0.01
744
+ 0.01,"[206, 68, 88, 110]",0.0,0.0,0.93,0.04,0.0,0.01
745
+ 0.01,"[207, 67, 88, 112]",0.0,0.0,0.92,0.06,0.0,0.0
746
+ 0.02,"[208, 68, 89, 112]",0.0,0.0,0.94,0.03,0.0,0.02
747
+ 0.01,"[209, 68, 89, 113]",0.0,0.0,0.96,0.02,0.0,0.01
748
+ 0.01,"[211, 70, 87, 112]",0.0,0.0,0.96,0.02,0.0,0.01
749
+ 0.01,"[212, 71, 86, 111]",0.0,0.0,0.91,0.07,0.0,0.01
750
+ 0.01,"[214, 73, 87, 111]",0.0,0.0,0.89,0.08,0.0,0.01
751
+ 0.01,"[213, 75, 86, 109]",0.0,0.0,0.81,0.16,0.0,0.02
752
+ 0.01,"[214, 76, 85, 108]",0.0,0.0,0.51,0.47,0.0,0.01
753
+ 0.01,"[214, 76, 86, 107]",0.0,0.0,0.28,0.71,0.0,0.0
754
+ 0.02,"[214, 75, 87, 110]",0.0,0.0,0.17,0.79,0.01,0.01
755
+ 0.02,"[214, 76, 86, 108]",0.0,0.0,0.15,0.81,0.02,0.01
756
+ 0.02,"[215, 76, 86, 109]",0.0,0.0,0.16,0.79,0.01,0.0
757
+ 0.02,"[215, 76, 86, 110]",0.0,0.0,0.21,0.74,0.01,0.01
758
+ 0.02,"[216, 77, 84, 107]",0.0,0.0,0.17,0.78,0.01,0.01
759
+ 0.03,"[216, 77, 85, 107]",0.0,0.0,0.16,0.79,0.02,0.01
760
+ 0.02,"[216, 77, 85, 107]",0.0,0.0,0.17,0.79,0.02,0.0
761
+ 0.02,"[215, 76, 86, 109]",0.0,0.0,0.17,0.78,0.01,0.01
762
+ 0.02,"[215, 77, 87, 108]",0.0,0.0,0.22,0.74,0.01,0.01
763
+ 0.02,"[216, 76, 85, 108]",0.0,0.0,0.15,0.81,0.01,0.0
764
+ 0.05,"[217, 77, 84, 107]",0.0,0.0,0.22,0.7,0.01,0.02
765
+ 0.02,"[217, 75, 85, 109]",0.0,0.0,0.3,0.65,0.01,0.01
766
+ 0.02,"[217, 77, 86, 106]",0.0,0.0,0.21,0.75,0.01,0.01
767
+ 0.02,"[219, 76, 83, 105]",0.0,0.0,0.17,0.79,0.01,0.01
768
+ 0.04,"[218, 75, 84, 107]",0.0,0.0,0.37,0.57,0.01,0.01
769
+ 0.01,"[217, 75, 83, 108]",0.0,0.0,0.75,0.23,0.0,0.01
770
+ 0.01,"[217, 76, 83, 108]",0.0,0.0,0.87,0.11,0.0,0.01
771
+ 0.02,"[217, 74, 85, 110]",0.0,0.0,0.93,0.04,0.0,0.01
772
+ 0.0,"[216, 74, 86, 111]",0.0,0.0,0.97,0.01,0.0,0.01
773
+ 0.01,"[216, 74, 86, 112]",0.0,0.0,0.97,0.01,0.0,0.01
774
+ 0.01,"[216, 74, 85, 112]",0.0,0.0,0.94,0.02,0.0,0.03
775
+ 0.03,"[219, 75, 83, 109]",0.0,0.0,0.81,0.13,0.0,0.02
776
+ 0.02,"[219, 75, 83, 109]",0.0,0.0,0.89,0.07,0.0,0.01
777
+ 0.02,"[218, 75, 83, 108]",0.0,0.0,0.81,0.15,0.0,0.02
778
+ 0.01,"[219, 74, 84, 111]",0.0,0.0,0.93,0.06,0.0,0.0
779
+ 0.02,"[218, 75, 84, 109]",0.0,0.0,0.86,0.11,0.0,0.01
780
+ 0.02,"[217, 76, 84, 108]",0.0,0.0,0.86,0.11,0.0,0.01
781
+ 0.02,"[217, 75, 84, 108]",0.0,0.0,0.65,0.31,0.01,0.01
782
+ 0.01,"[217, 75, 84, 108]",0.0,0.0,0.55,0.4,0.01,0.02
783
+ 0.01,"[218, 75, 84, 108]",0.0,0.0,0.51,0.46,0.01,0.01
784
+ 0.01,"[218, 75, 85, 108]",0.0,0.0,0.56,0.41,0.01,0.01
785
+ 0.02,"[217, 75, 85, 108]",0.0,0.0,0.57,0.39,0.02,0.0
786
+ 0.01,"[217, 75, 85, 107]",0.0,0.0,0.65,0.32,0.01,0.01
787
+ 0.01,"[216, 75, 84, 106]",0.0,0.0,0.58,0.39,0.01,0.01
788
+ 0.02,"[217, 75, 85, 106]",0.0,0.0,0.56,0.41,0.0,0.01
789
+ 0.02,"[217, 75, 85, 107]",0.0,0.0,0.73,0.23,0.01,0.01
790
+ 0.02,"[218, 75, 84, 107]",0.0,0.0,0.78,0.19,0.0,0.01
791
+ 0.02,"[217, 76, 85, 106]",0.0,0.0,0.81,0.15,0.0,0.01
792
+ 0.01,"[217, 76, 86, 107]",0.0,0.0,0.92,0.05,0.0,0.01
793
+ 0.01,"[218, 76, 85, 106]",0.0,0.0,0.86,0.13,0.0,0.0
794
+ 0.0,"[218, 75, 85, 107]",0.0,0.0,0.94,0.06,0.0,0.0
795
+ 0.0,"[216, 75, 87, 109]",0.0,0.0,0.97,0.03,0.0,0.0
796
+ 0.01,"[218, 77, 85, 105]",0.0,0.0,0.89,0.1,0.0,0.0
797
+ 0.0,"[219, 76, 85, 106]",0.0,0.0,0.92,0.07,0.0,0.0
798
+ 0.01,"[218, 76, 86, 107]",0.0,0.0,0.94,0.05,0.0,0.0
799
+ 0.0,"[217, 78, 86, 106]",0.0,0.0,0.94,0.05,0.0,0.0
800
+ 0.0,"[217, 78, 85, 106]",0.0,0.0,0.94,0.05,0.0,0.0
801
+ 0.0,"[218, 78, 85, 106]",0.0,0.0,0.93,0.06,0.0,0.0
802
+ 0.0,"[218, 77, 86, 107]",0.0,0.0,0.95,0.04,0.0,0.0
803
+ 0.01,"[218, 77, 85, 105]",0.0,0.0,0.89,0.1,0.0,0.0
804
+ 0.01,"[218, 77, 85, 105]",0.0,0.0,0.9,0.09,0.0,0.0
805
+ 0.01,"[219, 76, 84, 107]",0.0,0.0,0.95,0.04,0.0,0.0
806
+ 0.01,"[217, 76, 86, 107]",0.0,0.0,0.96,0.03,0.0,0.0
807
+ 0.01,"[218, 76, 86, 107]",0.0,0.0,0.95,0.04,0.0,0.0
808
+ 0.0,"[216, 76, 85, 106]",0.0,0.0,0.96,0.03,0.0,0.0
809
+ 0.0,"[215, 73, 88, 111]",0.0,0.0,0.98,0.01,0.0,0.0
810
+ 0.0,"[215, 72, 87, 111]",0.0,0.0,0.98,0.01,0.0,0.0
811
+ 0.0,"[215, 72, 87, 111]",0.0,0.0,0.98,0.01,0.0,0.0
requirements.txt ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py
2
+ annotated-types
3
+ anyio
4
+ audeer
5
+ audformat
6
+ audinterface
7
+ audiofile
8
+ audioread
9
+ audmath
10
+ audobject
11
+ audresample
12
+ bcrypt
13
+ blinker
14
+ certifi
15
+ cffi
16
+ charset-normalizer
17
+ click
18
+ colorama
19
+ contourpy
20
+ cryptography
21
+ cycler
22
+ decorator
23
+ distlib
24
+ distro
25
+ dnspython
26
+ exceptiongroup
27
+ facenet-pytorch
28
+ fer
29
+ ffmpeg
30
+ ffmpeg-python
31
+ filelock
32
+ Flask
33
+ Flask-Cors
34
+ fonttools
35
+ fsspec
36
+ future
37
+ groq
38
+ h11
39
+ h5py
40
+ httpcore
41
+ httpx
42
+ huggingface-hub
43
+ idna
44
+ imageio
45
+ imageio-ffmpeg
46
+ importlib_metadata
47
+ iso3166
48
+ iso639-lang
49
+ itsdangerous
50
+ Jinja2
51
+ joblib
52
+ kagglehub
53
+ keras
54
+ kiwisolver
55
+ kociemba
56
+ lazy_loader
57
+ librosa
58
+ llvmlite
59
+ markdown-it-py
60
+ MarkupSafe
61
+ matplotlib
62
+ mdurl
63
+ ml_dtypes
64
+ moviepy
65
+ mpmath
66
+ msgpack
67
+ namex
68
+ networkx
69
+ numba
70
+ numpy
71
+ nvidia-cublas-cu12
72
+ nvidia-cuda-cupti-cu12
73
+ nvidia-cuda-nvrtc-cu12
74
+ nvidia-cuda-runtime-cu12
75
+ nvidia-cudnn-cu12
76
+ nvidia-cufft-cu12
77
+ nvidia-curand-cu12
78
+ nvidia-cusolver-cu12
79
+ nvidia-cusparse-cu12
80
+ nvidia-nccl-cu12
81
+ nvidia-nvjitlink-cu12
82
+ nvidia-nvtx-cu12
83
+ opencv-contrib-python
84
+ opensmile
85
+ optree
86
+ oyaml
87
+ packaging
88
+ pandas
89
+ platformdirs
90
+ pooch
91
+ proglog
92
+ pyarrow
93
+ pyasn1
94
+ pycparser
95
+ pydantic
96
+ pydantic_core
97
+ pydub
98
+ Pygments
99
+ PyJWT
100
+ pymongo
101
+ pyparsing
102
+ python-dateutil
103
+ python-dotenv
104
+ pytz
105
+ PyYAML
106
+ regex
107
+ requests
108
+ rich
109
+ rsa
110
+ safetensors
111
+ scikit-learn
112
+ scipy
113
+ sentencepiece
114
+ six
115
+ sniffio
116
+ sounddevice
117
+ soundfile
118
+ soxr
119
+ SpeechRecognition
120
+ sympy
121
+ threadpoolctl
122
+ tokenizers
123
+ torch
124
+ torchvision
125
+ tqdm
126
+ transformers
127
+ triton
128
+ typing_extensions
129
+ tzdata
130
+ urllib3
131
+ virtualenv
132
+ Werkzeug
133
+ zipp
utils/__init__.py ADDED
File without changes
utils/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (155 Bytes). View file
 
utils/__pycache__/audioextraction.cpython-312.pyc ADDED
Binary file (1.32 kB). View file
 
utils/__pycache__/auth.cpython-312.pyc ADDED
Binary file (1.47 kB). View file
 
utils/__pycache__/expressions.cpython-312.pyc ADDED
Binary file (1.67 kB). View file
 
utils/__pycache__/transcription.cpython-312.pyc ADDED
Binary file (4.01 kB). View file
 
utils/__pycache__/vocabulary.cpython-312.pyc ADDED
Binary file (1.51 kB). View file
 
utils/__pycache__/vocals.cpython-312.pyc ADDED
Binary file (4.11 kB). View file
 
utils/audioextraction.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import ffmpeg
2
+ import os
3
+
4
+ def extract_audio(video_file, output_wav):
5
+ """
6
+ Extracts audio from a video file and saves it as a WAV file.
7
+
8
+ Args:
9
+ video_file (str): Path to the input video file (e.g., .mp4).
10
+ output_wav (str): Path to save the extracted audio file.
11
+
12
+ Returns:
13
+ bool: True if extraction is successful, False otherwise.
14
+ """
15
+ if not os.path.isfile(video_file):
16
+ print(f"Error: File '{video_file}' does not exist.")
17
+ return False
18
+
19
+ try:
20
+ (
21
+ ffmpeg
22
+ .input(video_file)
23
+ .output(output_wav, format='wav', acodec='pcm_s16le')
24
+ .run(quiet=True, overwrite_output=True)
25
+ )
26
+ print(f"Audio successfully extracted to: {output_wav}")
27
+ return True
28
+ except Exception as e:
29
+ print(f"An error occurred: {e}")
30
+ return False
utils/auth.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import jwt
2
+ import bcrypt
3
+
4
+ SECRET_KEY = "eloquence_key"
5
+
6
+ # Hash the password
7
+ def hash_password(password):
8
+ return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
9
+
10
+ # Check the hashed password
11
+ def check_password(hashed_password, password):
12
+ return bcrypt.checkpw(password.encode('utf-8'), hashed_password)
13
+
14
+ # Generate JWT
15
+ def generate_token(username):
16
+ payload = {
17
+ 'username': username,
18
+ }
19
+ return jwt.encode(payload, SECRET_KEY, algorithm='HS256')
20
+
21
+ # Verify JWT
22
+ def verify_token(token):
23
+ try:
24
+ decoded = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
25
+ return decoded['username'] # Return username if token is valid
26
+ except jwt.ExpiredSignatureError:
27
+ return None # Token has expired
28
+ except jwt.InvalidTokenError:
29
+ return None # Token is invalid
utils/expressions.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fer import Video
2
+ from fer import FER
3
+ import pandas as pd
4
+
5
+ def analyze_video_emotions(video_file_path):
6
+ """
7
+ Analyzes the emotions in a given video file and returns a dataframe of scores.
8
+
9
+ Args:
10
+ video_file_path (str): Path to the video file to be analyzed.
11
+
12
+ Returns:
13
+ pd.DataFrame: DataFrame containing the emotion scores.
14
+ """
15
+ # Initialize the face detector
16
+ face_detector = FER(mtcnn=True)
17
+
18
+ # Input the video for processing
19
+ input_video = Video(video_file_path)
20
+
21
+ # Analyze the video
22
+ processing_data = input_video.analyze(face_detector, display=False)
23
+
24
+ # Check if any faces were detected
25
+ if not processing_data:
26
+ print("No faces detected in the video.")
27
+ return pd.DataFrame() # Return an empty DataFrame if no faces are detected
28
+
29
+ # Convert the results to a DataFrame
30
+ vid_df = input_video.to_pandas(processing_data)
31
+ vid_df = input_video.get_first_face(vid_df)
32
+ vid_df = input_video.get_emotions(vid_df)
33
+
34
+ # Calculate the sum of each emotion
35
+ emotions = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']
36
+ emotions_values = [sum(vid_df[emotion]) for emotion in emotions]
37
+
38
+ # Create a DataFrame for comparison
39
+ score_comparisons = pd.DataFrame({
40
+ 'Human Emotions': [emotion.capitalize() for emotion in emotions],
41
+ 'Emotion Value from the Video': emotions_values
42
+ })
43
+
44
+ return score_comparisons
utils/transcription.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import WhisperProcessor, WhisperForConditionalGeneration
3
+ from pydub import AudioSegment
4
+ import soundfile as sf
5
+ import os
6
+
7
+ model_name = "openai/whisper-base"
8
+ processor = WhisperProcessor.from_pretrained(model_name)
9
+ model = WhisperForConditionalGeneration.from_pretrained(model_name)
10
+ device = "cuda" if torch.cuda.is_available() else "cpu"
11
+ model = model.to(device)
12
+
13
+ def preprocess_audio(input_audio_path, output_audio_path):
14
+ """
15
+ Converts audio to 16kHz WAV format.
16
+
17
+ Args:
18
+ input_audio_path (str): Path to the input audio file.
19
+ output_audio_path (str): Path to save the processed audio file.
20
+
21
+ Returns:
22
+ str: Path to the processed audio file.
23
+ """
24
+ audio = AudioSegment.from_file(input_audio_path)
25
+ audio = audio.set_frame_rate(16000).set_channels(1)
26
+ audio.export(output_audio_path, format="wav")
27
+ return output_audio_path
28
+
29
+ def split_audio(audio_path, chunk_length_ms=30000):
30
+ """
31
+ Splits audio into chunks of specified length.
32
+
33
+ Args:
34
+ audio_path (str): Path to the audio file.
35
+ chunk_length_ms (int): Length of each chunk in milliseconds.
36
+
37
+ Returns:
38
+ list: List of audio chunks.
39
+ """
40
+ audio = AudioSegment.from_file(audio_path)
41
+ chunks = [audio[i : i + chunk_length_ms] for i in range(0, len(audio), chunk_length_ms)]
42
+ return chunks
43
+
44
+ def transcribe_chunk(audio_chunk, chunk_index):
45
+ """
46
+ Transcribes a single audio chunk.
47
+
48
+ Args:
49
+ audio_chunk (AudioSegment): The audio chunk to transcribe.
50
+ chunk_index (int): Index of the chunk.
51
+
52
+ Returns:
53
+ str: Transcription of the chunk.
54
+ """
55
+ temp_path = f"temp_chunk_{chunk_index}.wav"
56
+ audio_chunk.export(temp_path, format="wav")
57
+ audio, sampling_rate = sf.read(temp_path)
58
+ inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
59
+ input_features = inputs.input_features.to(device)
60
+ predicted_ids = model.generate(input_features)
61
+ transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
62
+ os.remove(temp_path) # Clean up temporary file
63
+ return transcription
64
+
65
+ def speech_to_text_long(audio_path):
66
+ """
67
+ Transcribes a long audio file by splitting it into chunks.
68
+
69
+ Args:
70
+ audio_path (str): Path to the audio file.
71
+
72
+ Returns:
73
+ str: Full transcription of the audio.
74
+ """
75
+ processed_audio_path = "processed_audio.wav"
76
+ preprocess_audio(audio_path, processed_audio_path)
77
+
78
+ # Split audio into chunks
79
+ chunks = split_audio(processed_audio_path, chunk_length_ms=30000) # 30 seconds per chunk
80
+ transcriptions = []
81
+
82
+ for idx, chunk in enumerate(chunks):
83
+ print(f"Transcribing chunk {idx + 1} of {len(chunks)}...")
84
+ transcription = transcribe_chunk(chunk, idx)
85
+ transcriptions.append(transcription)
86
+
87
+ return " ".join(transcriptions)
utils/vocabulary.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from groq import Groq
3
+
4
+ def evaluate_vocabulary(transcription, context):
5
+ client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
6
+ system_message = f"""
7
+ Context: {context}
8
+ Script: {transcription}
9
+ """
10
+ user_message = """
11
+ Evaluate the following speech based on vocabulary. Provide a short report covering:
12
+ - Vocabulary: Assess the richness, appropriateness, and clarity of the words used.
13
+ - Highlight if the speech uses engaging and varied language or if it is repetitive or overly simple.
14
+ - Do not include any scores in the report.
15
+ """
16
+ chat_completion = client.chat.completions.create(
17
+ messages=[
18
+ {
19
+ "role": "system",
20
+ "content": system_message,
21
+ },
22
+ {
23
+ "role": "user",
24
+ "content": user_message,
25
+ }
26
+ ],
27
+ model="llama-3.3-70b-versatile",
28
+ )
29
+ print(chat_completion.choices[0].message.content)
30
+ return chat_completion.choices[0].message.content
utils/vocals.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
2
+ import librosa
3
+ import torch
4
+ import numpy as np
5
+
6
+ model_id = "firdhokk/speech-emotion-recognition-with-openai-whisper-large-v3"
7
+ model = AutoModelForAudioClassification.from_pretrained(model_id)
8
+ feature_extractor = AutoFeatureExtractor.from_pretrained(model_id, do_normalize=True)
9
+ id2label = model.config.id2label
10
+
11
+ def preprocess_audio(audio_array, feature_extractor, sampling_rate, max_length=3000):
12
+ """
13
+ Preprocesses audio for emotion prediction.
14
+
15
+ Args:
16
+ audio_array (np.array): The audio data as a numpy array.
17
+ feature_extractor: The feature extractor for the model.
18
+ sampling_rate (int): The sampling rate of the audio.
19
+ max_length (int): Maximum length of the audio features.
20
+
21
+ Returns:
22
+ dict: Preprocessed inputs for the model.
23
+ """
24
+ inputs = feature_extractor(
25
+ audio_array,
26
+ sampling_rate=sampling_rate,
27
+ return_tensors="pt",
28
+ )
29
+ mel_features = inputs["input_features"]
30
+ current_length = mel_features.size(2)
31
+
32
+ if current_length < max_length:
33
+ pad_size = max_length - current_length
34
+ mel_features = torch.nn.functional.pad(mel_features, (0, pad_size), mode="constant", value=0)
35
+ elif current_length > max_length:
36
+ mel_features = mel_features[:, :, :max_length]
37
+
38
+ inputs["input_features"] = mel_features
39
+ return inputs
40
+
41
+ def predict_emotion(audio_path, model, feature_extractor, id2label, sampling_rate=16000, chunk_duration=8.0):
42
+ """
43
+ Predicts emotions from an audio file.
44
+
45
+ Args:
46
+ audio_path (str): Path to the audio file.
47
+ model: The emotion prediction model.
48
+ feature_extractor: The feature extractor for the model.
49
+ id2label (dict): Mapping from label IDs to emotion names.
50
+ sampling_rate (int): The sampling rate of the audio.
51
+ chunk_duration (float): Duration of each chunk in seconds.
52
+
53
+ Returns:
54
+ list: List of dictionaries containing emotion predictions for each chunk.
55
+ """
56
+ audio_array, _ = librosa.load(audio_path, sr=sampling_rate)
57
+ chunk_length = int(sampling_rate * chunk_duration)
58
+ num_chunks = len(audio_array) // chunk_length + int(len(audio_array) % chunk_length > 0)
59
+
60
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
61
+ model = model.to(device)
62
+
63
+ results = []
64
+ for i in range(num_chunks):
65
+ start = i * chunk_length
66
+ end = min((i + 1) * chunk_length, len(audio_array))
67
+ chunk = audio_array[start:end]
68
+
69
+ start_time = round(start / sampling_rate, 2)
70
+ end_time = round(end / sampling_rate, 2)
71
+
72
+ inputs = preprocess_audio(chunk, feature_extractor, sampling_rate, max_length=3000)
73
+ inputs = {key: value.to(device) for key, value in inputs.items()}
74
+
75
+ with torch.no_grad():
76
+ outputs = model(**inputs)
77
+
78
+ logits = outputs.logits
79
+ predicted_id = torch.argmax(logits, dim=-1).item()
80
+ predicted_label = id2label[predicted_id]
81
+
82
+ results.append({"chunk": i + 1, "start_time": start_time, "end_time": end_time, "emotion": predicted_label})
83
+
84
+ return results