Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2022-074
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2022-074
2022-074
Commits
dd809ce3
Commit
dd809ce3
authored
Jun 01, 2022
by
IT19165226-Arachchige I.D
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added Speech Recognition Setup
parent
6ec6ec1b
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
208 additions
and
882 deletions
+208
-882
Head Pose Estimation - Video Analysis.ipynb
Head Pose Estimation - Video Analysis.ipynb
+208
-882
No files found.
Head Pose Estimation - Video Analysis.ipynb
View file @
dd809ce3
...
...
@@ -2,48 +2,10 @@
"cells": [
{
"cell_type": "code",
"execution_count":
1
,
"execution_count":
null
,
"id": "90e3f5ea",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: mediapipe in c:\\users\\isuri\\anaconda3\\lib\\site-packages (0.8.9.1)\n",
"Requirement already satisfied: OpenCV-python in c:\\users\\isuri\\anaconda3\\lib\\site-packages (4.5.5.64)\n",
"Requirement already satisfied: ffmpeg in c:\\users\\isuri\\anaconda3\\lib\\site-packages (1.4)\n",
"Requirement already satisfied: moviepy in c:\\users\\isuri\\anaconda3\\lib\\site-packages (1.0.3)\n",
"Requirement already satisfied: varname in c:\\users\\isuri\\anaconda3\\lib\\site-packages (0.8.3)\n",
"Requirement already satisfied: opencv-contrib-python in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (4.5.5.64)\n",
"Requirement already satisfied: attrs>=19.1.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (21.2.0)\n",
"Requirement already satisfied: protobuf>=3.11.4 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (3.20.1)\n",
"Requirement already satisfied: matplotlib in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (3.4.3)\n",
"Requirement already satisfied: numpy in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (1.20.3)\n",
"Requirement already satisfied: absl-py in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from mediapipe) (1.0.0)\n",
"Requirement already satisfied: imageio<3.0,>=2.5 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (2.9.0)\n",
"Requirement already satisfied: requests<3.0,>=2.8.1 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (2.26.0)\n",
"Requirement already satisfied: proglog<=1.0.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (0.1.10)\n",
"Requirement already satisfied: decorator<5.0,>=4.0.2 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (4.4.2)\n",
"Requirement already satisfied: imageio-ffmpeg>=0.2.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (0.4.7)\n",
"Requirement already satisfied: tqdm<5.0,>=4.11.2 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from moviepy) (4.62.3)\n",
"Requirement already satisfied: asttokens<3.0.0,>=2.0.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from varname) (2.0.5)\n",
"Requirement already satisfied: pure_eval<1.0.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from varname) (0.2.2)\n",
"Requirement already satisfied: executing<0.9.0,>=0.8.3 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from varname) (0.8.3)\n",
"Requirement already satisfied: six in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from asttokens<3.0.0,>=2.0.0->varname) (1.16.0)\n",
"Requirement already satisfied: pillow in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from imageio<3.0,>=2.5->moviepy) (8.4.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from requests<3.0,>=2.8.1->moviepy) (2021.10.8)\n",
"Requirement already satisfied: charset-normalizer~=2.0.0 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from requests<3.0,>=2.8.1->moviepy) (2.0.4)\n",
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from requests<3.0,>=2.8.1->moviepy) (1.26.7)\n",
"Requirement already satisfied: idna<4,>=2.5 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from requests<3.0,>=2.8.1->moviepy) (3.2)\n",
"Requirement already satisfied: colorama in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from tqdm<5.0,>=4.11.2->moviepy) (0.4.4)\n",
"Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from matplotlib->mediapipe) (2.8.2)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from matplotlib->mediapipe) (1.3.1)\n",
"Requirement already satisfied: pyparsing>=2.2.1 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from matplotlib->mediapipe) (3.0.4)\n",
"Requirement already satisfied: cycler>=0.10 in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from matplotlib->mediapipe) (0.10.0)\n"
]
}
],
"outputs": [],
"source": [
"!pip install mediapipe OpenCV-python ffmpeg moviepy varname\n",
"\n",
...
...
@@ -52,7 +14,7 @@
},
{
"cell_type": "code",
"execution_count":
2
,
"execution_count":
null
,
"id": "b6068954",
"metadata": {},
"outputs": [],
...
...
@@ -75,7 +37,7 @@
},
{
"cell_type": "code",
"execution_count":
3
,
"execution_count":
null
,
"id": "17b488db",
"metadata": {},
"outputs": [],
...
...
@@ -85,8 +47,8 @@
"def obtain_coordinates():\n",
"\n",
" print(f\"[INFO] Processing {video_name}...\")\n",
" VIDEO_STREAM_OUT = os.path.join(output_folder , video_name + '_MP.mp4')\n",
" graph_plot = os.path.join(output_folder , video_name+'_MP.png')\n",
"
#
VIDEO_STREAM_OUT = os.path.join(output_folder , video_name + '_MP.mp4')\n",
"
#
graph_plot = os.path.join(output_folder , video_name+'_MP.png')\n",
" cap = cv2.VideoCapture(VIDEO_STREAM)\n",
"\n",
" fourcc = cv2.VideoWriter_fourcc(*\"XVID\")\n",
...
...
@@ -143,7 +105,7 @@
},
{
"cell_type": "code",
"execution_count":
26
,
"execution_count":
null
,
"id": "f8e035e9",
"metadata": {},
"outputs": [],
...
...
@@ -164,7 +126,7 @@
},
{
"cell_type": "code",
"execution_count":
18
,
"execution_count":
null
,
"id": "75dcebc6",
"metadata": {},
"outputs": [],
...
...
@@ -202,7 +164,7 @@
},
{
"cell_type": "code",
"execution_count":
73
,
"execution_count":
null
,
"id": "334fd6af",
"metadata": {},
"outputs": [],
...
...
@@ -230,7 +192,7 @@
},
{
"cell_type": "code",
"execution_count":
95
,
"execution_count":
null
,
"id": "292d05f8",
"metadata": {},
"outputs": [],
...
...
@@ -256,7 +218,7 @@
},
{
"cell_type": "code",
"execution_count":
96
,
"execution_count":
null
,
"id": "9986f31c",
"metadata": {},
"outputs": [],
...
...
@@ -280,7 +242,7 @@
},
{
"cell_type": "code",
"execution_count":
97
,
"execution_count":
null
,
"id": "20fb4bd8",
"metadata": {},
"outputs": [],
...
...
@@ -322,895 +284,259 @@
},
{
"cell_type": "code",
"execution_count":
48
,
"execution_count":
null
,
"id": "d3784870",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[INFO] Processing LRH_video_01...\n",
"MoviePy - Writing audio in result_analysis/LRH_video_01/my_result.mp3\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"MoviePy - Done.\n",
"MoviePy - Writing audio in result_analysis/LRH_video_01/my_result_sr.wav\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"MoviePy - Done.\n",
"[-0.3013699948787689]\n"
]
},
{
"data": {
"image/png": "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1113QalUoq+vD1u3bsXChQtRVlYW8DnOJWalBerrVCQAyM/Px+HDh/HnP/8Zr7zyCsLCwmA0GjE5OYmLL76YU+CdDKCUore3lzPRoZTiggsuwKZNm5CTk+PxomeuVXa7HUVFRSEPEIQQt+Y309PT+M1vfoN33nkHBQUFuPrqq3HjjTeGtP4SSmzbtg2rV6/G5s2b8c9//hP19fVYvXo1LrvsMuzcuRNfffUVF6i8YF4XK2alu8FPB81mM9544w1cdNFFLtsMDw9zGcehQ4dgt9uRmpqKRx99FP39/eju7sYbb7yBkpISfPvtt351SfLz81FaWory8nIupTwewDwxfvnLX+KLL77Am2++iZiYGPzsZz/DD3/4QzzxxBPo7OyckbGxC5dSGvIA0draCgAe3bF6enrw9ddf48svv8Trr78OpVJ5XA2vEXYpwsLCoNfrERERgeuvvx5lZWU4cuQIXn75ZVx99dVSA8S8x6z8haSkgzt27MAzzzyDsLAwREdH44033pjxZbPZbGhoaEBdXZ3fXZJ9+/b5XUWfDyCEICsrC//zP/+DW2+9FSqVCu+++y5++ctfYnx8HOeddx42btyIpUuX4v3330dJSQkKCwtDGiDa2tpAKfU4Ua25uRlbt27F66+/juXLlwMAl9YfL2CF3p07dyI2NhZLlixBU1MT59B9ww034MUXXwyqgdG8AKXU02NeYf/+/fRHP/oR9/MjjzxCH3nkEZdt9u3bR88//3zR1y9atIiqVKqQHuNcQq1W0xdeeIGee+65ND8/n5577rn04MGDdGpqik5PTwf9odPpaHV1NT18+DDV6XRut6upqaGlpaW0urra53P6+OOP6bJly+jSpUvpo48+OuP5V199lZaWltLS0lK6fv167j2am5vpqlWruEd8fDx94oknKKWU/va3v6VZWVncc7t37/Z4DHa7nfv/kSNH6K9+9St6+umn0x//+MeUEEL/+7//mz788MP04Ycfplar1edzpJ6vwTl/HD+5HgLvkhBC8KMf/QiEENx8883H3Z3MG5gnxoEDB1BaWori4mI88sgj6OnpwQ9/+ENs3rzZK3lKKqizW2KxWDw6dHd3d+Oaa67Biy++yLlOS4UUfs3ixYvxxRdfcHTrn/zkJzh48CCWL1+O6upqbj/Z2dnYvHkz97o77rhDknGt3W53+bxY6xpwWPuZTCb8/Oc/R319PYaHh0PmJTKXOK6CBA2gSwI4+vJZWVkYHR3FWWedhaKiInzve9+blWOfTdx5550oKioCAFx77bWYmprC7t278cQTT6C1tZXzxFi9erXfAaOzsxMmk8ljt6Svrw9XXXUVnn32Waxevdrn9wjUuJZh7969WLp0qUdhmRgopdznc9ttt4FSivDwcGzZsgVlZWWIj4/HyMgIwsLCTrgbDh/HlXZDCmkmISGBG1x73nnncf16ANy2GRkZ2Lx5Mw4dOjRLRz67YAGCIT4+HldccQXefvttHDhwAKeffjqeffZZrF+/Htu2bcP+/fths9kk759Z5HkKEIODg7jiiivw9NNPY926dX6dRyB0az7eeOMNXHnllS6/82Rcy25G7NxuvfVWTE1N4ZprrsHnn3+OO+64A19++SUiIyNRUlICjUbj1/kdN/CyHplXsFgsdPHixbSzs5OaTCZaVlZG6+vrXbYZGhri1pAHDx6kubm51G63U51ORycnJymllOp0Orp+/Xr68ccfz/o5zCcYDAb6/vvv02uvvZYWFxfTn/zkJ/Tjjz+mExMTbusLdXV19ODBgx5rEB0dHbSyspL++9//Duj43nrrLXrDDTdwP7/88sv01ltvFd323//+Ny0qKqJqtdrl9yaTiaamptLh4WHud8PDw9RqtVKbzUbvu+8+ev3117u8ZnBwkPt/V1cXVwu54YYb6C233EIff/xxumHDBnrkyBFaW1sb0Dk6Med1B0+P4ypIUErp7t27aWFhIV2yZAn9/e9/Tyml9JlnnqHPPPMMpZTSp556iq5cuZKWlZXRdevW0a+//ppSSmlHRwctKyujZWVldOXKlfT3v/+916LYvn37aEJCAlfg+t3vfsc9p9Vq6Y9//GO6fPlyWlRURPfv3z8LZx86mEwm+sknn9Abb7yRFhcX061bt9Jdu3ZRrVbrEiC++eYbjwGiu7ubVlZW0k8//TTgY5JSqKaU0pqaGrpkyRLa0tIy47n33nuPnnXWWW7fo6urixYXF3M/Nzc303POOYeaTCZKqaNoOT4+Tvfu3Us3b95MKaX0m2++oaeccgr92c9+5ve5CTDngcDT47gLEsGC1WqlS5YsoR0dHVxW0tDQ4LKNp07JtddeS5977jlKqeMC02q1oT7kWYPFYqF79+6lP/3pT2lxcTG95ppr6LXXXkvvu+8+j52S3t5eWlVV5bVb4MtxeMsce3p66NKlS7mbgRCXX345/X//7/+5/I6fKTz++OP08ssv536uq6uj69evn9Gl+Pzzz+nmzZup1WqlDz74IP39739PbTZboKfIMOeBwNPjpA0SgbRTJyYmaH5+vktr7ESF1Wqlt9xyC12+fDktLS2ll19+OX399depSqVyCRADAwP0lFNOoe+9915Q399b5njDDTfQpKQkLttbvXo199rp6WmakpJCx8fHXfZ59dVX05KSElpaWkovvPBCl6BBKaXXXXcd3bNnD/fzt99+Syml9LzzzqOXXHIJraqqonq9PpinOeeBwNPjpA0Sb7/99oz17i233OKyzb59+2hKSgotKyuj55xzDncXO3bsGK2qqqJbtmyh5eXl9IYbbqA6nW5Wj3+2MDk5SW+55RZqNpupzWajBw4coHfeeSctKyujF198MX3llVdoR0cHPe200+jbb78914frFz777DP68MMP09///ve0paWFXnnllVwQev/9910CzfDwMLcUCSLmPBB4ehxXLdBgglL/26lWqxVHjx7FU089hXXr1uG2227D9u3b8fDDD8/W4c8a4uPj8fTTT3M/n3LKKTjllFNgt9tx7Ngx7NixA7/85S/xwAMPHLdu1mFhYcjNzcXHH3+MyclJfP7555iamsKSJUuwd+9e7NmzB4mJiQAQkKT9eMVJ63EZiOjMarXilFNOQXd3NwDgP//5D7Zv347du3eH/LjnI+x2Owghx62pihAHDhzAv//9bxBCsGbNGpeZnyHCvP7gjiueRDARiOhs4cKFyM3NRUtLCwAHWSc6Otove76Wlhbud+Xl5UhISMBf/vKX0J58kKFQKHwOEP66W3v6vAJxt+bfLNevX48LL7wQRqMRH3zwAY4cOeLTuZ1w8LIeOaHhbzuVUkddYvXq1bS0tJRedNFFND8/3+9OCYPVaqULFiyg3d3dQT7T+QUpnaWvv/6aajQaSimlH330EV27dq3ofvif11133cW1sh999FG6bdu2gI6zrq6OPvbYY3RiYiKg/UjAnNcdPD1O6iARLAQqPGP49NNP6amnnhqSY5xPkMp/YNBoNDQrK2vG74Wf17Jly7hOxeDgIF22bFnAx2qxWALehwTMeSDw9DhplxvBhFT6MBOenXvuudw0bT7E6MMnIkJFt/bF3Voqjie/i1DhhA4S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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
"outputs": [],
"source": [
"###MAIN PROGRAM\n",
"\n",
"#variables\n",
" #storing landmark details\n",
"NOSE, LEFT_EYE_INNER, LEFT_EYE, LEFT_EYE_OUTER, RIGHT_EYE_INNER, RIGHT_EYE, RIGHT_EYE_OUTER, LEFT_MOUTH, RIGHT_MOUTH = [], [], [], [], [], [], [], [], []\n",
"\n",
"landmark_list_desc = [NOSE, LEFT_EYE_INNER, LEFT_EYE, LEFT_EYE_OUTER, RIGHT_EYE_INNER, RIGHT_EYE, RIGHT_EYE_OUTER, LEFT_MOUTH, RIGHT_MOUTH]\n",
"\n",
"landmark_list = ['NOSE', 'LEFT_EYE_INNER', 'LEFT_EYE', 'LEFT_EYE_OUTER', 'RIGHT_EYE_INNER', 'RIGHT_EYE', 'RIGHT_EYE_OUTER', 'LEFT_MOUTH', 'RIGHT_MOUTH']\n",
"\n",
"\n",
" #video details\n",
"VIDEO_STREAM = 'test_videos/LRH_video_01.mp4'\n",
"video_name = 'LRH_video_01'\n",
"output_folder = 'result_analysis/' + video_name\n",
"\n",
"#processing\n",
"obtain_coordinates()\n",
"print('[INFO] REMOVING AUDIO')\n",
"extract_audio()\n",
"\n",
"#generating yaw,pitch, roll\n",
"\n",
"#saving generated data\n",
" #check if specified path exists, if not create it\n",
"if not (os.path.isdir(output_folder)):\n",
" os.makedirs(output_folder, mode = 0o777, exist_ok = False)\n",
"\n",
"#storage_location = output_folder + '/coordinates.csv' --for one file\n",
"storage_location = output_folder + '/datasheets'\n",
"#check if specified path exists, if not create it\n",
"if not (os.path.isdir(storage_location)):\n",
" os.makedirs(storage_location, mode = 0o777, exist_ok = False)\n",
"\n",
" #write data to csv\n",
"write_to_csv(storage_location) \n",
"\n",
" #plotting and saving graphs\n",
"output_folder_graphs = output_folder + '/graphs'\n",
" #check if specified path for graphs exists, if not create it\n",
"if not (os.path.isdir(output_folder_graphs)):\n",
" os.makedirs(output_folder_graphs, mode = 0o777, exist_ok = False)\n",
"\n",
"plot_coordinates()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 12,
"id": "da44965f",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
"Requirement already satisfied: SpeechRecognition in c:\\users\\isuri\\anaconda3\\lib\\site-packages (3.8.1)\n",
"Requirement already satisfied: pydub in c:\\users\\isuri\\anaconda3\\lib\\site-packages (0.25.1)\n",
"Requirement already satisfied: ffmpeg in c:\\users\\isuri\\anaconda3\\lib\\site-packages (1.4)\n",
"Requirement already satisfied: imageio in c:\\users\\isuri\\anaconda3\\lib\\site-packages (2.9.0)\n",
"Requirement already satisfied: imageio-ffmpeg in c:\\users\\isuri\\anaconda3\\lib\\site-packages (0.4.7)\n",
"Requirement already satisfied: pillow in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from imageio) (8.4.0)\n",
"Requirement already satisfied: numpy in c:\\users\\isuri\\anaconda3\\lib\\site-packages (from imageio) (1.20.3)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707]\n"
}
],
"source": [
"pip install SpeechRecognition pydub ffmpeg imageio imageio-ffmpeg"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 13,
"id": "cf3503dc",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"data": {
"text/plain": [
"
<Figure size 432x288 with 0 Axes>
"
"
'3.8.1'
"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282]\n"
"output_type": "execute_result"
}
],
"source": [
"#to convert mp3 to wav\n",
"from pydub import AudioSegment\n",
"\n",
"#to clip an audio\n",
"from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip\n",
"\n",
"import speech_recognition as sr\n",
"sr.__version__"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 4,
"id": "c3d89dae",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"data": {
"text/plain": [
"
<Figure size 432x288 with 0 Axes>
"
"
'the still smell of old beer drinkers it takes hi to bring out the order I called it restore selfinvest a salt a kotess find the M tacos Al pastor are my favourite is just for food is Bihar cross bun'
"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684]\n"
"output_type": "execute_result"
}
],
"source": [
"#recognizing speech using a Recognizer instance\n",
"recognizer = sr.Recognizer()\n",
"\n",
"#processing an audio\n",
" #setting up the audio file\n",
"harvard = sr.AudioFile('test_audio/harvard.wav')\n",
" #saving the data in the audio file in an instance called source\n",
"with harvard as source:\n",
" #records the data of the audio file into AudioData instance\n",
" audio = recognizer.record(source) \n",
"\n",
"#to check the type of the 'audio'\n",
"type(audio)\n",
"\n",
"#using the Google Speech Recognition \n",
" #needs an active internet connection\n",
"recognizer.recognize_google(audio)"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 5,
"id": "9a17f2ba",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"data": {
"text/plain": [
"
<Figure size 432x288 with 0 Axes>
"
"
'Bangkok ke teacher song'
"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266]\n"
"output_type": "execute_result"
}
],
"source": [
"#test two of speech recognition - Mandarin\n",
"\n",
"chinese = sr.AudioFile('test_audio/mandarin_one.wav')\n",
"\n",
"with chinese as source:\n",
" audio = recognizer.record(source) \n",
"\n",
"#using the Google Speech Recognition \n",
" #needs an active internet connection\n",
"recognizer.recognize_google(audio)"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 14,
"id": "1d2ffcec",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"data": {
"text/plain": [
"
<Figure size 432x288 with 0 Axes>
"
"
'yah kya hai'
"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
"output_type": "execute_result"
}
],
"source": [
"#test three of speech recognition - full song\n",
"\n",
"#song_mp3 = sr.AudioFile('test_audio/avril_song.mp3')\n",
"\n",
"#changing from mp3 to wav\n",
"#audSeg = AudioSegment.from_mp3('test_audio/avril_song.mp3')\n",
"#audSeg.export('test_audio/avril_song_wav', format='wav')\n",
"\n",
"song = sr.AudioFile('test_audio/avril_song.wav')\n",
"\n",
"with song as source:\n",
" audio = recognizer.record(source) \n",
"\n",
"#using the Google Speech Recognition \n",
" #needs an active internet connection\n",
"recognizer.recognize_google(audio)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"cell_type": "code",
"execution_count": 15,
"id": "dae059b9",
"metadata": {},
"output_type": "display_data"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549]\n"
"Moviepy - Running:\n",
">>> \"+ \" \".join(cmd)\n",
"Moviepy - Command successful\n"
]
},
{
"data": {
"text/plain": [
"
<Figure size 432x288 with 0 Axes>
"
"
'yah size mein kya hai'
"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133, -0.39194944500923157]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133, -0.39194944500923157, -0.3952670693397522]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133, -0.39194944500923157, -0.3952670693397522, -0.39360523223876953]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133, -0.39194944500923157, -0.3952670693397522, -0.39360523223876953, -0.39427807927131653]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.3013699948787689, -0.4105592668056488, -0.42823660373687744, -0.5199782252311707, -0.4891508221626282, -0.4548543095588684, -0.44156742095947266, -0.4435288608074188, -0.4358169138431549, -0.46769434213638306, -0.4507959187030792, -0.45984163880348206, -0.48630818724632263, -0.43616288900375366, -0.4268682897090912, -0.4363146126270294, -0.4334081709384918, -0.3856501579284668, -0.4038098454475403, -0.4110352098941803, -0.4072643518447876, -0.4114300608634949, -0.4271574020385742, -0.4275912344455719, -0.3884345293045044, -0.37125125527381897, -0.3831891119480133, -0.39194944500923157, -0.3952670693397522, -0.39360523223876953, -0.39427807927131653, -0.4196490943431854]\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"###MAIN PROGRAM\n",
"\n",
"#variables\n",
" #storing landmark details\n",
"NOSE, LEFT_EYE_INNER, LEFT_EYE, LEFT_EYE_OUTER, RIGHT_EYE_INNER, RIGHT_EYE, RIGHT_EYE_OUTER, LEFT_MOUTH, RIGHT_MOUTH = [], [], [], [], [], [], [], [], []\n",
"\n",
"landmark_list_desc = [NOSE, LEFT_EYE_INNER, LEFT_EYE, LEFT_EYE_OUTER, RIGHT_EYE_INNER, RIGHT_EYE, RIGHT_EYE_OUTER, LEFT_MOUTH, RIGHT_MOUTH]\n",
"\n",
"landmark_list = ['NOSE', 'LEFT_EYE_INNER', 'LEFT_EYE', 'LEFT_EYE_OUTER', 'RIGHT_EYE_INNER', 'RIGHT_EYE', 'RIGHT_EYE_OUTER', 'LEFT_MOUTH', 'RIGHT_MOUTH']\n",
"\n",
"\n",
" #video details\n",
"VIDEO_STREAM = 'test_videos/LRH_video_01.mp4'\n",
"video_name = 'LRH_video_01'\n",
"output_folder = 'result_analysis/' + video_name\n",
"\n",
"#processing\n",
"obtain_coordinates()\n",
"extract_audio()\n",
"\n",
"#generating yaw,pitch, roll\n",
"\n",
"#saving generated data\n",
" #check if specified path exists, if not create it\n",
"if not (os.path.isdir(output_folder)):\n",
" os.makedirs(output_folder, mode = 0o777, exist_ok = False)\n",
"\n",
"#storage_location = output_folder + '/coordinates.csv' --for one file\n",
"storage_location = output_folder + '/datasheets'\n",
"#check if specified path exists, if not create it\n",
"if not (os.path.isdir(storage_location)):\n",
" os.makedirs(storage_location, mode = 0o777, exist_ok = False)\n",
"\n",
" #write data to csv\n",
"write_to_csv(storage_location) \n",
"\n",
" #plotting and saving graphs\n",
"output_folder_graphs = output_folder + '/graphs'\n",
" #check if specified path for graphs exists, if not create it\n",
"if not (os.path.isdir(output_folder_graphs)):\n",
" os.makedirs(output_folder_graphs, mode = 0o777, exist_ok = False)\n",
"\n",
"plot_coordinates(output_folder_graphs)"
"output_type": "execute_result"
}
],
"source": [
"#test three of speech recognition - song clip\n",
"\n",
"\n",
"ffmpeg_extract_subclip('test_audio/avril_song.wav', 6, 18, targetname=\"test_audio/avril_song_clip.wav\")\n",
"\n",
"song = sr.AudioFile('test_audio/avril_song_clip.wav')\n",
"\n",
"with song as source:\n",
" audio = recognizer.record(source) \n",
"\n",
"#using the Google Speech Recognition \n",
" #needs an active internet connection\n",
"recognizer.recognize_google(audio)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "
da44965f
",
"id": "
821c9454
",
"metadata": {},
"outputs": [],
"source": []
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment