From 7e8227ecc4e26f0b1ffd7b4958260adc5ec78ec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Szuszert?= Date: Thu, 26 May 2022 12:51:36 +0200 Subject: [PATCH] dataset, neural network --- restaurant.xlsx | Bin 18217 -> 13819 bytes tiles.py | 102 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 97 insertions(+), 5 deletions(-) diff --git a/restaurant.xlsx b/restaurant.xlsx index 4cb72c9ac83c0bc712918639dd61d7e6fcf8298e..212a2da0dbb322354af765c6edc5ddd7c4733b33 100644 GIT binary patch literal 13819 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%0A8>*DIF_a_6J9ZP0+o)mU2QYn^w3ZF=E+^8FoP7Z zSHvfqJ}X*aa6<{W_uCBWd5lIdJ8c|G@P_wXS1Z6qswYR3R+s8+AkBM_%7dqm%bPbF z_Nu?x*KXz!nj++Wi+qL5H7j{uyRc6OfvSqn`w@AnP{FPC@P@z}xY6Z?rGplg(eZ$w zyT`PwjmSfnE?k)bPsUzA$(oy{ejoD3<< z1mc()X5Jj!uYuDuanDl6X{a4OzX|W!m~UKN3_JhS4r|zc!Tj*~Y56xivpLtj&sxH! zt#=cb7KmQ4Jm$6}&^M;$@47FOi;cQ!hTG;pgd)Ek*DrVY_+h;2;aMX%lj1&g#ZJn{ zB88!@LlA;GETK>wty3O5pbpq$9`QV6nAsL6-_@=NrM&&s+-e=bA+BDkCN>&sUUW2p4k)9IFzC=sYL_y(8My5_m`YO7#AbOSqx!BL!L*@Zk`;sbrMCAc}W-GD&*k`(^5b0GPwtLgwHW` zmZY=|oV!I6?FMJLDT4o`k8es)upvT-!5b0HO5;cyw>S|+)kEP}=7DA9Q5-4ci34DuRvi8T(2@04U)WMyA<<|a0Al3)`~ zxd|&pvFW?LZT6YV*EF)OdzV?js<(8Iu8a^VS1Or2;KyOqO}9uU)Fn2=lUkxE%eG1c zqZJLYK5EK7)Q)*Nb7Z@KH}THQaf!?}!;?i=a~7ey=6rp;M`*HnCxL>l3p7RM#kD0B zWQn;6<8$;6XkrX04DR~^YFQrBSigU)p_ZDFSv^LVdz7G#lkAZ{MWREp!O5v>SUfU!;&CQB#wM=Zfa+lMas{y{W-cEhwA!odV1e2xgGe$JZ%mC}9ji zhNO*xX4eqv(j;N@9nwH0reQ}%{5pdNcfdL`$ z6bdCEcFfKvroP3ae|WavCLqN)ad>#Ac$hbrG3F~(o+y>8+n_pROt<{dNUbP!x+>kNxo_nKL$Nvtc+|_ZagKwNl9=`$nQigp-j3i zXjW7~wh4%2h9oHOe4pTd!{mXE8^$>7ap})=6|@<~(w0D!PVQ{d zpdmXRr^S+)M@uUyL4RCg@q1U@(m2Rr*kN9hBQZ%dq}p*JyFMuE(-(rpnp;#dmqR-v zXMU}{|3@pE*q^)<9Lcfo%Mn-y_Ln)3+s0ZcZV}o zL9SS4VlIvow75Vbd0e(3H~xoE9JMgu3N14R^XY0+A=te~^CPEB#VLZs`Ml7UzWVep zP;&QDjLv4^F}1pt1J=qgMP!szz#Dq$SmKW*l$?n+O1jsVDa;M=;oER#zRvM;PbgQayd^QCIUyeBax63NA-!ZEk`PFYcHNiI zCRUf#Et0bOG805I^YW-AC7km@+dLyScL{4{YsV6Tg4HEI=sz*jQ#gO|BDa;rFxcbo zI(5e3Jg5swg$lV+(e?2^q@dt4N7%RWzF~5B1~xb(Do?#dSz7%Sl|HoJfEl@6ze_@O zkx{o6OCEom2FudqKtpmiPUx&jiABJn9+Dq$ci4*Le1ahVMUn^OA64~77BhzG(~*lS zOaQby&bcaYo1AILWa6}>GxLmSB?GP9N1$on*-~$G+zOVlZ&=@6!%eRFXp<^!sf@sK;d8 zKHpixWGR;b^%IKn=2)7@)TWqro&ro?XCi2*y!COWOUpKmHEo4+!#0eQrg#r2Z*?uA zF1ViS2v1p4(rnoETMfeK*34z)!K?vbNxOt8x&^x7YU#7 z_rM}o|G~xzX70c|+4rRc^wD&6SNZyefp?#Szj%44nc?!y5$@tBsM*`vA(Kct#icDK}(G1^rIIsG(>IZm#pT`cf_^wRl{Y9H7t& zHUC7VAa?wqo*zzu$03^Ysgy3TD z-Vc>&W_h5AVI;o9h8sF&V&aKzimCtMh(IKF<4iYwn&%)lK}o?6w6jD=rOa?4kmvPnqrO;S zr6obE?ZsGf3&5LVNWyeGVzj$s{?9T}81+UBa0K9;B>fAh5P_x=7`i1&LeyCu z4cR7D)obOzjO80G7bJ$wGqb{Oieg7g#1|{jWr4;Aim8z#;Bky0oas-J{b|Vp1~Kq$sEPFezzkdrHMEBuajqIr z9}lW55W4nT2m^Z7P-s9^7V6Z8>GlagDHLe`#Hcx+AK<*kM>pVE(CYq^&;cFn-6=UW zRgh64`j;}kK&NZrm%s+`LJUWPd;gyl1d0T7ptNKOMuBdRn4Qwn zk9_v4+$D(3gE)=I=YS$N)D#2>NDIIj0Bp1w4iz~D7)soOE?_%x3Y1tIFL)OeVk_fR zpxa%cWrkAkKgD-VA}Kj6Q*k~++~N6Cpa#@PA|}K%;M*@LHo<>Cf4ZEw$|+z90h^ZI z(c@R{0bhMGFw1XebqnxTnweQ5X;>TZmh9iub*B^Z`RN-#oxL=@d$UJlT zQT@O=)Fdu}9Q7L-$Wz~R<_O}bjKkNa&_8D6fHWf~7?uz6+V2u6{(7-L6XL@j9T_oK zinKwQm>4H<;9o$XunbS6hFyjL0T~uQI|;6w}fktGIx5{X_g>f0amJCx<7#_j75x5vjXhV7592aWA* z?7T@l+}{~7@E&c5TIs;12*kppc7iM4g{^++HaI+3-Wr;Yig*_QE+SwP+w5}=HdnE8 z0{o*9J7aCGKT}dt1hNlSXD7KE)f#r^rhOZBz5n-WMJ%_6kT$psB@C{fF#mhC;-5<= z_l!Egg&dZ5s~iKP?))Antzd;8bWJWqYr1y}kII_yDZS#;O+ zi5>H{HKFddyU`b2=bKm+qq-Cu&xiEpCwH_ix%0XjVe=EpvCRinu!r+j8k-EzY!;1;l zU$}F(IF=rd^?1Bg$`a3d?arxq5pU+W6q!Kg+?LhXyr%HVxOU$C#zzJVweMN%4Z_Eh zr@0nre>7|;be2mn5k8;U9FKHz4yD=T_qlM$KAXNFa+51H+BW%y4|kgmT1SWNQ_pjK z*N?mw{h|Sv2a%C-;nFl0ol+-w{ugwa3ttM$0O*_G1{!oP4czxZxH|wU;%yA|euF=5l+nJ4Q`4 zcMf0V_0}_^H&9p2(S5d8Ze8iuEy7fB^7GY)7QP=&5_~UtyGegxy*zc2ar9(L%1PxW zoq4)rXJc)bq>DsD1ARFUl0>SPa$n~z(CEQ4?{kM#zo;FEzC^2adn$>8b?9eOf{?*g z_QyA=nBTkmf6Vn_XXHxl)lMaUHD$Ul2shACKHq6Hl25+aBjr~0Xpa!Tz_faV|LDS= zy^wQbFpBJ5`rYExoU&MbXG)%T&Lc|^-^u0$vmg8le9pSfCPtFN_9;eGSYx8?YQ_nz zQGpR!{$X28(+yN{YOl+u0m(~C+Rcw2h!&k>xuHX^ST1kLAF`k$8k041L(eC0rm~Yn zf={1!FhA2j;=R)8^=$bxt)p5DhoSZzImmtb|8=oDI*xl6xLAdfgoN>ri~U1xIum_c zZ!(sgDa{hOWPjvW~+;a6DAH*L-ac~hZ%-@weys^bH1^GLYfTfL$q{B3;s!D(Sx$<+ZjpI34( z6JlI+b2~@q6=ZIE<;#k$4r)8m3aV@zIgu{Pe`M@A`x6e;ujhoOc(G~BarZehSqCiy zt~$nVp;8Zx#3h&>#XZJj9dkRWshUu#FD`QK$}(HnyN%vds(?+=b@QtfcL#A)ow_iVr^m`KE%JG7NLih$6hE~7_LJw^&!>7{rQ5gNCc;05(KX=?#V)`Nk$QNMvX1snqmg$1rGFIGv~!FjEf)sbrq6( zN6VxXFytD~@2jXF5%{|~dpZC9NxajxV5yffq{-c|Dz4Q~eVOj4CY@4cc4MtVDa9V-KaGFYd?os*f%Z^3tGn&c z&Udj$JyiNT5(hSNUU0G(X+IUqXt!+Nx*l2& z?@n9oApN@e{+cW8+=jKjYpXFi$Fq)ib+8hG*~+oQR@TUuUw#JjaD+SE3VODTvidTD zHeX&OTaug``?eUE!SSxTN&eaLzBrFw^_^~wBQHM&(`L0G_|p__eE7zA@*U;!fCMS$ zY3mMjjH(gRPqK9rGea)OEM+FE;gOztWP=pnvSMhMN!ye`;Td#C(q78T`R#)>NtgO36g&%$;8RHBtz*5T!vyPl-n~83_o}oc< z^vvOwy|7J}zd{d3mQ^5H@D(fNP3*EXpLwF~X5M zVUNxBYA;8;7ZMQlPkF)gTI(6ZjA7bscn|l)IhZI-9(v1VNov-|#j)|?{UYttG@Vx^ zXpuGGzSL=69$4$yFAwF*?p)R3*N?aNtubNw`9S)9DCxsqO@#GT@!3Vk8O_$xr80M$ zOLUjogs1d6G53eZC*g6EeFZXlC-`>rcrV^@tmuAXL~Dn7aFfxu>EkD#v3$*}lH#Qv z>2o65fvzV$p>2OQp4IE}XuW$uK631?>#|p{Y?{u5KfPW2u7KPqpYoLr+Nqu0hTVpx zhUADKQ^}GcFD}M`f$51%`*(iY{6?)z{f{4Job$%9K4#h}O*`ZFV*6^gmXGBf^v`;k!}`E^7W(5ldw!=&9`a3(q#2fNlpKnwCdQZi>tc2Q)OGMV_jYjso^Y|-6zf9dfc_wdHyeCxndx$flleFValq|F;O(Q)wW=~np z*l!MZGIKda=kcK4TzdIqFWKtrn~S3uxM)jFW{K%n3{0}Hpa!eCX6;gLkC$69?$^xV9DmbqLpZ`(~SNQ8}L{?xh88G-z6 zB#V*0MlGuubK#BgL%|#NPXZef(v0yrB{EvhIcZ4oFB3u9_i1=;^bd8;R~yRC3Fn{m z8~&O5?e*-jg#E+isY&$n@GgF4&Y0oV&J*Z?waUxyTZamLx-NT--1Hr>-Zjc-9w&FU z@2M$V{^r=gw@jX-nr`rzhIQo{QlfF2z~T>gZ*?v{_;%LgNX)>UVEd`%LWR1r=5Maa zVF=eSD*G_kx=?oX-Eu@ku6zwP%>7FoQ0l z_}R~sI^ox?N(bBudPtS6`htY2AM;RqcUkyo#2B2=4*TR4A9&p2PT91QVW;coyq7gF z{W2C^{Pm74c~26qxX!YeCJK6n&8EKln*JB)R8K6Vcv44y=e9D;jcp5gI+-jVZ5;X5 z!4RFPlMow!WzLd!B<##(CwzdVJWui2sQZm(B}>?%!oK~&^SQO`nSRs~+~&`=YLgN@ z)0mOL6DW!m|D>G{L+%fq1d>is<+jzh{y=Q(y|sH$D|qQ)YGTFn62t}Cyv-Y5Qr`V+ zBEd(~`C;{SU~*-`2_?0wT^;)eKh3%?Z9(LEmVRa6Ni{ zL42}GC~R;z>(J?Fs^62hqZ%JKqUUw8Z=0@>o;cbhA#`5C@*+ED=1X|4>3LnJXTp^! zs23)!lA8fuvctjqqcJB{yH|CYl*r6A0{C0i1GR1Z*YG``=CYY{p{ut`? z{;NH2|Fs#aM|3@zTTm0`p|5v=} b?0<>>3423bN-F3HI`BIh_}N(o`rH2lgpdm6 literal 18217 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 Wse%qf7YPXm`0)d>cC0+&um2CZ^_DjP diff --git a/tiles.py b/tiles.py index 69ccb7f..49ffaac 100644 --- a/tiles.py +++ b/tiles.py @@ -4,12 +4,20 @@ import numpy as np import pygame import pytmx from queue import Queue -import math import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier import json import openpyxl +import matplotlib.pyplot as plt +import os +import cv2 +from tqdm import tqdm +from keras.models import Sequential +from keras.layers import Dense, Dropout, Activation, Flatten +from keras.layers import Conv2D, MaxPooling2D +import math + pygame.init() @@ -532,8 +540,6 @@ def append_choice(ans, pre, d, df): n_df = pd.DataFrame(data, index=[len(df) + 1]) append_df_to_excel(n_df, "restaurant.xlsx") - - def get_pizza(number): with open("dishes.json") as f: data = json.load(f) @@ -542,6 +548,92 @@ def get_pizza(number): food = Food(i['name'], i['pos_in_card'], i['price'], i['spiciness'], i['vege'], i['size'], i['allergens'], i['ingridients'], i['drink_in']) return food +#network +def create_training_data(): + DATADIR = "Images" + CATEGORIES = ["yes", "no"] + IMG_SIZE = 90 + training_data = [] + for category in CATEGORIES: + path = os.path.join(DATADIR, category) + class_num = CATEGORIES.index(category) # 0 - pepperoni, 1 - no pepperoni + for img in tqdm(os.listdir(path)): + try: + img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE) + new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) + training_data.append([new_array, class_num]) + except Exception as e: + pass + X = [] + y = [] + + for features, label in training_data: + X.append(features) + y.append(label) + + X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1) + y = np.array(y) + + print("Training data created!") + return X,y + +def learn_neural_network(X,y): + X = X/255.0 + + model = Sequential() + + model.add(Conv2D(64, (3, 3), input_shape=X.shape[1:])) + model.add(Activation('relu')) + model.add(MaxPooling2D(pool_size=(2, 2))) + + model.add(Conv2D(64, (3, 3))) + model.add(Activation('relu')) + model.add(MaxPooling2D(pool_size=(2, 2))) + + model.add(Flatten()) + + model.add(Dense(64)) + + model.add(Dense(1)) + model.add(Activation('sigmoid')) + + model.compile(loss='binary_crossentropy', + optimizer='adam', + metrics=['accuracy']) + + model.fit(X, y, batch_size=1, epochs=10, validation_batch_size=0.1) + + return model + +def prepare_img(filepath): + IMG_SIZE = 90 + img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE) + new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) + return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1) / 255 + +def predict(model): + return model.predict([prepare_img('directory')]) + +def reusult(prediction): + if prediction[0][0] >= 0.5: + print(math.ceil(prediction[0][0])) + print('No pepperoni') + elif prediction[0][0] < 0.5: + print(math.floor(prediction[0][0])) + print("Pepperoni") + + + + + + + + + + + + + map = Map() waiter = Waiter([32, 32]) @@ -591,7 +683,7 @@ def main(): chair.render(display) key = pygame.key.get_pressed() left, middle, right = pygame.mouse.get_pressed() - if left: + if middle: waiterGo(mouseToNum()) elif right: while True: @@ -604,7 +696,7 @@ def main(): route = astar(map.get_arr(), (waiter.loc[1] // 32, waiter.loc[0] // 32), goal) direction = [(x[1] - y[1], x[0] - y[0]) for x, y in zip(route[1:], route)] break - elif middle: + elif left: if client.loc[0] in [64, 128, 192, 256, 352, 416, 480, 544]: while True: x = client.loc[1] - 32