Однако здравствуйте. Пару лет назад, придя с очередной 10-часовой смены с завода, я как всегда думал, как еще заработать денег. Поскольку физический труд меня больше не прельщал, то решил попробовать начать с программирования. По консультировавшись со знакомым It-ником и погуглив, решил начать учить Python. Заказ себе книгу "Начинаем Программировать на Python" Тонни Гэддиса и на досуге начал ее изучать. Огромный плюс этой книги, что там много практических заданий. Но смутило одно, что книга для начинающих почти 900 страниц(тогда, думал, что это много, а как оказалось очень даже мало). Целью было - научиться программировать приложения, программы, веб-сайты. Позже, изучая Python и информацию по этому языку в интернете - понял, что он не очень подходит для веб-сайтов, да и для программ и приложений он довольно медленный. Поскольку изучать я его уже начал, то решил не бросать это дело и найти область где его используют. И этой область оказалась аналитика, Data-science, ML и DL.

Деваться некуда - надо, значит надо. Плюс сложилось так, что случилась СВО, массовый отток It-ников и государство организовало огромное количество бесплатных курсов, но ты должен быть безработным. И с этим мне "повезло". Из-за санкций, которые последовали вслед за известными событиями, мое производство закрывается - не выдержало ограничений. Итак я остался безработным, так и с беременной женой. Тут я решился воспользоваться шансом, пока я безработный официально - записался на гос. программу "Цифровые Профессии". И среди всего длинного списка, почти наугад, я выбрал Data-science. Успешно пройдя вступительный экзамен я попал в последний поток.

Итог такого самообразования

Плюсы:

  • Ты сам волен выбирать когда, сколько и где учишься (даже курсы можно было смотреть в записи, главное потом сдать экзамен и проект),

  • Литературы, видео сейчас очень много, но это и минус - не знаешь за что схватиться,

  • В процессе обучения сам понимаешь, что еще тебе надо изучать, кроме Python (в моем случае это SQL, немного Excel),

  • Много единомышленников, которые тебе помогут.

    Минусы:

  • Учить реально очень много, а когда ты работаешь, то и времени мало для этого,

  • На курсах дают только общую информацию (а чего вы хотите за 6 месяцев обучения?!),

  • Конкуренция в будущей профессии большая, поскольку сейчас модно учиться и быть It-ником,

  • Из-за этой моды, работодатели, естественно скептически относятся к людям прошедшие курсы, а не полноценное обучение.

    Но мне повезло - я умудрился устроиться Data-aналитиком в крупную АПХ. АПХ занимается производством молочных и мясных продуктов. Причем предприятие полного цикла. Просто нашел и связался с HR и предложил свои услуги, сначала бесплатно, а дальше как пойдет. И у меня пошло.

Месяц на вкатку в мир данных, пару скучных проектов в виде карты урожайности и внесений.

Карта урожайности и внесений(Пришлось немного выучить JS, CSS и HTML)
Карта урожайности и внесений(Пришлось немного выучить JS, CSS и HTML)

И тут начальство загорелось внедрить нейронные сети на фермы. Поскольку нанимать человека, который будет постоянно мониторить видео они не собираются, а загружать работника еще одной функцией - работник не согласится (у него более важные дела и много другой работы, так еще и доплачивай ему за это).

Об этом и пойдет повествование. Точнее о первых двух.

1. На фермах есть такая простая штука - скрепер. Она предназначена для уборки за коровами их экскрементов. И периодически она ломается - и тогда коровы тонут в своем...(тут вы сами поняли). И чтобы не гонять, постоянно, слесарей по всем фермам - начальство придумало использовать нейронку и поставило задачу ее написать. Недолго поискав информацию, я решил использовать Yolo (https://docs.ultralytics.com). И вот вам скрин видео:

Распознание(И да, Palka - это скрипер))
Распознание(И да, Palka - это скрипер))


Про обучение писать не буду, ибо информации много в интернете. Суть работы такова: имеем видеопоток rtsp, отрисовываем 2 квадрата на выходящем видео (использовалась библиотека Opencv-python и команда cv2.rectangle()), далее прописываем условие, чтобы boxes (https://docs.ultralytics.com/modes/predict/#boxes) пересекали обозначенный квадрат и скрипт отправляет по Chat_Id и API телеграмма сообщение о необходимости проверки скрипера. Установив порог точности до 0.6 (conf) - устранил ложные срабатывания.

2. Дальше интересней. Решили удостовериться, что коровы хорошо питаются. Т.е. их кормостол должен быть всегда полон. Вот для этого уже использовал всю туже самую Yolo, но уже модель классификации.

Отбил датасет, разделил на 4 класса:0%, 25%, 50%. Это заполненность кормостола.

В результат на выходе мы имеем(скрин видео ниже).

Модель классификации
Модель классификации


Задал условие, если кадр на видео относится к классу 0% с вероятностью 0.9 или к классу 25% с вероятностью 0.8, (https://docs.ultralytics.com/modes/predict/#probs), то все так же отправляется сообщение и скриншот(чтобы удостовериться, что кормостол пустой) в телеграмм-бот. Естественно, так же экспортировал в формат OpenVINO = мы имеем нейронку, которая проверяет, накрыт ли стол у коров).

Поскольку начальство борется с тем чтобы коровы содержались в чистоте и были сыты(не нанимая и не нагружая при этом рабочих) то задача была выполнена.

Из трудностей:

  • нужен огромный датасет, особенно для классификации

  • необходимость постоянно оптимизировать скрипты, ибо всего 13 камер подключено (для этого купили мощный ПК с видеокартой Nvidia)

  • все перевел, чтобы модели использовали CUDA, чтобы не потребляли CPU

  • но до сих пор не могу перевести cv2 на cuda (если кто подскажет - буду благодарен)

Впереди еще ждет нейронки по распознанию каждой коровы по отдельности, присваиванию, каждой личного ID для того, чтобы отслеживать динамику ее состояния.

И уже написана и модель по обнаружению людей без каски, на строящихся фермах (надо же следить за безопасностью и штрафовать нерадивых строителей) - но это не в эту тему.

Комментарии (2)


  1. Old_mammoth
    09.12.2023 09:32

    "Поскольку начальство борется с тем чтобы коровы содержались в чистоте и были сыты" - не повезло коровам с начальством


  1. Ales_Nim
    09.12.2023 09:32

    Попробуйте вместо OpenCV погонять на гпу Корнию: https://github.com/kornia/kornia