Несколько лет назад я экспериментировал с созданием нейросети, которая сможет генерировать тексты. На тот момент еще самый популярный способ решить такую задачу – рекуррентные сети. А конкретно – LSTM (long short-term memory).
Учитывая серьезные временные затраты на обучение нейронки (а каждое обучение занимало несколько суток непрерывного “гудения компьютера”), приходилось максимально качественно готовить данные, на которых я ее обучал.
Для получения обучающего датасета я парсил книжки и парсил сайты. Упрощал все, что только можно.
Который день экспериментирую с возможностями искусственного интеллекта от OpenAI (ChatGPT).
Сегодня вдруг вспомнил, что летом писал на python скрипт, который на входе получал список английских слов, а на выходе готовил данные для карточек в Anki. Транскрипцию он брал с одного сайта, “толкование” слова – с другого. Пришлось отлаживать все это, чтобы парсилось корректно. Обрабатывать странные ответы и …
В общем, позабыты хлопоты, остановлен бег. Пусть вкалывают роботы, а не человек. За какое-то количество итераций сформировал prompt для ChatGPT, которая сама все это делает.
Качество генерации синтетического компьютерного голоса в последнее время возросло настолько, что я не удержался от экспериментов с автоматическим созданием английской аудио-дорожки для youtube роликов.
Имеем на входе субтитры, переводим, а на выходе получаем голосовую озвучку, где и не каждый поймет, что это говорит робот. :)
https://github.com/KMiNT21/subtitles-to-audio-track
В общем, схватился за Jupyter Notebook, TSS от Mozilla и начал активно прожаривать свою видео-карту мозилловской нейросеткой.
Больше всего заморочек было с перестройкой субтитров. Оказалось, что универсальных решений быть не может.
Этим летом нашелся приятный повод попрограммировать. А это отличное занятие, чтобы выйти из цикла ежедневного мониторинга военных сводок.
В одной из футбольных телеграм-групп “сломался” бот, через который люди собирались на игры. Я загуглил его по названию, нашел статью на хабре от автора. Увидев, что бот написан на Node.js, перехотел смотреть исходники. Решил почитать как в целом они пишутся, и какие у них есть возможности.
И так залип, что не мог остановиться, пока к ночи не сделал уже рабочий вариант на python, которым можно было бы пользоваться в группе.
Хоть я пока и не оставил попыток найти подходящий вариант датчиков попадания мяча (с тензометрическими не вышло), решил-таки, наконец, попробовать и распознавание с изображений (видео-поток в режиме реального времени).Мяч отслеживает хорошо, но дальше вопросы посложней. Надо теперь как-то анализировать эту базу 2D координат. Например, посчитать, сколько было резких изменений траектории (т.е. отскоков мяча).Сначала надо каким-то алгоритмом выполнить компрессию, убрав лишние (избыточные) точки на траектории. А потом с помощью метода интерполяции (нашел на stackoverflow) найти и посчитать все эти отскоки.
В процессе проектирования новой версии контроллера (сразу с внутренним БП и 4-мя управляемыми розетками 220В) я уже жалел, что затеял его в OpenSCAD. Столько формул и привязок пришлось писать, что мозги часто закипали. Не-не-не, для более-менее сложных объектов буду брать теперь SolidWorks.
Но, к счастью, снова с размерами нигде критично не промазал, потому перепечатывать не пришлось. Разве что розетки чуть-чуть пришлось подправить канцелярским ножом, бо слишком тяжело вставлялись.
А вчера, наконец, появились саморезы необходимого размера, так что появился повод уже допаять все до конца и протестировать.
Попался мне на одном канале сюжет про парадокс Монти-Холла. Про ту игру, в которой три двери, за которыми автомобиль и две козы. Давным-давно я даже по телевизору это видел, вроде бы.
Захотелось вспомнить детство, когда я на “ZX Spectrum” написал симулятор игры в казино, где проверялась стратегия удвоения ставок (мартингейл), которую я тогда и придумал.
Решил на python написать симуляцию этой телевизионной игры с выбором дверей. Причем, написать так, чтобы код был максимально нагляден даже для непрограммистов.
Попалось на глаза видео “FreeBSD | Обзор, мнение, пригодность для десктопа”. Что-то ностальгическое отозвалось в голове. Дай, думаю, включу.
Ну и слушал в фоне ролик, пока там про обновление портов не началось. Вспоминаю, что и мне не помешало бы.
Захожу на Debian и … почти начинаю писать “portsnap fetch update”. 🙂
Вот это впечаталось. Хотя я даже и вспомнить уже не могу когда FreeBSD перестал использовать. Но их “порты” в момент первого знакомства с этой системой мне очень пригодились.
Последний этап создания контроллера для теплицы меня даже затянул. Тут и попрограммировать раздолье, и интерфейс порисовать. То туда сдвинуть на несколько пикселей, то сюда, то пиктограммки захотелось добавить. В конце еще и OTA добавил (удаленная перепрошивка микроконтроллера по WiFi).
А 3D модель сделал на удивление точную по размерам. Все с первого раза совпало. Разве что улучшить пару моментов захотелось, да корпус покрепче напечатать. Но это как-нибудь позже.
В конце нескольких часов паяния вдруг обнаружилось, что Wemos D1 mini не видит WiFi… А нормально выпаять там нереально, так что разрушил все и начал с нуля с другим микро-контроллером (ESP-12E).
То начались непонятные перезагрузки модуля, как только управляющий пин управлял мосфетом с включенной индуктивной нагрузкой. И защитные диоды, гасящие обратный ток, и сглаживающие конденсаторы везде, где только есть смысл. И даже психанул и полностью переписал прошивку, сделав ее совместимой командами с оупэнсорсной Tasmota, которую часто используют вместо родной Sonoff (и еще целой кучи устройств).