Птица beauty в гнезде
Одна не сильно впечатляющая статья про разметку изображений кур.
Статьи про нейрокурятник
- Вступление про обучение себя нейросетям
- Железо, софт и конфиг для наблюдения за курами
- Бот, который постит события из жизни кур — без нейросети
- Разметка датасетов
- Работающая модель для распознавания кур в курятнике
- Итог — работающий бот, распознающий кур в курятнике
Прошло 1,5 месяца, мы окончательно смирились с тем, что камеру нельзя повесить лучше, удалили ненужные фотографии с сервера и поняли, что они все копятся и копятся. И даже уже я не проверяю, что происходит в курятнике (а иногда там вырубают электричество и бот просто молчит). И пора бы уже размечать.
Сначала мы понадеялись на то, что существуют тулзы для разметки по типу drag and drop, которые упростят жизнь. Они существуют, да. Но адекватные либо сложно установить, либо в последний раз обновлялись много лет назад, другие не поддерживают нужные форматы и не позволяют добавить метаданные, третьи слишком продвинуты (попиксельная разметка, маски), что нам не нужно, четвертые являются специфическим плагином.
По сути нам нужно просто разнести картинки по классам, не нужно даже выделять объект на фотографии — он все равно присутствует или нет. Разметку в итоге я делаю так:
- Вываливаю список файлов за день в консоль.
- Закидываю список в Calc/Excel.
- Вытягиваю из имени файла дату и время создания.
- Сортирую по времени.
- Нахожу в дампе файл, открываю, проставляю идентификатор объекта (в таблицу).
- По окончании разметки заливаю файл в базу.
Что такое идентификатор объекта?
Объект — это курица, отсутствие чего-либо вообще, две курицы, яйцо, два яйца, отсутсвие света или что-то совсем нерелевантное (чья-то рука, ворующая яйца динозавров, привидения, кошка) и т.д. Идентификатор объекта — просто уникальный номер в базе. Например, 14 — это курица psycho, -1 — отсутствие света, 0 -отсутсвие чего-либо, 10 — восемь яиц в гнезде. У объектов есть атрибуты, например, пестрота спинки и воротничка, основной цвет. У атрибутов есть выраженность.
У объекта есть тип (курица, яйцо и др.). Я на всякий случай разбила куриные яйца на классы и типы по количеству, при желании можно будет объединить. У типа есть еще и атрибут количество.
Сначала я засела за pgAdmin и честно делала все через sql, что не сильно отличается от сидения в консоли бд, поэтому в какой-то момент я все-таки поставила себе вайн и открыла навикат. Все-таки так удобнее и быстрее, хотя бывает нужно добавить забытый sequence или constraint или удалить лишний, придется все равно открывать доку и писать запрос). И csv-шки потом проще заливать. Хотя можно составить формулами в excel запросы на инсерт, так я тоже делаю, да =)
Все это вылилось в малюсенькую er-диаграмму:
Мило, прекрасно, потом легко выгрузить в нужном формате, хоть json, хоть xml, хоть csv, и в общем, при отсутствии нужного формата и присутсвии желания, конкатенация сделает что угодно почти.
Главная таблица в схеме — chicoopfiles. Это соотнесение файла и объекта. Так как файлу соответсвует всего один объект, я заношу объекты в таблицу с файлами сразу.
Если кого-то заинтересовало, почему курица psycho, то история такая: это была самая обычная пестрая курица, но с ней что-то произошло. Теперь периодически она трясет головой и делает несколько шагов назад (обычно, тряски головой у кур бывают из-за того, что они замерзают зимой, но этим чаще страдает петух из-за большого гребня: его проще отморозить). По этой причине мама подозревала, что она не собо-то и несется, но оказалось, что несется она лучше всех. Курица определенно поехавшая, но несется и несется хорошо!
Это psycho в гнезде
У мамы недавно завелись новые куры — совсем молодые, белые, уже несут мелкие белые яйца. В отличие от степенных старых птиц, у этих полно ребяческой энергии, они все время носятся, любопытничают, лазят в гнездо, иногда зачем-то в нем сидят, спят, потом их выгоняет какая-нибудь старушка. Таких размечать нет смысла, так как они, как правило, в гнезде не затем, чтобы снести яйцо (хотя изредка бывает, но вообще они выбрали себе другое гнездо). Так как они не сильно различаются, я разметила их как одну белую курицу.
Новые куры очень смешные. Мама заметила, что они очень плохо несутся, но если закрыть их в небольшом помещении без тайников, то несутся они хорошо. Очевидно, куры недокладывают в гнездо. И да, отец недавно обнаружил их тайник под бревнами, куда они навалили 22 яйца...
На фотографиях заметно, что птицы постепенно приобретают цвет — кожа на голове и гребень наливаются красным, куры перестают быть синюшно-белыми фабричными птицами. Еще они перестают бояться людей и кучковаться в углу, о чем камера уже не расскажет.
Любопытство
По поводу того, как различать кур, которые очень похожи. Вообще, лучше всего кур различать по «лицу» — форме глаз, гребню, складкам кожи. Да, это возможно, и куры сами друг друга различают и запоминают (иначе они не могли бы построить сложную иерархию доминирования одной особи над другой с транзитивными свойствами: курица А доминирует над Б, курица Б доминирует над В, тогда А доминирует над В). Но у нас камера висит так, что это просто невозможно. Приходится опираться на окраску.
В таком случае получаем иногда трудноразличимых кур. У нас это куры red star и red twin. Это две красные курицы, одна из которых получила прозвище Звезда Интернета, потому что некоторое время я использовала ее фото в качестве аватарки, родителей это позабавило и теперь курица носит такое прозвище. Вторая просто очень на нее похожа. На фотографиях их можно различить по темным пятнам. У Звезды более пестрый воротник и темные пятна на плечах, у ее подруги более темное пятно на спине у воротника.
Слева — red star, справа — red twin
Ну и немного про ручных наглых кур и как они чуть не сожрали меня.