Я немного рассержен из-за моей проблемы.
что я пытаюсь сделать:
Я попытался с помощью exec () system () и passthru ().
Я искал много часов в Интернете, чтобы найти решение, и я окончательно заблокирован в тот момент, когда мой php, похоже, не ждет, пока мой питон продолжит работу (от 10 секунд до 5 минут).
когда я пытаюсь использовать другой скрипт на python, который только вставляет значение в базу данных, все работает нормально, это позволяет мне действительно предположить, что мой php exec () убил мой процесс python до конца или что-то в этом роде.
Так что мой код выглядит следующим образом.
Код PHP:
<?php
#Define target of uploaded file
$target_dir = "/var/www/voice/voice_file/";
#create unique new name for file
$var_name = md5(uniqid(rand(), true));
#define file extension for new file
$var_name .= ".flac";
#define (temporalily) comment value --> will be replaced by form "comment"$commentaire = "\"test d'un commentaire\"";
# define target
$target_file = $target_dir . basename($var_name);#moove flac file to target
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);#execute python script to convert audio to text
ob_start();
passthru("python voice_file/convert_audio.py $target_file $commentaire");
$output = ob_get_clean();
?>
Скрипт Python.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Created on Mon Apr 17 14:09:32 2017
@author: flo-linux
"""###### parameters ###########
from pydub import AudioSegment
import MySQLdb as my
#from pydub.utils import mediainfo
from pydub.utils import make_chunks
import math
import speech_recognition as sr
import os
import sys
#################################
#%%########define variables######
commentaire_result=str(sys.argv[2])
text_result =""GOOGLECREDENTIALS = r"""{MYAPIGOOGLECREDENTIALS}"""
####### Format audio file and grep audio parameters #####
flac_audio = AudioSegment.from_file(sys.argv[1], "flac")
flac_audio.export("short.wav", format="wav")
myaudio = AudioSegment.from_file("short.wav" , "wav")
channel_count = myaudio.channels #Get channels
sample_width = myaudio.sample_width #Get sample width
duration_in_sec = len(myaudio) / 1000 #Length of audio in sec
sample_rate = myaudio.frame_rate
bit_rate =16
wav_file_size = (sample_rate * bit_rate * channel_count * duration_in_sec) / 8#%%## Split audio for Google API limitataion #############
file_split_size = 10000000 # 10Mb OR 10, 000, 000 bytes
total_chunks = wav_file_size // file_split_size + 1chunk_length_in_sec = math.ceil((duration_in_sec * 10000000 ) /wav_file_size) #in sec
chunk_length_ms = chunk_length_in_sec * 1000
chunks = make_chunks(myaudio, chunk_length_ms)#%%##Export all of the individual chunks as wav files #######for i, chunk in enumerate(chunks):
chunk_name = "chunk{0}.flac".format(i)
chunk.export(chunk_name, format="flac")
## Process each chunk in google Speech API.
r = sr.Recognizer()
with sr.AudioFile(chunk_name) as source:
audio = r.record(source)
try:
text_result += (r.recognize_google_cloud(audio, credentials_json=GOOGLECREDENTIALS,language="fr-FR"))
except sr.UnknownValueError:
text_result += ("Google Cloud Speech could not understand audio")
except sr.RequestError as e:
text_result += ("Could not request results from Google Cloud Speech service; {0}".format(e))
os.remove (chunk_name)
os.remove(short.wav)
#%% Insert result of voice to text in data base ##########
db = my.connect(host="localhost",user="my_user", passwd="my_passwd", db="my_db")
cursor = db.cursor()
try:
cursor.execute("INSERT into data (Comment, Result) values (%s,%s)",(commentaire_result, text_result))
db.commit()
except:
db.rollback()
db.close()
Я действительно ценю руку.
большое спасибо
Задача ещё не решена.
Других решений пока нет …