Rozpoznawanie banknotów4

This commit is contained in:
Kinga 2020-05-18 15:27:23 +02:00
parent a331604b42
commit 6a26b88d04
4 changed files with 108 additions and 88 deletions

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="76f12f94-8135-4028-8378-41c67cca6cd2" name="Default Changelist" comment="Rozpoznawanie banknotów"> <list default="true" id="76f12f94-8135-4028-8378-41c67cca6cd2" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Kinga/data/examine/20/examine_013.png.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Kinga/main4.py" beforeDir="false" afterPath="$PROJECT_DIR$/Kinga/main4.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Kinga/main4.py" beforeDir="false" afterPath="$PROJECT_DIR$/Kinga/main4.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../rozpoznawanie_banknotów_Kinga_Molik.md" beforeDir="false" afterPath="$PROJECT_DIR$/../rozpoznawanie_banknotów_Kinga_Molik.md" afterDir="false" />
</list> </list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -15,11 +15,11 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/main.py"> <entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323"> <state relative-caret-position="78">
<caret line="506" column="79" selection-start-line="506" selection-start-column="79" selection-end-line="506" selection-end-column="79" /> <caret line="530" column="40" lean-forward="true" selection-start-line="530" selection-start-column="40" selection-end-line="530" selection-end-column="40" />
<folding> <folding>
<element signature="e#0#13#0" expanded="true" /> <element signature="e#0#13#0" expanded="true" />
</folding> </folding>
@ -28,34 +28,10 @@
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Sara/image_classification.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="154">
<caret line="7" selection-start-line="7" selection-end-line="7" />
<folding>
<element signature="e#0#94#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Kinga/main4.py"> <entry file="file://$PROJECT_DIR$/Kinga/main4.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="504"> <state relative-caret-position="242">
<caret line="76" column="14" lean-forward="true" selection-start-line="76" selection-start-column="14" selection-end-line="76" selection-end-column="14" /> <caret line="11" column="23" lean-forward="true" selection-start-line="11" selection-start-column="23" selection-end-line="11" selection-end-column="23" />
<folding>
<element signature="e#0#94#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Kinga/sth.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="625">
<caret line="90" column="62" selection-start-line="90" selection-start-column="62" selection-end-line="90" selection-end-column="62" />
<folding> <folding>
<element signature="e#0#94#0" expanded="true" /> <element signature="e#0#94#0" expanded="true" />
</folding> </folding>
@ -152,7 +128,7 @@
</list> </list>
</option> </option>
</component> </component>
<component name="RunManager" selected="Python.main4 (1)"> <component name="RunManager" selected="Python.main">
<configuration name="image_classification" type="PythonConfigurationType" factoryName="Python" temporary="true"> <configuration name="image_classification" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="Restaurant" /> <module name="Restaurant" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -260,9 +236,9 @@
</configuration> </configuration>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Python.main4 (1)" />
<item itemvalue="Python.sth (1)" />
<item itemvalue="Python.main" /> <item itemvalue="Python.main" />
<item itemvalue="Python.sth (1)" />
<item itemvalue="Python.main4 (1)" />
<item itemvalue="Python.image_classification" /> <item itemvalue="Python.image_classification" />
<item itemvalue="Python.mian7" /> <item itemvalue="Python.mian7" />
</list> </list>
@ -293,7 +269,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1589726457118</updated> <updated>1589726457118</updated>
</task> </task>
<option name="localTasksCounter" value="3" /> <task id="LOCAL-00003" summary="Rozpoznawanie banknotów2">
<created>1589804243313</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1589804243313</updated>
</task>
<option name="localTasksCounter" value="4" />
<servers /> <servers />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
@ -304,13 +287,13 @@
<window_info id="Favorites" order="2" side_tool="true" /> <window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.49925596" weight="0.32719547" /> <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49925596" weight="0.20538244" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.398017" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.398017" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Version Control" order="7" weight="0.21246459" /> <window_info anchor="bottom" id="Version Control" order="7" weight="0.21246459" />
<window_info active="true" anchor="bottom" id="Terminal" order="8" visible="true" weight="0.5141643" /> <window_info active="true" anchor="bottom" id="Terminal" order="8" visible="true" weight="0.49858356" />
<window_info anchor="bottom" id="Event Log" order="9" sideWeight="0.50074404" side_tool="true" weight="0.3289689" /> <window_info anchor="bottom" id="Event Log" order="9" sideWeight="0.50074404" side_tool="true" weight="0.3289689" />
<window_info anchor="bottom" id="Python Console" order="10" /> <window_info anchor="bottom" id="Python Console" order="10" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
@ -331,7 +314,8 @@
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia" /> <MESSAGE value="Dodanie kierunku agenta; rozstawienie stolow; dodanie kuchni; agent nie wchodzi na pola z obiektem stol i kuchnia" />
<MESSAGE value="Rozpoznawanie banknotów" /> <MESSAGE value="Rozpoznawanie banknotów" />
<option name="LAST_COMMIT_MESSAGE" value="Rozpoznawanie banknotów" /> <MESSAGE value="Rozpoznawanie banknotów2" />
<option name="LAST_COMMIT_MESSAGE" value="Rozpoznawanie banknotów2" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$USER_HOME$/Downloads/DSZI_2020_Projekt-master/dszi_2020_projekt/Restaurant/main.py" /> <entry file="file://$USER_HOME$/Downloads/DSZI_2020_Projekt-master/dszi_2020_projekt/Restaurant/main.py" />
@ -452,20 +436,10 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="506" column="79" selection-start-line="506" selection-start-column="79" selection-end-line="506" selection-end-column="79" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Kinga/sth.py"> <entry file="file://$PROJECT_DIR$/Kinga/sth.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="625"> <state relative-caret-position="88">
<caret line="90" column="62" selection-start-line="90" selection-start-column="62" selection-end-line="90" selection-end-column="62" /> <caret line="38" column="27" lean-forward="true" selection-start-line="38" selection-start-column="27" selection-end-line="38" selection-end-column="27" />
<folding> <folding>
<element signature="e#0#94#0" expanded="true" /> <element signature="e#0#94#0" expanded="true" />
</folding> </folding>
@ -474,13 +448,23 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Kinga/main4.py"> <entry file="file://$PROJECT_DIR$/Kinga/main4.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="504"> <state relative-caret-position="242">
<caret line="76" column="14" lean-forward="true" selection-start-line="76" selection-start-column="14" selection-end-line="76" selection-end-column="14" /> <caret line="11" column="23" lean-forward="true" selection-start-line="11" selection-start-column="23" selection-end-line="11" selection-end-column="23" />
<folding> <folding>
<element signature="e#0#94#0" expanded="true" /> <element signature="e#0#94#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="78">
<caret line="530" column="40" lean-forward="true" selection-start-line="530" selection-start-column="40" selection-end-line="530" selection-end-column="40" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component> </component>
</project> </project>

View File

@ -10,7 +10,7 @@ train_data_dir = 'data/train'
examine_data_dir = 'data/examine' examine_data_dir = 'data/examine'
nb_train_samples = 290 nb_train_samples = 290
nb_examine_samples = 80 nb_examine_samples = 80
epochs = 1 epochs = 50
batch_size = 16 batch_size = 16
if K.image_data_format() == 'channels_first': if K.image_data_format() == 'channels_first':
@ -72,7 +72,6 @@ model.fit_generator(
validation_data=examine_generator, validation_data=examine_generator,
validation_steps=nb_examine_samples // batch_size) validation_steps=nb_examine_samples // batch_size)
model.save_weights('model_paymenttttt.h5') model.save_weights('model_payment.h5')
results = model.evaluate(train_generator) results = model.evaluate(train_generator)
print(results) print(results)
print((train_generator.class_indices))

View File

@ -522,10 +522,10 @@ def payment(c):
dish_3 = Dish("obiad 2", 30, 25, 49) dish_3 = Dish("obiad 2", 30, 25, 49)
dish_4 = Dish("obiad 2", 15, 25, 14) dish_4 = Dish("obiad 2", 15, 25, 14)
plate_1 = Plate(dish_1, "Sara/data/validation/food/dirty004.png") plate_1 = Plate(dish_1)
plate_2 = Plate(dish_2, "Sara/data/validation/food/dirty010.png") plate_2 = Plate(dish_2)
plate_3 = Plate(dish_3, "Sara/data/validation/dirty/dirty001.png") plate_3 = Plate(dish_3)
plate_4 = Plate(dish_4, "Sara/data/validation/dirty/dirty009.png") plate_4 = Plate(dish_4)
client_1 = Client(21, 1, 1, 200) client_1 = Client(21, 1, 1, 200)
client_2 = Client(44, 0, 4, 100) client_2 = Client(44, 0, 4, 100)

View File

@ -25,10 +25,14 @@ polskie banknoty oraz różne karty płatnicze. W folderach *train* i
- 50, - 50,
- 100, - 100,
- 200, - 200,
- 500, odpowiadające nominałom polskich banknotów (zdjęć jest - 500
odpowiednio: po 35 i po 10) oraz:
- cards, w których umieszczone zostały zdjęcia kart bankowych (80 oraz Odpowiadające nominałom polskich banknotów (zdjęć jest odpowiednio: po
20). 35 i po 10) oraz:
- cards,
w których umieszczone zostały zdjęcia kart bankowych (80 oraz 20).
Wszystkie zdjęcia są jednego typu (rozszerzenie .png), wszystkie są Wszystkie zdjęcia są jednego typu (rozszerzenie .png), wszystkie są
nasycone kolorami (nie ma zdjęć czarno-białych) oraz moją różne nasycone kolorami (nie ma zdjęć czarno-białych) oraz moją różne
@ -52,7 +56,7 @@ wielkości, co będzie normalizowane w kodzie.
> model.add(Activation('relu')) > model.add(Activation('relu'))
> model.add(MaxPooling2D(pool_size=(2, 2))) > model.add(MaxPooling2D(pool_size=(2, 2)))
> >
> >model.add(Flatten()) > model.add(Flatten())
> model.add(Dense(64)) > model.add(Dense(64))
> model.add(Activation('relu')) > model.add(Activation('relu'))
> model.add(Dropout(0.5)) > model.add(Dropout(0.5))
@ -60,19 +64,22 @@ wielkości, co będzie normalizowane w kodzie.
> model.add(Activation('sigmoid')) > model.add(Activation('sigmoid'))
> ``` > ```
**`Conv2D`** - warstwa do konwulsji obrazu w wiele obrazów - poprzez - **`Conv2D`** - warstwa do konwulsji obrazu w wiele obrazów - poprzez
mnożenie ich przez macierz (2,2) . **`Activation('relu')`** - funkcja mnożenie ich przez macierz (2,2) .
aktywacji (negatywne wyniki są zerowane). **`MaxPooling2D`** - funkcja - **`Activation('relu')`** - funkcja aktywacji (negatywne wyniki są
zmiany rozdzielczości zdjęcia (raz dodana używana jest również przez zerowane).
kolejne warstwy). **`Flatten`** - spłaszcza macierze do wektorów.\ - **`MaxPooling2D`** - funkcja zmiany rozdzielczości zdjęcia (raz
**`Dense(64)`** - używana do łącznia całego modelu (jest ukrytą dodana używana jest również przez kolejne warstwy).
warstwą).\ - **`Flatten`** - spłaszcza macierze do wektorów.\
**`Dropout`** - używana, by uniknąć nadmiernego dopasowania bazy - **`Dense(64)`** - używana do łącznia całego modelu (jest ukrytą
danych.\ warstwą).\
**`Dense(7)`** - warstwa wyjściowa zawierająca 7 neuronów (bo tyle mamy - **`Dropout`** - używana, by uniknąć nadmiernego dopasowania bazy
różnych kategorii) - decyduje o przynależności danego zdjęcia do danych.\
kategorii. **`Activation('sigmoid')`**- normalizuje wartości do - **`Dense(7)`** - warstwa wyjściowa zawierająca 7 neuronów (bo tyle
przedziału [0,1] (ponieważ mamy tu do czynienia z prawdopodobieństwem). mamy różnych kategorii) - decyduje o przynależności danego zdjęcia
do kategorii.
- **`Activation('sigmoid')`**- normalizuje wartości do przedziału
[0,1] (ponieważ mamy tu do czynienia z prawdopodobieństwem).
*Kompilacja modelu* : *Kompilacja modelu* :
@ -87,8 +94,32 @@ funkcję straty **categorical\_crossentropy**, do optymalizacji
wykorzystamy **rmsprop**, a parametr **metrics = ['accuracy']** pomaga wykorzystamy **rmsprop**, a parametr **metrics = ['accuracy']** pomaga
nam sprawdzać dokładność nauki. nam sprawdzać dokładność nauki.
*Generatory danych*: \> *Generatory danych*:
`python > train_datagen = ImageDataGenerator( > rotation_range=45, > width_shift_range=0.3, > height_shift_range=0.3, > rescale=1./256, > shear_range=0.25, > zoom_range=0.1, > horizontal_flip=True) > > examine_datagen = ImageDataGenerator(rescale=1. / 256) > >train_generator = train_datagen.flow_from_directory( > train_data_dir, > target_size=(img_width, img_height), > batch_size=batch_size, > class_mode='categorical') > >examine_generator = examine_datagen.flow_from_directory( > examine_data_dir, > target_size=(img_width, img_height), > batch_size=batch_size, > class_mode='categorical') >`
> ``` {.python}
> train_datagen = ImageDataGenerator(
> rotation_range=45,
> width_shift_range=0.3,
> height_shift_range=0.3,
> rescale=1./256,
> shear_range=0.25,
> zoom_range=0.1,
> horizontal_flip=True)
>
> examine_datagen = ImageDataGenerator(rescale=1. / 256)
>
> train_generator = train_datagen.flow_from_directory(
> train_data_dir,
> target_size=(img_width, img_height),
> batch_size=batch_size,
> class_mode='categorical')
>
> examine_generator = examine_datagen.flow_from_directory(
> examine_data_dir,
> target_size=(img_width, img_height),
> batch_size=batch_size,
> class_mode='categorical')
> ```
**train\_datagen** - generator obrazów z bazy danych uczących. **train\_datagen** - generator obrazów z bazy danych uczących.
**examine\_datagen** - generator obrazów z bazy danych sprawdzających. **examine\_datagen** - generator obrazów z bazy danych sprawdzających.
@ -143,15 +174,21 @@ posiadanej gotówki, a budget=0 oznacza chęć zapłaty kartą.) Agent
powinien rozpoznać jakim banknotem zapłacił klient oraz wydać mu resztę. powinien rozpoznać jakim banknotem zapłacił klient oraz wydać mu resztę.
W przypadku zapłaty kartą, agent oznajmia, że restauracja nie przyjmuje W przypadku zapłaty kartą, agent oznajmia, że restauracja nie przyjmuje
płatności kartą. By to uschematyzować, została dodana funkcja w klasie płatności kartą. By to uschematyzować, została dodana funkcja w klasie
*Client*: \> \`\`\`python \>def pay(self, image):\ *Client*:
\> load = Image.open(image)\
\> load.show() Po podejściu do stolika, agent odczytuje cenę zamówionej > ``` {.python}
przez klienta potrawy, zostaje wywołana funkcja *decide()* (z atrybutami > def pay(self, image):
*client* - dany klient, *image* - zdjęcie z bazy ćwiczeniowej, *dish* - > load = Image.open(image)
potrawa klienta), w której zostaje wyświetlone zdjęcie z płatnością > load.show()
klienta oraz sprawdzamy w niej, do której klasy należy ów zdjęcie. Nasze > ```
sprawdzenie wykonujemy poprzez przesłanie znormalizowanego zdjęcia do
modelu, który wcześniej zainicjowaliśmy. Po podejściu do stolika, agent odczytuje cenę zamówionej przez klienta
potrawy, zostaje wywołana funkcja *decide()* (z atrybutami *client* -
dany klient, *image* - zdjęcie z bazy ćwiczeniowej, *dish* - potrawa
klienta), w której zostaje wyświetlone zdjęcie z płatnością klienta oraz
sprawdzamy w niej, do której klasy należy ów zdjęcie. Nasze sprawdzenie
wykonujemy poprzez przesłanie znormalizowanego zdjęcia do modelu, który
wcześniej zainicjowaliśmy.
> ``` {.python} > ``` {.python}
> def decide(client, image, dish): > def decide(client, image, dish):