From b670f9a1956002e0cd6993992737e0de21cf30f4 Mon Sep 17 00:00:00 2001 From: MarcPartensky Date: Sat, 9 Mar 2019 00:38:22 +0100 Subject: [PATCH] Added neural network related things and other maths stuff --- Image Processing/Vgg-16 Tutoriel.py | 37 ++++++++++++ Image Processing/main.py | 46 +++++++++++++++ Image Processing/simba.png | Bin 0 -> 39588 bytes Info/puissance de 2.py | 14 +++++ Matplotlib Tutorial/matplotlib tutorial.py | 51 +++++++++++++++- Matplotlib Tutorial/matplotlib tutorial2.py | 19 ++++++ Neural Network/NeuralNetwork.py | 8 ++- .../__pycache__/panda.cpython-36.pyc | Bin 0 -> 267 bytes Panda Tutorial/panda.py | 3 + Pyglet/Project 1/Triangle.py | 45 ++++++++++++++ Pyglet/Project 1/Window.py | 21 +++++++ .../__pycache__/Triangle.cpython-36.pyc | Bin 0 -> 1593 bytes Pyglet/Pyglet learning.py | 55 ++++++++++++++++++ Text/classes.py | 1 - test addition.py | 2 + 15 files changed, 295 insertions(+), 7 deletions(-) create mode 100644 Image Processing/Vgg-16 Tutoriel.py create mode 100644 Image Processing/main.py create mode 100644 Image Processing/simba.png create mode 100644 Info/puissance de 2.py create mode 100644 Matplotlib Tutorial/matplotlib tutorial2.py create mode 100644 Panda Tutorial/__pycache__/panda.cpython-36.pyc create mode 100644 Panda Tutorial/panda.py create mode 100644 Pyglet/Project 1/Triangle.py create mode 100644 Pyglet/Project 1/Window.py create mode 100644 Pyglet/Project 1/__pycache__/Triangle.cpython-36.pyc create mode 100644 Pyglet/Pyglet learning.py create mode 100644 test addition.py diff --git a/Image Processing/Vgg-16 Tutoriel.py b/Image Processing/Vgg-16 Tutoriel.py new file mode 100644 index 0000000..646ab64 --- /dev/null +++ b/Image Processing/Vgg-16 Tutoriel.py @@ -0,0 +1,37 @@ +""" +#Vgg-16 architecture +from keras.models import Sequential +from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense + +my_VGG16=Sequential() +my_VGG16.add(Conv2D(64,(3,3),input_shape=(224,224,3),padding="same",activation="relu")) +my_VGG16.add(Conv2D(64,(3,3),padding="same"),activation="relu") +my_VGG16.add(MaxPooling2D(pool_size=(2,2),strides=(2,2))) +my_VGG16.add(Flatten()) +my_VGG16.add(Dense(4096,activation="relu")) +my_VGG16.add(Dense(4096,activation="relu")) +my_VGG16.add(Dense(100,activation="softmax")) + + + +from PIL import Image + +img=Image.open("simba.png") +img.show() +""" + + +import keras + +from keras.preprocessing.image import load_img, img_to_array +from keras.applications.vgg16 import VGG16, preprocess_input,decode_predictions +model=VGG16() + +img=load_img("simba.png",target_size=(224,224)) +img=img_to_array(img) +img=img.reshape((1,img.shape[0],img.shape[0],img.shape[2])) +img=preprocess_input(img) + +y=model.predict(img) + +print("top3:",decode_predictions(y,top=3)[0]) diff --git a/Image Processing/main.py b/Image Processing/main.py new file mode 100644 index 0000000..31fbf57 --- /dev/null +++ b/Image Processing/main.py @@ -0,0 +1,46 @@ +from PIL import Image,ImageFilter +import numpy as np +import matplotlib.pyplot as plt +#import sys + +#print(sys.version) + +Img=Image.open("simba.png") +img=np.array(Img) +Img.show() + +imin,imax=200,255 +img2=[[255*(img[y][x]-imin)/(imax-imin) for x in range(len(img[0]))] for y in range(len(img))] + +noise=np.random.normal(0,7,img.shape) +Img3=Image.fromarray(img+noise).convert("L") +Img3.show() +Img3.filter(ImageFilter.BoxBlur(1)).show() +Img3.show() + +#Img2=Image.fromarray(img2).convert("L") +#Img2.show() + + + +#img2.show() +#img.show() + +#w,h=img.size +#print(w,h) + +#print(img.__dict__) +#print(rimg["im"]) + +#for key,value in rimg.__dict__.items(): + #print(key,":",value) + +#px_value=img.getpixel((20,100)) +#print(px_value) + +#mat=np.array(img) +#print(mat) +#print(mat.shape) + +n,bins,patches=plt.hist(img.flatten(),bins=range(256)) +plt.show() diff --git a/Image Processing/simba.png b/Image Processing/simba.png new file mode 100644 index 0000000000000000000000000000000000000000..de6b0909a60f8cf62bab760203cb41a41b3fc684 GIT binary patch literal 39588 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

^!p2g&)Oi#a9^h)dZRS*b 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 literal 0 HcmV?d00001 diff --git a/Panda Tutorial/panda.py b/Panda Tutorial/panda.py new file mode 100644 index 0000000..9edae0c --- /dev/null +++ b/Panda Tutorial/panda.py @@ -0,0 +1,3 @@ +import pandas as pd +df=pd.read_csv("datasets/diamonds.csv",index_col=0) +df.head() diff --git a/Pyglet/Project 1/Triangle.py b/Pyglet/Project 1/Triangle.py new file mode 100644 index 0000000..ded6fa2 --- /dev/null +++ b/Pyglet/Project 1/Triangle.py @@ -0,0 +1,45 @@ +from pyglet.gl import * + + +class Triangle: + def __init__(self): + self.triangle=[-0.5,-0.5, 0.0, 1.0, 0.0, 0.0, + 0.5,-0.5, 0.0, 0.0, 1.0, 0.0, + 0.0, 0.5, 0.0, 0.0, 0.0, 1.0] + self.vertex_shader_source=""" + #version 330 + in layout(location=0) vec3 position; + in layout(location=1) vec3 color; + + out vec3 newColor; + void main() + { + gl_Position=vec4(position,1.0f) + newColor=color; + } + """ + + self.fragement_shader_source=""" + #version 330 + in vec3 newColor; + out vec4 outColor; + void main() + { + outColor=vec4(newColor,1.0f) + } + """ + + shader=OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(self.vertex_shader_source,GL_VERTEX_SHADER), + OpenGL.GL.shaders.compileShader(self.fragement_shader_source,GL_FRAGMENT_SHADER)) + + glUseProgram(shader) + vbo=GLuint(0) + glGenBuffers(1,vbo) + glBindBuffer(GL_ARRAY_BUFFER,vbo) + glBufferData(GL_ARRAY_BUFFER,72,(GLfloat*len(self.triangles)(*self.triangles),GL_STATIC_DRAW)) + #positions + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,24,ctypes.c_void_p(0)) + glEnableVertexAttribArray(0) + + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,24,ctypes.c_void_p(12)) + glEnableVertexAttribArray(0) diff --git a/Pyglet/Project 1/Window.py b/Pyglet/Project 1/Window.py new file mode 100644 index 0000000..34d3a45 --- /dev/null +++ b/Pyglet/Project 1/Window.py @@ -0,0 +1,21 @@ +from pyglet.gl import * +from Triangle import Triangle + +class Window(pyglet.window.Window): + def __init__(self,*args,**kwargs): + super().__init__(*args,**kwargs) + self.set_minimum_size(400,300) + glClearColor(0,0,1,1) + + self.triangle=Triangle() + + def on_draw(self): + self.clear() + glDrawArrays(GL_TRIANGLES,0,3) + + def on_resize(self,width,height): + glViewport(0,0,width,height) + +if __name__=="__main__": + window=Window(700,600,"My awesome window",resizable=True) + pyglet.app.run() diff --git a/Pyglet/Project 1/__pycache__/Triangle.cpython-36.pyc b/Pyglet/Project 1/__pycache__/Triangle.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..246ec9f5032f3b2579c516ab9caf883532533be4 GIT binary patch literal 1593 zcmXr!<>mUyP#&|9m4V?g0}^0nU|?`yU|=YgVqjoMVMt-jVF+PxXGmd6VQyhaVQyxM zVoYHPX3%7P3DTs=c#Bah8N`BNCYXK^1_p*yhA74qhA5^K#uTO&hA8F~=3oX*mRlSl zMVX0t={c#%j8JVLTZI@H7@R>izXI9JlfnzKGleMyq?->+GlNM+Fv*m{oGw(u5YLdp zQo|6>n8I4a5YJS?oW+vGn#BgC*=rcG7)v;sVd5Y@Qwe7?Q!`U7V+mIcV>2ToLkV{Z zTQg%VQwdKBdks@F6C*`GQUs?h&B`>wy86pRDhC*3>W{N^?VrHI(CR}+noCQ*q zo)aGcwcNHWHQ7W1<`f-6J%coaE|6N7`L<9OfW$z!7H(qI0yq;_5P8ZJ?c_nBPZ2kqQdG0<@Ozu8W><~T0 zQGChyxdoXysR2d#=|zdTQM^!oFxbpn0`5NXVXi?Tt`YIU9*!=qLAQk5ed67M9Nm3g z{X$@3Jn1>1#V{jovAO${X6BXL;z`eOPt9{GO-oBHDhBbKGV@X(+*|zaKJku0L5`8} zPN8mYu0ddFuu7N2lEho=?mlTb`H3aBm~&F|qBvnbF22R*?h_vz;uzxT9Pbk37=BAM zJtqtt2#zHsMVUzf`I&hosYSOqK#uhBcMO5B9DRaaZ?PqpR2HNb-{MG)2PMe(f?Ja5 zIj(t$Nja&=MmQD~C01%O-(o3F%}I-5gM?EQb6HaUN`@jC1_p*-A^M@ksYS*5`8k^uw!OX!}1mgQ?GTq`V0J~i;JqIiV(E$n#2n(e57KaVQHak$dE(ROG3;^Os BqAUOa literal 0 HcmV?d00001 diff --git a/Pyglet/Pyglet learning.py b/Pyglet/Pyglet learning.py new file mode 100644 index 0000000..68f9075 --- /dev/null +++ b/Pyglet/Pyglet learning.py @@ -0,0 +1,55 @@ +from pyglet.gl import * +import pyglet + + + +class Triangle: + def __init__(self): + self.vertices=pyglet.graphics.vertex_list(3,("v3f",[-0.5,-0.5,0.,0.5,-0.5,0.,0.,0.,0.5]), + ("c3B",[100,200,220,200,110,100,100,250,100])) + + +class Quad: + def __init__(self): + self.vertices=pyglet.graphics.vertex_list_indexed(4,[0,1,2,3,0], + ("v3f",[-0.5,-0.5,0.0, 0.5,-0.5,0.0, 0.5,0.5,0.0, -0.5,0.5,0.0]), + ("c3f",[0,1,0, 1,1,0, 1,0,0, 1,0,1])) + +class Quad2: + def __init__(self): + self.indices=[0,1,2,3,0] + self.vertex=[-0.5,-0.5,0.0, 0.5,-0.5,0.0, 0.5,0.5,0.0, -0.5,0.5,0.0] + self.color=[0,1,0, 1,1,0, 1,0,0, 1,0,1] + self.vertices=pyglet.graphics.vertex_list_indexed(4,self.indices,("v3f",self.vertex),("c3f",self.color)) + +class Quad3: + def __init__(self): + self.indices=[0,1,2,3,0] + self.vertex=[-0.5,-0.5,0.0, 0.5,-0.5,0.0, 0.5,0.5,0.0, -0.5,0.5,0.0] + self.color=[0,1,0, 1,1,0, 1,0,0, 1,0,1] + + def render(self): + self.vertices=pyglet.graphics.draw_indexed(4,GL_TRIANGLES,self.indices,("v3f",self.vertex),("c3f",self.color)) + + +class Window(pyglet.window.Window): + def __init__(self,*args,**kwargs): + super().__init__(*args,**kwargs) + self.set_minimum_size(400,300) + color=(255,0,0) + glClearColor(255,0,0,1.0) + self.triangle=Triangle() + self.quad=Quad3() + + def on_draw(self): + self.clear() + #self.triangle.vertices.draw(GL_TRIANGLES) + #self.quad.vertices.draw(GL_QUADS) + self.quad.render() + + def on_resize(self,width,height): + glViewport(0,0,width,height) + +if __name__=="__main__": + window=Window(1280,720,"First Pyglet Window",resizable=True) + pyglet.app.run() diff --git a/Text/classes.py b/Text/classes.py index 04bf868..e50488d 100644 --- a/Text/classes.py +++ b/Text/classes.py @@ -237,7 +237,6 @@ if __name__=="__main__": #print(sentence-"fucking ") #sentence=MutableString(sentence) #print(sentence) - #sentence.append(" enorme test") #print(Str(sentence).title()) #print(list(a)) #print(a.remove("s")) diff --git a/test addition.py b/test addition.py new file mode 100644 index 0000000..84c840b --- /dev/null +++ b/test addition.py @@ -0,0 +1,2 @@ +def __+__(a,b): + return a+b