# Projektēšanas pārskats
## Problēmas nostādne
Pastāv ļoti daudz attēlu atpazīšanas lietotnes, kuras spēj izteikt daudz informācijas no bildes. Lietotnes nosaka bildes informāciju tikai objektos, bet nenosaka objektu specifikāciju. Mums ir vajadzīgs noteikt zivs sugu un iespēju saglabāt informāciju par to, ko nepiedāvā neviena no plaši izmantotām bilžu aptazīšanas lietotnēm.
## Mērķis
Lietotne, kas spēj atpazīt zivs sugu no bildes un saglabāk noķeršanas datus datubāzē ar lokāciju un laiku, kurus vēlāk spēs apskatīties lietotājs.
## Līdzīgi tehniskie risinājumi
### Teorētiskais pamatojums
#### Algoritmu veidi
Datorredze jeb datora spēja atpazīt attēlus un identificēt tos un to detaļas ir vesela apakšzinātne māklīgajam intelektam. Ideoloģija tai vienkāršos vārdos ir tāda, ka tiek padota bilde kā ieejas parametrs mākslīgajam intelektam (bilžū atpazīšanas modelim), kurš novērtēs bildi un sniegs izejas datus kuros būs iedoti prognozes ar precizitātēm par bildi un tās atpazīšanu (piemēram, atpazīt ka bildē redzamais objekts ir zivs ar precizitāti XX procenti). Datorredzei jeb bilžu analīzei pastāv daudz un dažādi algoritmu veidi. Uzskaitīsim dažus no tiem:
**Bag of visual words (BOVW)** - šis algoritms saskaita bildes elementus, kas parādās dokumentā, to biežumu, un izveido biežuma histogrammu.
**K-nearest neighbors (KNN)** - šis algoritms izmanto K-Tuvāko algoritmu, lai identificētu kurai klasifikācijai vistuvāk atrodas padota bilde.
**Speeded Up Robust Features (SURF)**- šī algoritma pamatā ir operatoru aprēķināšana, izmantojot kastes filtrus.
**Scale Invariant Feature Transform (SIFT)** - šis algoritms spēj noteikt un aprakstīt esošās iezīmes attēlos. To neietekmē attēla lielums, orientācija, apgaismojuma svārstības, trokšņi.
**Principal component analysis (PCA)**- šis algoritms pārveido attēlu korelētos datus jaunā mainīgo lielumui vērtībās izmantojot lineārās transformācijas metodi.
**Linear Discriminant Analysis (LDA)** - šis algoritms izmanto dimensiju samazināšanu, kur tas tālāk projektē iezīmes attēla augšējās dimensijas telpās un apakšējās dimensijas telpās, tādējādi samazinot resursus un izmaksas.
**Convolutional Neural Networks (CNNs)** - šis algoritms izmanto režģa topoloģiju lai veiktu attēlu analīzi.
#### Novērtēšanas kritēriju definēšana
| Kritērijs | Apraksts |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Lietošanas ērtums | Tiek vērtēts 10 baļļu sistēmā. Ērtums tiek noteikts balstoties uz to, cik ātri ir tikt pie nepieciešamās darbības un cik kvalitatīva ir šīs nepieciešamās darbības atrādne/implementācija. |
| Noteikšanas ātrums | Sekundes, kurās nosaka zivju paveidu. |
| Mērķa auditorija | Noteikšana, kādiem cilvēkiem šis risinājums ir pielietojams. Piem. (Android telefona īpašnieks ar interneta pieslēgumu un angļu valodas zināšanām) |
| Valodu atbalsts | Pieejamo valodu daudzums |
| Zināšanu bāze | Cik spējīga noteikt zivju specifiskos paveidus |
| Izmaksas | Cik jāmaksā, lai izmantotu šo risinājumu. |
| Atbalstītās valstis | Kurām valstīm šis risinājums ir domāts. |
### Līdzīgie tehniskie risinājumi
#### Pieejamie risinājumi
##### [Fish Identification - Fish Scanner](https://gitlab.vitk.lv/prolab2021/scan-o-fish/blob/master/Documentation/Fish%20Identification%20-%20Fish%20Scanner.md)
##### [FishVerify: Species Identification & Regulations](https://gitlab.vitk.lv/prolab2021/scan-o-fish/blob/master/Documentation/FishVerify:%20Species%20Identification%20&%20Regulations.md)
##### [Picture Fish - Fish Identifier](https://gitlab.vitk.lv/prolab2021/scan-o-fish/blob/master/Documentation/Picture%20Fish%20-%20Fish%20Identifier.md)
##### [What's That Fish](https://gitlab.vitk.lv/prolab2021/scan-o-fish/blob/master/Documentation/What's%20That%20Fish.md)
##### [Fish ID+ Fish Identifier for VIC](https://gitlab.vitk.lv/prolab2021/scan-o-fish/blob/master/Documentation/Fish%20ID+%20Fish%20Identifier%20for%20VIC.md)
#### Pieejamo risinājumu kopsavilkums
##### Mērķa auditorija
| Risinājums | Mērķa audatorija |
| ---------- | ---------------- |
| Fish Identification - Fish Scanner - NatureAI |**Zvejniekiem pasaulē, saistībā ar saldsūdens zivīm** |
|FishVerify: Species Identification & Regulations | Makšķerniekiem, kurus interesē zivis Kanādā, ASV un Austrālijā |
|Picture Fish - Fish Identifier |**Zvejniekiem pasaulē** |
|What’s That Fish | Zvejniekiem Austrālijā |
|Fish ID+ Fish Identifier for VIC | Zvejniekiem Viktorijā, Austrālijā |
Lielākā daļa aplikāciju tika izstrādāta priekš Austrālijas zvejniekiem. Neskatoties uz to, pastāv arī specifiski risinājumi arī ASV un Kanādas iedzīvotājiem, kā arī pastāv risinājumi, kuri veltīti zivju atpazīšanai jebkurā atrašanās vietā.
Visām aplikācijām ir angļu valodas atbalsts un tikai daži risinājumi tiek pasniegti citās valodās.
##### Izmaksas
Visos apskatītajos risinājumos ir iespēja identificēt zivis bez maksas, bet bieži vien zivs identificēšanas rīks ir pieejams ierobežotā daudzumā.
| Risinājums | Izmaksas | Bezmaksas ierobežojumi |
| ---------- | -------- | ---------------------- |
| FishVerify: Species Identification & Regulations | € 40.76 / gadā | Ierobežots identifikācijas rīka daudzums |
| Picture Fish - Fish Identifier | € 21.99 / gadā | Ierobežots identifikācijas rīka daudzums |
| Fish Identification - Fish Scanner - NatureAI | Bezmaksas | - |
| What’s That Fish | Bezmaksas | - |
| Fish ID+ Fish Identifier for VIC | Bezmaksas | - |
##### Lietošanas ērtums

##### Noteikšanas ātrums
Noteikšanas ātrums tika mērīts visiem risinājumiem sekundēs, no brīža, kad apstrādā attēlu līdz rezultāta iegūšanai.

## Tehniskais risinājums
### Prasības
Lietotnei izšķir funkcionālās un citas prasības. Tai ir divas lietotāju grupas:
* lietotājs,
* administrators.
Funkcionālās prasības lietotājam:
* Lietotājs vēlas viedierīcē nobildēt zivi un dabūt no lietotnes nobildētās zivs sugu
* Lietotājs vēlas redzēt sarakstu ar visām savām noķertajām zivīm un to informāciju (Atrašanās vietu, sugu, svaru, garumu)
* Lietotājs vēlas automātiski pieglabāt arī noķertās zivis atrašanās vietu.
* Lietotājs grib kartē redzēt vietas, kur tiek noķertas zivis, kā arī vēlas atfiltrēt noteiktas zivju sugas.
Funkcionālās prasības administratoram:
* Administrators spēj nodzēst atrastās zivis no saraksta, ja noteiktās zivs informācija izskatās aplama
* Administrators spēj filtrēt noķertās zivis pēc lietotāja
* Administrators spēj dzēst lietotājus
* Administratoram ir pieejamas visas lietotāja funkcijas
Citas prasības ir raksturīgas projektēšanas uzdevumam:
* Daudzlietotāju sistēma;
* Dati jāglabā datu bāzē;
* Lietonei jābūt pieejamai kā mobilajai aplikācijai Android vidē;
### Konceptu modelis

Lietotne sastāv no lietotāju grupām, lietotājiem, to lomiem, zivīm un to sugām.
Lietotājs var būt pie lietotāja vai administratora lietotāju grupas.
Visi lietotāji spēj izveidot zivis, nobildējot zivi, iegūstot automātiski noteikto zivs sugu un pieliekot klāt papildus zivs informāciju (garumu, svaru, platumu, pārbaudītu sugu, automātiski noteikto atrašanās vietu). Loms veidojās no vienā dienā noķertajām zivīm un vienas aptuvenās atrašanās vietas.
Lietotāji, kuri ir pie administratora lietotāju grupas spēj pārskatīt visas saglabātās zivis un to lietotājus. Administrators arī spēj dzēst zivis vai lietotājus.
### Tehnoloģiju steks
#### Priekšgalsistēma
| Tehnoloģija | Pielietojums |
| ----------- | ------------ |
| <img src="https://i.imgur.com/A3Kk4X0.png" width=100 /> |Nodrošina aplikācijas interaktivitāti |
|<img src="https://i.imgur.com/6Z0gD7x.png" width=100 /> | Interfeisa vizuālās daļas sastāvdaļa |
|<img src="https://i.imgur.com/imJz9sZ.png" width=200 /> |Mobīlo aplikāciju izstrāde |
#### Aizmugursistēma
| Tehnoloģija | Pielietojums |
| ------------------------------------------------------- | ------------------------------- |
| <img src="https://i.imgur.com/psi2qFS.png" width=100 /> | Aizmugursistēmas pamata ietvars |
| <img src="https://i.imgur.com/FvB4yqd.png" width=100 /> | Datu bāzes integrācija |
|<img src="https://i.imgur.com/jLhZsN1.png" width=200 />| Datu bāze |
#### Zivs klasifikācija
| Tehnoloģija | Pielietojums |
| -------- | -------- |
| <img src="https://i.imgur.com/DWj7NMX.png" width=200 /> | Modeļa izstrāe |
|<img src="https://i.imgur.com/AUX3gGj.png" width=100 />| Modeļa iekļaušana aizmugursistēmā |
## Novērtēšanas plāns
Aplikācijas mērķis ir pēc iespējas precīzāk noteikt zivs sugu pēc tās bildes. Secīgi svarīgākā aplikācijas komponente ir zivs klasifikācija. Zivs klasifikācijas komponentes kvalitāti nosaka vairāki parametri:
1. ***Datu kopas izmērs (N)***
Jo augstāks pasniegto bilžu daudzums sugu atpazīšanas izstrādes modelim, jo precīzāk modelis spēs atpazīt dotās zivs sugu pēc tās pasniegtās bildes.
2. ***Sugu skaits (Ns)***
Jo augstāks pasniegto bilžu daudzums sugu atpazīšanas izstrādes modelim, jo precīzāk modelis spēs atpazīt dotās zivs sugu pēc tās pasniegtās bildes.
3. ***Atpazīšanai pasniegto bilžu kvalitāte (Q)***
Pasniegtās bildes var būt dažādas. Šis bildes var tikt nobildētas vairākos apstākļos: labas/sliktas kvalitātes kamera, gaišs/tumšs apgaismojums, bilde ietver sevī tikai nepieciešamo zivi/bilde ietver sevī zivi un daudz citas nebūtiskas lietas fonā.
Bildes tiks klasificētas trīs kategorijās - **H** - augstas kvalitātes bilde (labs apgaismojums, kvalitatīva bilde ar augstu izšķirtspēju), **M** - vidējas kvalitātes bilde (labs apgaismojums, zema izšķirtspēja vai slikts apgaismojums un augsta izšķirtspēja), **L** - zemas kvalitātes bilde (zems apgaismojums, zema izšķirtspēja).
Klasifikācijas komponentes kvalitāte tiks noteikta pēc sekojošiem parametriem:
1. ***Modeļa izveides laiks (Ta, minūtēs)***
Laiks, kurā tika veiksmīgi uztrennēts aplikācijā izmantojams modelis.
2. ***Atpazīšanas precizitāte (P, %)***
Precizitāte, ar kādu modelis nosaka testa datu kopas bilžu sugas.
3. ***Atpazīšanas ātrums (Tp, sekundēs)***
Ātrums, kurā tiek noteikta bilžu suga.
### Novērtējumi
Lai novērtētu zivju atpazīšanas komponenti, tiks izmantotas 3 zivju sugas, kur katrai ir 3 dažādu kvalitāšu bildes.
**Lasis:**
| N | Ns | Q | Ta | P (%) | Tp (ms) |
|--------|-----|----|-------------|-------|---------|
| 9934 | 117 | H | 12 minūtes | 0 | 501 |
| 9934 | 117 | M | 12 minūtes | 0 | 453 |
| 9934 | 117 | L | 12 minūtes | 0 | 410 |
| 4992 | 117 | H | 6 minūtes | 0 | 454 |
| 4992 | 117 | M | 6 minūtes | 0 | 437 |
| 4992 | 117 | L | 6 minūtes | 0,05 | 383 |
| 860 | 10 | H | 45 sekundes | 5,43 | 564 |
| 860 | 10 | M | 45 sekundes | 0,01 | 422 |
| 860 | 10 | L | 45 sekundes | 65,97 | 428 |
**Zutis:**
| N | Ns | Q | Ta | P (%) | Tp (ms) |
|--------|-----|----|-------------|-------|---------|
| 9934 | 117 | H | 12 minūtes | 7,02 | 406 |
| 9934 | 117 | M | 12 minūtes | 0 | 397 |
| 9934 | 117 | L | 12 minūtes | 3,09 | 392 |
| 4992 | 117 | H | 6 minūtes | 99,84 | 395 |
| 4992 | 117 | M | 6 minūtes | 8,07 | 400 |
| 4992 | 117 | L | 6 minūtes | 85,23 | 382 |
| 860 | 10 | H | 45 sekundes | 0,03 | 383 |
| 860 | 10 | M | 45 sekundes | 2,36 | 405 |
| 860 | 10 | L | 45 sekundes | 0,41 | 374 |
**Rauda:**
| N | Ns | Q | Ta | P (%) | Tp (ms) |
|--------|-----|----|-------------|-------|---------|
| 9934 | 117 | H | 12 minūtes | 99,69 | 724 |
| 9934 | 117 | M | 12 minūtes | 0,05 | 396 |
| 9934 | 117 | L | 12 minūtes | 0 | 379 |
| 4992 | 117 | H | 6 minūtes | 49,14 | 750 |
| 4992 | 117 | M | 6 minūtes | 0,11 | 393 |
| 4992 | 117 | L | 6 minūtes | 0 | 517 |
| 860 | 10 | H | 45 sekundes | 99,99 | 814 |
| 860 | 10 | M | 45 sekundes | 99,05 | 395 |
| 860 | 10 | L | 45 sekundes | 96,19 | 443 |