Здравствуйте, Артём, Вы писали:
Аё>Поиск по форуму мне не помог, но кое-что гуглится.
Я лет 10 не в теме, но коллеги из открытого сейчас хвалят 2 библиотеки: PaddleOCR и mmocr. У каждой свои недостатки, но в целом намного впереди tesseract практически во всех задачах
Здравствуйте, Nuzhny, Вы писали:
N>Я лет 10 не в теме, но коллеги из открытого сейчас хвалят 2 библиотеки: PaddleOCR и mmocr. У каждой свои недостатки, но в целом намного впереди tesseract практически во всех задачах
Я попробовал PaddleOCR их демо- загружает картинку на бек Байду и занимает 3 секунды на распознавание. Самое точное, но бывает в 1 номере в коде ошибается.
PaddleJS демо- ну хз, не сказать, что прямо лучше чем Tesseract WASM демо. Та же самая картинка, paddle её не видит совсем, а tesseract видит, но гонит — много ошибок в коде.
У PaddleJS нахождение text box (когда он видит) сделано лучше: по 4 точкам линии. В то время, как тессеракт рисует большие параллелепипеды при наклоне текста.
У встроенной фото софтины Галакси Таб оказывается, тоже есть распознавание. Только нужно кликнуть на один из подсвеченных текст боксов, и оно копирует распознанный текст в буфер обмена. Оно схватило букву от другого слова и ошиблось в 1 номере в коде.
А что интересно есть такое, чтобы зацепить символы по отдельности и самому попытаться склеить их в слова? Как каждым отдельным символом "дотренировывать" CNN, если ошибка и он изменён пользователем?
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Артём, Вы писали:
Аё>>Поиск по форуму мне не помог, но кое-что гуглится.
N>Я лет 10 не в теме, но коллеги из открытого сейчас хвалят 2 библиотеки: PaddleOCR и mmocr. У каждой свои недостатки, но в целом намного впереди tesseract практически во всех задачах
MMlab года 4 назад порадовал скоростью появления в коде всего нового из свежих публикаций. И оно и работает быстро. Смотрю они в том же темпе идут.
Tesseract вроде (данные пятилетней давности) считался набором залипух, как-то
вместе свинченных и дающих хороший результат. Но они возможно произвели гранд рефакторинг...
Здравствуйте, Артём, Вы писали:
Аё>А что интересно есть такое, чтобы зацепить символы по отдельности и самому попытаться склеить их в слова?
Сейчас уже не в курсе, но раньше такой подход был. Потом сверху на него накручивали отдельную нейросеть для исправления ошибок. Сейчас хз, возможно одна всем и занимается.
Распознавание зависит от контекста: можно перепутать цифру ноль и букву "О". Можно перепутать русские и английские символы с одинаковым или схожим написанием. Даже "3" и "9" часто бывают похожи и путаются. Нюансов миллион, ошибок в распознавании символов тоже. Пройти сверху рекуррентной сетью LSTM/Transformer — это классика (была).
Аё>Как каждым отдельным символом "дотренировывать" CNN, если ошибка и он изменён пользователем?
Нет особого смысла, потому что отдельные правки будут составлять слишком маленькую долю в общем большом датасете. Сейчас для этого чаще используют синтетические данные или вообще GANы: нашли, что плохо распознаётся, нагенерировали кучу похожего, переобучили. Сколько генерировать — зависит от размера датасета (и архитектуры сети тоже) и чаще всего просто понемногу докидываются данны — дообучают сеть — смотрят результат. Нет конкретных формул и алгоритмов.
Здравствуйте, no_ise, Вы писали:
_>MMlab года 4 назад порадовал скоростью появления в коде всего нового из свежих публикаций. И оно и работает быстро. Смотрю они в том же темпе идут.
На его странице в гитхаб описание- работает поверх PyTorch. Я не могу запихать питорч с питоном и всеми его пакетами в html responsive аппликуху wasm. Мне нужна C++я часть ядра, без питоновского клея. Модели на 150мб тоже слишком тяжелы для Галакси Таб.
_>Tesseract вроде (данные пятилетней давности) считался набором залипух, как-то _>вместе свинченных и дающих хороший результат. Но они возможно произвели гранд рефакторинг...
Они сидят на зарплате Гугла и прикрутили LTSM, а неравнодушные прикрутили его сборку в wasm. Которая демку реально можно открыть на девайсе и потрогать.
Здравствуйте, Артём, Вы писали:
Аё>На его странице в гитхаб описание- работает поверх PyTorch. Я не могу запихать питорч с питоном и всеми его пакетами в html responsive аппликуху wasm. Мне нужна C++я часть ядра, без питоновского клея. Модели на 150мб тоже слишком тяжелы для Галакси Таб.
PyTorch — это средство для обучения нейросетей, его не надо никуда засовывать. Для инференса пишут другой код под конкретное железо. Под мобилки, скорее всего, надо будет ещё сделать квантизацию в int8 для скорости.
Никогда не занимался ни мобилками, ни wasm'ом, поэтому подсказать не смогу. Для Nvidia обычно конвертируют в onnx, а потом в TensorRT. Для эппловских девайсов — в coreml. Для Андроида — tflite. Для Интела — OpenVINO. И т.д. Не надо среду разработки нейросетей куда-то нести.
Здравствуйте, Nuzhny, Вы писали:
N>Для инференса пишут другой код под конкретное железо. Под мобилки, скорее всего, надо будет ещё сделать квантизацию в int8 для скорости. N>Никогда не занимался ни мобилками, ни wasm'ом, поэтому подсказать не смогу. Для Nvidia обычно конвертируют в onnx, а потом в TensorRT. Для эппловских девайсов — в coreml. Для Андроида — tflite. Для Интела — OpenVINO. И т.д. Не надо среду разработки нейросетей куда-то нести.
Мне tflite подойдёт- tf.js есть. А где почитать по шагам для чайника, что вот берём эту готовую модель из MMlab, запускаем такие команды в консольке, и получаем готовую к употреблению tflite модель?
Короче, прикрутил как-то PaddleJS, и скормил ему (paddlejs-core) картинку, а он мне вернул громадный массив чиселок. Вполне достаточно шустро вернул. Но. Дальше этот массив попалает в некий DBPostprocess- и оттуда уже получаются прямоугольники детектирлванного текста.
Этот DBPostprocess- походу писал какой-то школьник, который сортирует пузырьком. Жесть какая тормозная функция. Буду завтра думать, что с ней м почему она такая тормозная.
Здравствуйте, Артём, Вы писали:
Аё>Этот DBPostprocess- походу писал какой-то школьник, который сортирует пузырьком. Жесть какая тормозная функция. Буду завтра думать, что с ней м почему она такая тормозная.
Бывает. Иногда и переписывая код с С++ на нормальный С++ получается в несколько раз ускорить
Я был неправ- затуп возникает не в функции на js, а на первом шаге — прогон модели. Подмерзает на пару секунд не только страница с прилагой, но и ютуб в другом окне хрома- на десктопе линуксе. Звук не прерывается.
В остальном более-менее текстбоксы рисуются.
Попробовал запустить на целевом девайсе- на андроиде. Оно тужится загрузить несколько секунд, и кидает исключение "Webgl context is lost".
Попробовал paddlejs-backend-wasm- на десктопе WASM выкинул OOM. Хотя RAM в ноуте предостаточно.
Моделька для paddle весит 3.5м примерно и демка с baidu с ней тоже в андрлиде-хроме сваливается.