Данный репозиторий является решением для сорвенования RosneftPropantCheckChallenge (https://boosters.pro/championship/RPCC/overview) Команды Ne_Beite (7 место из 160 команд). Условие задачи: по фотографиям рассыпанных на листке гранул пропанта классифицировать их фракцию и количество.
Ne_Beite
├── data
│ ├── labels
│ │ └── train.csv
│ └── train
├── models
│ ├── regr_tree.model
├── README
├── train_distributions.py
├── preprocess.py
├── hough.py
├── requirements.txt
└── run.py
С помощью методов из OpenCV мы вырезаем из фотографии внутренний прямоугольник с гранулами проппанта и запускаем cv2.HoughCircles() для поиска окружностей на картинке. Далее высчитываем средний радиус и делим количество пикселей на переднем плане на фото на площадь круга с средним радиусом. Это и будет количеством гранул в ответе. Для подсчёта распределения гранул по ситам строим распределения радиусов найденных окружностей и по ним обучаем DecisionTreeRegressor, который затем будет сконвертирован в нейронку Torch для предсказания распределения бинов.
Презентация решения: https://docs.google.com/presentation/d/1wQ5OYPsjdsp4QQN5kUn7LCuuPR50J25oFWSBCFwrIgE/edit?usp=sharing
- preprocess.py - предобработка фотографий (вырезка прямоугольников, настройка перспективы и яркости)
- hough.py - методы для подсчета гранул и распределения радиусов
- train_distributions.py - обучение распределений радиусов в размеры гранул
- Для установки виртуального окружения и зависимостей:
$ python -m venv env
$ source env/bin/activate
on Linux,$ env\Scripts\activate
on Windows
$ pip install -r requirements.txt
- Загрузите фотографии в папку data/train
- Для запуска процесса обучения и создания модели:
(env) $ python run.py