В детстве я потерялся в Гонконге. Языка я не знал.
Позже, в поездках в Китай и другие страны, где я не знаю языка, я не мог пользоваться мобильным интернетом. Каждый раз мне хотелось одного и того же: переводчика, которому не нужна связь, — чтобы понимать людей и разговаривать с ними.
Knowless — моя попытка сделать такой переводчик. Он превращает речь в расшифровку и перевод в реальном времени прямо на телефоне. Я его спроектировал, а сделал с помощью ИИ-инструментов.1 Пожалуй, это самое простое приложение из всех, что я сделал: один экран и одна кнопка. Чтобы оно стало таким простым, пришлось трижды свернуть не туда.
Первая попытка: радар
Первой версией был радар, который слушал постоянно. Я представлял, что по одному только звуку он сможет определить, где находится говорящий.
Довольно быстро выяснилось, что не сможет. Мой телефон не даёт пространственного звука в записи, так что по ней не понять, откуда идёт голос. Судя по тому, что я читал, модель поновее, возможно, это умеет. У меня такой нет. Я перестал пытаться сделать это по звуку.
Вторая попытка: обе камеры
Тогда я попробовал глаза вместо ушей. Передняя и задняя камеры работают одновременно и ищут лицо говорящего, чтобы приложение знало, где этот человек.
Дело дошло до рабочей сборки на моём телефоне, где всё происходило на устройстве, без сервера: она следила за обеими камерами и пыталась сопоставить каждый голос с лицом. Провалилась она в главном. Телефон грелся. Батарея быстро садилась. Всё зависало, и часто. От этого я тоже отказался.
Слушать своими ушами
Некоторые решения были мельче, но значили не меньше. На бумаге шумоподавление для шумных мест выглядело разумно. Потом я своими ушами послушал шумную запись. Я не смог разобрать, что говорю я сам. Никакое шумоподавление этого не исправит, и я отказался от идеи.
Вот что я называю «человеком в контуре». Я делаю приложения с помощью ИИ и должен постоянно проверять, имеет ли смысл в реальной ситуации то, о чём я прошу. Решения крайне важны.
С моделями было то же самое. Я проверял их по одной, и на это ушло много времени. Поначалу, с моделями, загруженными на телефон, приложение весило бы около четырёх гигабайт. Первый прототип ещё и хранил историю разговоров. Её я вырезал, чтобы успеть выпустить приложение к Shipaton, и всё равно чуть не пропустил дедлайн.
если не слышу я, не услышит ни один фильтр
Что осталось
Один экран и одна кнопка. Нажать, сказать, перевести.
Строка перевода крупная. Оригинал стоит прямо под ней: мельче, серый, курсивом.
Этот порядок сохраняется, когда текст растёт. Размер меняется от 50% до 300% сведением и разведением пальцев. Языки, которые приложение слушает, выбирают заранее, не больше трёх. А строку можно забрать с собой: скопировать или включить чтение вслух.
Те два дня
Очень маленькая функция оказалась крайне сложной: как появляются слова.
Кажется, что звук становится текстом, а текст попадает на экран. Это не так. Звук становится догадкой, и догадка сразу попадает на экран, поэтому текст ощущается живым. Потом догадка исправляется, и, если исправленный вариант отличается, экран меняется. После длинной фразы идёт ещё один проход: он исправляет её снова, уже с учётом контекста всей фразы.
Каждое из этих состояний должно выглядеть правильно, и ожидание между ними тоже. Пока строка ещё приходит, она рисуется меняющимися символами за янтарным курсором. Устоявшаяся строка — обычный текст, и она не двигается.
Больше двух дней я ходил от приложения к дизайн-макету и обратно. Я с самого начала знал, что это должно ощущаться интуитивно, и верил, что люди это почувствуют. Я не ожидал, что на это уйдёт столько времени.

некоторых вещей там быть не должно. замечают это не все.
Говорить ровно то, что есть
Распознавание речи и перевод работают на телефоне. Языки нужно один раз загрузить, пока есть сеть; после этого основное работает без неё. Поэтому на скриншоте, который я подготовил для App Store, написано «works offline» — и тут же названо условие: после загрузки поддерживаемых языков.
Чего это не доказывает
Результатов здесь нет: ни оценок понимания, ни юзабилити-исследования, ни данных о числе пользователей. Показать я могу путь и то, куда он привёл.
Дальше я хочу, чтобы двое, каждый со своим телефоном, получали перевод друг друга в реальном времени. Это ещё не сделано.
