Pull to refresh
18
0
Send message

Забыл про версию ответить. Минимальный уровень SDK - 16( это Android 4.0), большинство функций работает с 4.4, но есть сложные штуки котрые работают начиная с более позних релизов. Грубо говоря с 4.4 KitKat будет работать 99% всего что есть

Спасибо! Для комфортной работы именно на ТСД желательно чтобы ТСД умел отдавать штрихкод через Intent - сейчас это почти все ТСД из новых. Есть совсем старые они умеют только условно через "разрыв клавиатуры" (зато это наверное умеют 100% ТСД), но это менее предпочтительно, потому что поля ввода перехватывают такой ввод. Ну и у меня коллаборация с Urovo поэтому конкретно под Urovo есть особые возможности, например включать/выключать сканер на аппаратном уровне. Это что касается штрихкодов. Для CV - там отдельная история, но это уже не ТСД явно.

Алгоритм обвода контуров отрезками такой:
1 шаг: ищем самую большую точку по контрасту
2 шаг: от нее строим линию по алгоритму Брезенхема длиной N, при этом точки попадающие в эту линию должны а) укладываться в ± 1 сигма по нормальному распределению
б) не должны содержать точки других таких линий(пересечения)
3 шаг: вращаем линию по кругу до достижения максимума по контрасту
4й шаг: от конца найденой линии строим новую линию, но вращение уже не на 360 градусов а ограничено ±30градусов
повторяется пока на конце можно найти новую линию, если нет то снова на 1 шаг. Если набирается сумма контрастов больше определнно предела от суммы контрастов
то алгоритм завершается. Вот такой алгоритм. Я его подобрал опытным путем на датасетах с котрыми работал. Этому алгориту предшествует другой алгоритм который выделяет контрастные области — делает их более компакными
и по ним уже работает алгоритм построения линий.
Да. Комментарий про алгоритм Хафа, дал мне понять что имеет смысл описать алгоритм подробнее. Я сделаю несколько отдельных постов с ссылкой на этот пост про каждый алгоритм который я использовал: отдельно про выделение главных градиентов, отдельно про расположение векторов и про то как я анализирую связи между векторами
Вот ссылка на приложение можно скачать и потестить сколько нужно: play.google.com/store/apps/details?id=ru.travelfood.bitmaps

По поводу стандартных тестов мое мнение такое: у меня есть задача, распознавать продукцию на ленте (упрощенно) я смотрю что есть прежде всего из коммерческих решений, потом из алгоритмов и готовых библиотек, не нахожу того что может приемлемо выполнять мою задачу так чтобы это реально работало а не на бумаге и не в виде картинок. В результате придумываю и пишу свое. Оно работает как мне надо. Конец. Может я конечно круто ошибся и где то существует вагон готовых к промышленному применению решений которые можно пощупать на реальных примерах сразу, тогда да — пардон.
можно искать прямые алгоритмом Хафа, да. Есть и другие методы. И что? Я знаю что есть множество разных методов, фрейморки и библиотеки типа OpenCV в которых они реализованы. Написать код который проводит линии по градиенту быстрее чем статью в википедии про этот алгоритм. Если бы я сделал только это я бы назвал статью так: «Алгоритм который ищет линии в изображении». Но есть одна проблема — в изображении можно вписать очень много линий и это не имеет смысла — просто вместо точек появится много линий.
Прочитал про эти методы, но там же поиск «особых точек», а у меня совершенно не так. У меня все точки одинаково «особые» и покрываются векторами, причем количество векторов стремиться к минимуму. Ну в в принципе можно сказать что у меня «поиск особых векторов». Примерно это можно сформулировать так: вот вам коробок спичек, расположите минимальное количество спичек так чтобы читались основные контуры рисунка и было понятно что нарсовано
К сожалению нет. Код большой и находится в состоянии перманентной оптимизации и экспериментов. Поэтому плохо читаем
Инвариантность к положению, повороту и масштабу обеспечивается за счет того, что у меня анализируются не сами вектора в системе координат изображения, а связи между векторами, связи между связями и и.д. до бесконечности. Однако Вы правы, статья не все раскрывает, учту на будущее.
Чем то похоже но суть совсем не та. Я не делю изображение на ячейки и не привязываюсь к размеру блока, соответственно нормализация потом идет по другому. Потом, насколько я понимаю этот алгоритм привязан к конкретному положению объекта, т.е. если его развернуть то ничего не получиться? У меня не привязано. К сожалению мне не разрешили опубликовать ссылку на приложение в маркете без этого статья не интересна.

Information

Rating
Does not participate
Registered
Activity