Wraz z postępem technologicznym w obszarze sensorów wizyjnych wzrosło zapotrzebowanie na rozwiązania umożliwiające automatyzację procesów z wykorzystaniem wizyjnej informacji zwrotnej. Ponadto rozwój naukowy w zakresie algorytmów przetwarzania obrazu umożliwia wyciąganie ze zdjęć takich informacji jak ilość obiektów, ich rozmiar, położenie, a także orientacja. Jedną z aplikacji wykorzystujących przetwarzanie obrazu są na przykład bezobsługowe kasy pozwalające rozpoznać i zliczyć produkty, które znajdują się w koszyku.
Ostatnia edycja: 23.01.2022
-
23.01.2022 - w opisie projektu umieszczone zostały progi punktowe
-
23.01.2022 - automatyczna sprawdzarka została uruchomiona; został dodany do repozytorium skrypt
check.py
przesyłający folder projektowy do sprawdzarki -
14.01.2022 - niezbędne biblioteki zostały dodane do pliku requirements.txt; w skrypcie detect_fruits.py wykorzystana została biblioteka pathlib, która eliminuje problemy związane ze śceiżkami do plików w systemie Windows
Zadanie projektowe polega na przygotowaniu algorytmu wykrywania i zliczania owoców znajdujących się na zdjęciach. Dla uproszczenia zadania w zbiorze danych występują jedynie 3 rodzaje owoców:
- jabłka
- banany
- pomarańcze
Wszystkie zdjęcia zostały zarejestrowane "z góry", ale z różnej wysokości. Ponadto obrazy różnią się między sobą poziomem oświetlenia oraz oczywiście ilością owoców.
Poniżej przedstawione zostało przykładowe zdjęcie ze zbioru danych i poprawny wynik detekcji dla niego:
{
...,
"07.jpg": {
"apple": 2,
"banana": 1,
"orange": 1
},
...
}
Szablon projektu zliczania owoców na zdjęciach dostępny jest w serwisie GitHub i ma następującą strukturę:
.
├── data
│ ├── 00.jpg
│ ├── 01.jpg
│ └── 02.jpg
├── readme_files
├── detect_fruits.py
├── README.md
└── requirements.txt
Katalog data
zawiera przykłady, na podstawie których w pliku detect_fruits.py
przygotowany ma zostać algorytm zliczania owoców. Funkcja main
w pliku detect_fruits.py
powinna pozostać bez zmian.
W przypadku chęci wykorzystania przygotowanego szablonu oraz systemu kontroli wersji w postaci serwisu GitHub możliwe jest stworzenie własnego repozytorium na podstawie szablonu. W tym celu należy poprzez przycisk Use this template
utworzyć nowe repozytorium wybierając swoje konto jako właściciela, nadając mu własną nazwę i obowiązkowo ustawiając widzialność jako prywatne. Powyższe kroki zostały przedstawione na załączonych zdjęciach.
Interpreter testujący projekty będzie miał zainstalowane biblioteki:
Natomiast w przypadku wykorzystania w projekcie dodatkowych bibliotek należy przygotować plik requirements.txt
, zawierający informacje o dodatkowym pakiecie i jego wersji, zgodnie z poniższym przykładem:
scikit-image==0.18.3
matplotlib
Więcej informacji na temat zastosowania plików requirements.txt
można znaleźć w:
Skrypt detect_fruits.py
przyjmuje 2 parametry wejściowe:
data_path
- ścieżkę do folderu z danymi (zdjęciami)output_file_path
- ścieżkę do pliku z wynikami
$ python3 detect_fruits.py --help
Options:
-p, --data_path TEXT Path to data directory
-o, --output_file_path TEXT Path to output file
--help Show this message and exit.
W konsoli systemu Linux skrypt można wywołać z katalogu projektu w następujący sposób:
python3 detect_fruits.py -p ./data -o ./results.json
W środowisku PyCharm możliwe jest dodanie parametrów wejściowych do skryptu, z którymi program będzie wywoływany każdorazowo przy uruchomieniu. W tym celu należy otworzyć okno konfiguracji z górnego menu Run > Edit Configurations...
. W otwartym oknie konfiguracji poprzez symbol +
należy dodać nową konfigurację dla języka Python. Tworzonej konfiguracji należy nadać nazwę, uzupełnić ścieżkę do pliku detect_fruits.py
oraz uzupełnić ścieżki do parametrów wejściowych skryptu zgodnie z powyższym opisem oraz ostanim rysunkiem.
Stworzone rozwiązanie należy skompresować do formatu ZIP
, a wyjściowy plik nazwać numerem indeksu (np. 123456.zip). Zadanie to można przykładowo zrealizować w systemach Linux z wykorzystaniem komendy systemowej zip
w terminalu tak, jak to zostało przedstawione poniżej:
zip <NUMER INDEKSU>.zip detect_fruits.py requirements.txt
Skompresowany plik należy wstawić w odpowiednim miejscu na platformie eKursy.
Uwaga: w pliku .zip
powinien znajdować się jedynie bezpośrednio plik detect_fruits.py
oraz opcjonalnie requirements.txt
.
Przesłane rozwiązania zostaną sprawdzone pod kątem plagiatu oraz z wykorzystaniem poniższego wzoru ocenione będzie działanie algorytmu zliczania owoców:
Gdzie:
oznacza liczbę obrazów
oznacza rzeczywistą ilość danego typu owoca
oznacza przewidzianą ilość danego typu owoca
Końcowy zbiór ewaluacyjny, na którym testowany będzie algorytm jest niepubliczny i niedostępny w czasie realizacji projektu. Do dyspozycji studentów w całości dostępny jest zbiór treningowy dostępny w katalogu data.
W celu weryfikacji wyników na zbiorze walidacyjnym uruchomiona została sprawdzarka z której można skorzystać wywołując skrypt check.py
. Sprawdzarka zwraca wynik miary MARPE dla wykorzystanego zbioru lub wyjście z konsoli zawierające wiadomość błędu jaki wystąpił podczas uruchamiania skryptu. Sprawdzarka analzuje jedynie wyniki studentów zapisanych na kurs (w serwisie eKursy), dlatego w skrypcie check.py
należy ustawić swój numer indeksu. Z systemu sprawdzającego każdy student może skorzystać raz na 15 minut.
Projekt będzie oceniany biorąc pod uwagę osiągnięty wynik miary MARPE na zbiorze testowym zgodnie z przyjętymi zakresami (przedziały prawostronnie domknięte):
Wartość metryki MARPE | Ocena |
---|---|
≤ 9 % | 5.0 |
9 - 18 % | 4.5 |
18 - 27 % | 4.0 |
27 - 36 % | 3.5 |
36 - 45 % | 3.0 |
> 45 % | 2.0 |