Updated README.md
This commit is contained in:
165
README.md
165
README.md
@@ -69,7 +69,7 @@ Telegram ботом, которому отправили видео).
|
|||||||
название движка распознания (поддерживается только `whisper`). Каждый
|
название движка распознания (поддерживается только `whisper`). Каждый
|
||||||
сегмент обязан содержать ключи `start` (время начала сегмента), `end`
|
сегмент обязан содержать ключи `start` (время начала сегмента), `end`
|
||||||
(время конца сегмента), `text` (текст сегмента). Затем должен идти ключ
|
(время конца сегмента), `text` (текст сегмента). Затем должен идти ключ
|
||||||
`custom`, где указываются значения, специфичные для движка (они будут
|
`engine`, где указываются значения, специфичные для движка (они будут
|
||||||
использованы только на следующем шаге, а затем будут удалены).
|
использованы только на следующем шаге, а затем будут удалены).
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -253,5 +253,164 @@ Telegram ботом, которому отправили видео).
|
|||||||
- `payload` - для `voice` может быть только `null`
|
- `payload` - для `voice` может быть только `null`
|
||||||
5. **Построить список ссылок на видео**
|
5. **Построить список ссылок на видео**
|
||||||
- Если видео нет, то шаг пропускается. Вместо него файл `audio_events.json`
|
- Если видео нет, то шаг пропускается. Вместо него файл `audio_events.json`
|
||||||
копируется в `events.json` и происходит переход на следующий шаг.
|
копируется в `events.json` и происходит переход на 7 шаг.
|
||||||
-
|
- Используя оконный метод, описанный выше, модели отправляются
|
||||||
|
сформированные события, а она формирует список ссылок на видео, которые
|
||||||
|
нужно разрешить. Окна передаются по такому же алгоритму, как уже было
|
||||||
|
описано выше для шага №4, но данные передаются вот такими объектами:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"timestamp": 3.0,
|
||||||
|
"duration": 5.0,
|
||||||
|
"text": "Осмысленный текст, полученный на 4-ом шаге."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
То есть для каждого объекта, входящего в `past`, `present` или `future`,
|
||||||
|
передаются только данные, описанные выше. Промпт должен налагать
|
||||||
|
дополнительные ограничения. Во-первых, непосредственно обрабатывать можно
|
||||||
|
только соыбтия из списка `present`, а события, перечисляемые в `past` и
|
||||||
|
`future` используются только для контекста - работать с ними нельзя. Ключ
|
||||||
|
`context` работать точно так же, как на 4-ом шаге - модель может
|
||||||
|
использовать его по своему усмотрению, но формат рекомендуется жестко
|
||||||
|
сформулировать в промпте.
|
||||||
|
- При построении списка ссылок модель модель возвращать данные в следующем
|
||||||
|
формате:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"unresolved": [
|
||||||
|
{
|
||||||
|
"ids": [0, 1, 2],
|
||||||
|
"type": "vis",
|
||||||
|
"text": "Для типа `vis`: описание того что должно быть на видео в этот момент"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ids": [19, 20, 21, 22, 23],
|
||||||
|
"type": "ocr",
|
||||||
|
"text": "Для типа `ocr`: текст, который нужно распознать с экрана (здесь должно быть названо, например, какой термин)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ids": [0, 1, 2],
|
||||||
|
"type": "vis",
|
||||||
|
"text": "Для типа `vis`: описание того что должно быть на видео в этот момент"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"context": {
|
||||||
|
"for_future_call": "Сегменты 6, 7 выброшены, потому что..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- `unresolved` - список событий, которые нужно будет разрешить на
|
||||||
|
следующем шаге. Каждый объект содержит в точности три ключа: `ids`
|
||||||
|
(идентификаторы событий, на протяжении которых нужно искать то, что
|
||||||
|
описано), `type` (тип того, что нужно найти, см. далее), `text`
|
||||||
|
(описание того, что нужно найти). Тип может быть либо `vis` (нужно
|
||||||
|
определить, соответствует ли кадр из видео описанию `text`, и, если
|
||||||
|
соответствует, то вставить его в итоговый файл лекции), либо `ocr`
|
||||||
|
(нужно распознать текст, наводка на который даётся в `text`).
|
||||||
|
- `context` - контекст, который должен быть передан модели при
|
||||||
|
следующем вызове.
|
||||||
|
- После выполнения этого шага модель должна сформировать файл
|
||||||
|
`unresolved.json`
|
||||||
|
6. **Разрешить ссылки на видео**
|
||||||
|
- После этого шага должен быть получен файл `events.json`, используя который
|
||||||
|
будет построена структура итогового документа.
|
||||||
|
- TODO, пока что это не реализовано
|
||||||
|
- Итоговый файл `events.json`, должен иметь следующую структуру. ID никак
|
||||||
|
не связаны с предудущими шагами.
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"events": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"type": "voice",
|
||||||
|
"timestamp": 0.0,
|
||||||
|
"duration": 7.0,
|
||||||
|
"text": "Здесь уже должны быть осмысленные законченные фразы",
|
||||||
|
"payload": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"type": "vis",
|
||||||
|
"timestamp": 4.0,
|
||||||
|
"duration": 0.0,
|
||||||
|
"text": "Описание содержимого изображения, путь к которому хранится в `payload`",
|
||||||
|
"payload": "runtime/23865928/images/4123.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"type": "ocr",
|
||||||
|
"timestamp": 6.0,
|
||||||
|
"duration": 0.0,
|
||||||
|
"text": "Описание текста, который должен был быть распознан",
|
||||||
|
"payload": "Текст, распознанный с кадра из видео, без перефразирований"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"type": "voice",
|
||||||
|
"timestamp": 7.0,
|
||||||
|
"duration": 3.0,
|
||||||
|
"text": "Для типа `voice` ключ `payload` всегда `null`",
|
||||||
|
"payload": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
7. **Построить структуру итогового документа**
|
||||||
|
- После этого шага должен быть получен файл `structure.json` следующего
|
||||||
|
вида:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "heading",
|
||||||
|
"level": 2,
|
||||||
|
"text": "Заголовок второго уровня"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "paragraph",
|
||||||
|
"text": "Текст параграфа."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "heading",
|
||||||
|
"level": 3,
|
||||||
|
"text": "Заголовок третьего уровня"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "unordered",
|
||||||
|
"items": [
|
||||||
|
"Элемент неупорядоченного списка",
|
||||||
|
"Ещё один элемент неупорядоченного списка"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ordered",
|
||||||
|
"items": [
|
||||||
|
"1-ый элемент упорядоченного списка",
|
||||||
|
"2-ой элемент упорядоченного списка"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "definition",
|
||||||
|
"term": "Кошка",
|
||||||
|
"text": "Домашнее животное, которое мяукает и царапается"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "important",
|
||||||
|
"text": "Важное замечание, которое нужно выделить на уровне структуры документа"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "image",
|
||||||
|
"event_id": 54
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- Для получения файла `structure.json` модели передаются соыбытия из
|
||||||
|
`events.json`, используя метод окна (описан ранее).
|
||||||
|
8. **Собрать финальный Markdown файл**
|
||||||
|
- Для сборки Markdown файла используются элементы, полученные на предыдщем
|
||||||
|
шаге, и хранимые в файле `structure.json`
|
||||||
|
- В итоге создаётся файл `output.md`, который может включать в себя ссылки
|
||||||
|
на изображения из директории `images/` (относительно директории
|
||||||
|
промежуточных данных)
|
||||||
Reference in New Issue
Block a user