Как использовать Google REST API для преобразования текста в облако для транскрибирования видео - PullRequest
0 голосов
/ 08 июня 2018

Мне бы хотелось, чтобы в видео транскрипт двух человек, но я получил пустой ответ от Cloud-Speech-to-Text API

Подход:

У меня есть 56-минутный видеофайл, содержащий беседу между двумя людьми.Я хотел бы получить стенограмму этого разговора, и я хотел бы использовать облачный API Google Speech-to-Text, чтобы получить его.

Чтобы немного сэкономить на своем облачном хранилище Google, я преобразовал видео в аудиосначала с помощью mmpeg.

Сначала я попытался определить аудиокодек с помощью приведенной ниже команды, и он выглядит как AAC.
ffmpeg -i video.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videoplayback.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2015-12-30T08:17:14.000000Z
  Duration: 00:56:03.99, start: 0.000000, bitrate: 362 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 490x360 [SAR 1:1 DAR 49:36], 264 kb/s,     29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2015-12-30T08:17:31.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011    

Так что я взял это из видео, используя:
ffmpeg -i video.mp4 -vn -acodec copy myaudio.aac

Детали пока:
ffmpeg -i myaudio.aac
Выходы:

Input #0, aac, from 'myaudio.aac':
  Duration: 00:56:47.49, bitrate: 97 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 97 kb/s

После этого япреобразовал его в опус, потому что мне сказали, что опус лучше
ffmpeg -i myaudio.aac -acodec libopus -b:a 97k -vbr on -compression_level 10 myaudio.opus

Информация пока:
opusinfo myaudio.opus

User comments section follows...
    encoder=Lavc58.18.100 libopus
Opus stream 1:
    Pre-skip: 312
    Playback gain: 0 dB
    Channels: 2
    Original sample rate: 48000Hz
    Packet duration:   20.0ms (max),   20.0ms (avg),   20.0ms (min)
    Page duration:   1000.0ms (max), 1000.0ms (avg), 1000.0ms (min)
    Total data length: 29956714 bytes (overhead: 0.872%)
    Playback length: 56m:03.990s
    Average bitrate: 71.24 kb/s, w/o overhead: 70.62 kb/s

В этой точкеЯ загрузил myaudio.opus в Google Cloud Storage.

curl POST 1
Я начал распознавание речи, выполнив POST с curl:

curl --request POST  --header "Content-Type: application/json" --url 'https://speech.googleapis.com/v1/speech:longrunningrecognize?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}' --data '{"audio": {"uri": "gs://{MY_BUCKET}/myaudio.opus"},"config": {"encoding": "OGG_OPUS", "sampleRateHertz": 48000, "languageCode": "en-US"}}'

Ответ: {"name": "123456789"} 123456789 не был фактическим значением.

curl GET 1
Теперь я хотел получить результаты:

curl --request GET --url 'https://speech.googleapis.com/v1/operations/123456789?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}'

Это дало мнеошибка: Error : Unable to recognize speech, possible error in encoding or channel config. Please correct the config and retry the request.

Поэтому я обновил конфигурацию кодировки с OGG_OPUS до LINEAR16.

curl POST 2
Сделал пост снова:

curl --request POST  --header "Content-Type: application/json" --url 'https://speech.googleapis.com/v1/speech:longrunningrecognize?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}' --data '{"audio": {"uri": "gs://{MY_BUCKET}/myaudio.opus"},"config": {"encoding": "LINEAR16", "sampleRateHertz": 48000, "languageCode": "en-US"}}'

Ответ: {"name": "987654321"}

curl GET 2

curl --request GET --url 'https://speech.googleapis.com/v1/operations/987654321?fields=done%2Cerror%2Cmetadata%2Cname%2Cresponse&key={MY_API_KEY}'

Ответ:

{
  "name": "987654321",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2018-06-08T11:01:24.596504Z",
    "lastUpdateTime": "2018-06-08T11:01:51.825882Z"
  },
  "done": true
}

Проблема в том, что я не получаю настоящую транскрипцию.Согласно документации, в ответе, содержащем данные, должен быть ключ response.

Так как я застрял здесь, я хотел бы знать, делаю ли я что-то совершенно неправильно.У меня нет никаких технических или ресурсных ограничений, поэтому все предложения приветствуются!Также рад изменить мой подход.

Заранее спасибо!Приветствия

1 Ответ

0 голосов
/ 24 июля 2018

Похоже, на данный момент поддерживаются только WAV и FLAC.Используя команду gcloud локально, я добился успеха:

gcloud ml speech recognize-long-running gs://bucket-name/file.flac  --language-code en-US --include-word-time-offsets > my_transcription.json

Произошла ошибка ограничения байтов при использовании локального файла. говорит, что вы можете

...