Вверх ↑
Ответов: 632
Рейтинг: 4
#1: 2020-10-10 23:59:22 ЛС | профиль | цитата
Доброе время суток. Давно думаю как текст перевести в иллюстрацию. Недавно делал схему генерация маршрутов и мне пришла идея, как и на чём основать программу "Генератор иллюстраций". Самый простой способ оказался создание заранее готовых шаблонов. Причем мне кажется, что на один образ (действие) лучше иметь большой набор шаблонов, а решение какой использовать будет решать генератор случайных чисел. Сам используемый шаблон тоже не должен идеально рисоваться, а некоторые отличия должны быть. Это отличия шаблонов я уже сделал, использовал генератор случайных чисел, каждая точка может отличатся от оригинального шаблона. Выглядит не совсем так как хотелось бы.
Случайность шаблонов и эталон
Случайность шаблона
Эталон

От линии до многоугольника
Когда задумку начал оформлять в схему, я решил попробовать использовать линии. Когда иллюстрация усложнилось, было понятно, что если шаблоны будут внутри залиты цветом, иллюстрация выглядит лучше.
Сравнение старой схемы и новой
Старая схема и программа. https://cloud.mail.ru/public/2gsV/5wWYgvMYS
Новая схема и программа. https://cloud.mail.ru/public/27oE/57YVg29JR

Оптимизация
При внимательном осмотре схемы, видно что очень многое можно оптимизировать, уменьшить количество элементов. Сколько раз пытался некоторые очевидные места заменить. 4 math, 5 mathparse, 6 fastmathparse использовать всего 2 элемента. Программа перестает вообще работать или работает не так как запланирована. В программе есть очередность, если говорится сначала про небо, а потом про дерево, тогда небо будет выступать как задний фон для дерева, если наоборот сначала дерево, а потом небо, то дерево будет выступать как задний фон для небо, а небо полностью верхушку дерева закроет. В некоторых местах проще алгоритм я не знаю, но догадываюсь, что те кто опытней меня знают. Программа сложная и уникальная, даже похожих не видел.
Оптимизация

Контейнер шаблонов (Трава = травинка слева, травинка справа)
Кроме шаблонов ещё можно использовать контейнер шаблонов, то есть если мы напишем "звезда", то будет одна звезда, а если напишем звезды, то это контейнер. В каждом контейнере, перечислены шаблоны, местоположения их, цвета. Попытался контейнеры реализовать, но не совсем все работает так как в теории хотелось. То есть если использовать один контейнер и ничего больше не писать, то все работает как задумано, а если текст состоит не из одной травы, то уже происходят ошибки. Контейнеры будут полезны для увеличения деталей на некоторых шаблонах. Если напишем "дом", то будет облик дома, но сам дом без окон и без дверей. Если дом оформить в контейнер "дом", то вместо перечня "рама_окна, окно, дверь, ручка_двери, печная_труба", программа в таблице найдет ключ и нарисует детали дома. Если написать "ручка двери", то программа не нарисует ручку двери, потому что программа все слова перебирает через пробел, а словосочитание "ручка_двери" не будет найдено, если в списке ключей записать через пробел. Это проблема, которую нужно решить. Если сократить словосочетание до "ручка", то как программе понять какая эта ручка, дверная или шариковая?
Контейнер шаблонов
Без контейнера

Создание нового шаблона
Для создания нового шаблона в программе сделана галочка "рисуем". Если поставить галочку "рисуем", откроется окно, там будет список координат будущего шаблона, чтобы их нарисовать нужно поставить галочку "Окно визуализации" и в открывшемся окне рисовать будущий шаблон.
Создание нового шаблона
Универсальность шаблонов

Озвучка текста
У меня реализована озвучка текста через сайт http://5btc.ru/voice/ . Пока в отдельной программе.
Программа и схема. https://cloud.mail.ru/public/2dF4/hCvExacpV
1. Дополнительные компоненты. https://cloud.mail.ru/public/5eFA/3Q6j7Fo2N
2. Дополнительные компоненты. https://cloud.mail.ru/public/3GnX/3cT7PeeQS

Программа рисует хорошие иллюстрации
В итоге думаю сделать некую анимацию. То есть дается программе текст и она рисует иллюстрации. Каким-то методом она определяет законченность иллюстрации, переходит к новой иллюстрации. Возможно по абзацам, но скорее всего есть более правильное решение определения готовности иллюстрации.

Программа сгенерирует мультик
Когда программа будет показывать иллюстрации, сохранять их, она будет читать текст, сохранять озвучку. Программа готовые иллюстрации сохранит в видео с озвучкой. Сделать это можно с помощью FFmpeg, через командную строку. То есть текст прочитан, иллюстрации все показаны, сразу программа посылает через командную строку FFmpeg "Превратить набор картинок в видео (ffmpeg -f image2 -i image%d.jpg video.mpg)" и "Добавить звук к видео (ffmpeg -i son.wav -i video_origine.avi video_finale.mpg)".
ffmpeg https://cloud.mail.ru/public/2oQq/46WhBQqpu

Архив с программой, схемой, компонентами, скриншотами и ffmpeg. https://cloud.mail.ru/public/3Hi8/52GQBerfr
Распакованный архив. https://cloud.mail.ru/public/2fcu/5rs8fcdtr
карма: 0

0