Ideensammlung
1.Ein elektronischer Helfer der einen benachrichtigt, wenn man vergessen hat die Haustür/das Auto zu zusperren.
- Ein alltäglicher Kleiderschrank soll Elektronisch aufgerüstet und erweitert werden.
In der Grundidee soll dieser Schrank die Funktionen haben:
- Verschiedene Outfits Abzuspeichern
- Klamotten die sich im Inneren befinden zu erkennen(rfid/barcode/user Eingabe)
- Auf einem Bildschirm die derzeit verfügbaren Outfits auszugeben
Mögliche erweiterte Funktionen wären:
- Aufzeigen/Vorschlagen von lange nicht benutzter Kleidung(auf dem Screen o. Farben im Schrank(rot/grün))
- Anzeigen des genauen Standortes(der benötigten Klamotten)

Use Case

Techliste

USECASES ÜBERARBEITET
Hier die überarbeiteten Usecases
Einscannen

Einlagern

Herausnehmen

Schrank Leer

Technik Referat
Abgenickt von Tech-nick
Der Prototyp
Nach langem warten auf die benötigten Kameras konnte ich nun endlich mit dem Programmieren beginnen.
...
Dann fehlte es mir an Kabeln und ich musste mir noch welche bei Herrn Rist ausleihen.
Daraufhin konnte es aber nun endlich an den Aufbau gehen!






Nach 3 Tagen herumprobieren schaffte ich es aber nicht einmal ein eindeutiges Bild zu erfassen.








Deswegen traf ich mich noch einmal mit Herr Rist (eine Woche vor der Endpräsentation!)
Auf die schnelle konnten wir mein Problem aber nicht lösen und ich beschloss Herrn Rist meine Arduino Konstruktion zum Testen mitzugeben. Dadurch hatte ich nun nichts zum Vorzeigen für den Endprototypen….
Daher habe ich mich noch daran versucht ein neuronales Netz zu programmieren.
Benutzt habe ich dafür Anaconda, da man dort den Code in Zellen ablaufen lassen kann - das hilft sehr beim troubleshooting.
Eine gute Hilfe waren die Folien von Herrn Kipp: https://michaelkipp.de/deeplearning/Feedforward-Netze.html
Code
Training des Modells
from tensorflow.keras.datasets import fashion_mnist import numpy as np from tensorflow.keras.utils import to_categorical
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
print('x_train: ', x_train.shape)
print('y_train: ', y_train.shape)
print('x_test: ', x_test.shape)
print('y_test: ', y_test.shape)
x_train = x_train.reshape(60000, 784)/255.0 #dimensionen/Vektoren verringern
x_test = x_test.reshape(10000, 784)/255.0
y_train_1hot = to_categorical(y_train, 10) #Aufteilung in die 10 Kleidungskategoren
y_test_1hot = to_categorical(y_test, 10)
print(„x_train: “, x_train.shape)
print(„y_train: “, y_train_1hot.shape) print(„x_test: “, x_test.shape) print(„y_test: “, y_test_1hot.shape) #pixel der bilder wurden bisher in eine reihe/einen vektor gepackt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Input #dense layer - node aus einem layer mit allen aus dem naechsten verbunden
'''dense layer - node aus einem layer mit allen aus dem naechsten verbunden
dense layer sind die, die hier am besten trainieren - andere layer moeglich
conv2d filter machts iwie besser
flatten macht vektoren aus conv2d matrizen --hat nicht so funktioniert'''
model = Sequential() #Sequential Objekt erstellt
model.add(Dense(60,
input_shape = (784,),
activation = „sigmoid“)) #anzahl der nodes im dense, inputvektor(quasi), sigmoid funktion fuer schoenere werte
model.add(Dense(20,
activation = „sigmoid“)) #inputvektoren schon bekannt(200)
model.add(Dense(10,
activation = „softmax“)) #Anzahl der Nodes muss die anzahl der Endoutputs sein,Normalisiert Werte auf insgesamt 1 (zb 0.7, 0.1, 0.2)
model.summary()
from tensorflow.keras.optimizers import SGD
opt = SGD(learning_rate = 0.1) #Lernrate - anpassung der Gewichtung/Einpendelung -> beste ergebnisse model.compile(optimizer = opt, loss=„categorical_crossentropy“,
metrics=[„acc“]) #ausgabe wie es verlaufen ist
history = model.fit(x_train, y_train_1hot, epochs = 20, batch_size = 32,
verbose = 1,
validation_data = (x_test, y_test_1hot)) #actual training(trainingsdaten, anzahl der durchlaeufe, inputs(alle train),schoenere anzeige ->mehr info)
import matplotlib.pyplot as plt #library fuer graphische darstellung - Macht hin und wieder probleme auf Windows, Funktioniert auf Linux
def set_subplot(ax, y_label, traindata, testdata, ylim):
e_range = range(1, len(traindata) + 1) ax.plot(e_range, traindata, 'b', label='Training')
ax.plot(e_range, testdata, 'g', label='Test') ax.set_xlabel('Epochen')
ax.set_ylabel(y_label)
ax.legend()
ax.grid()
ax.set_ylim(ylim) ax.set_title(y_label) fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(15,4)) set_subplot(ax[0], 'Loss', history.history['loss'],
history.history['val_loss'], [0, 1]) set_subplot(ax[1], 'Accuracy', history.history['acc'],
history.history['val_acc'], [0.8, 1])#hohe accuracy gut, niedriger loss gut
plt.show()
model.save(„C:\\Users\\maxif\\Documents\\ProjektdatenFashionMNIST\\FischModell.keras“)
#Trainiertes Netz wird nun abgespeichert, Pathing muss natürlich angepasst werden








Bild Anzeigen lassen(hier test[0])
from tensorflow.keras.datasets import fashion_mnist
import matplotlib.pyplot as plt
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
plt.imshow(x_test[0], cmap='gray') #anzeigen lassen

BIld Testen(hier Test[0])
from tensorflow.keras.datasets import fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
from tensorflow.keras.models import load_model, Sequential
model = load_model(„C:\\Users\\maxif\\Documents\\ProjektdatenFashionMNIST\\FischModell.keras“)
#Hier muss man den richtigen Path zum Model angeben
import numpy as np
x_test = x_test.reshape(10000, 784)/255.0 #dimensionen/Vektoren anpassen
sample = np.reshape(x_test[0], (1, 784))
model.predict(sample)
#in der vorausgehenden ausgabe sieht man, dass x_test mit hoechster Wahrscheinlichkeit die 9te Klasse ist (nummerierung des Arrays von 0-9)
print(„Klasse“,y_test[0])
#hier gibt y_test die tatsächliche Klasse aus
'''Die 10 Klassen sind wie folgt kodiert:
0 = T-shirt/top
1 = Trouser
2 = Pullover
3 = Dress
4 = Coat
5 = Sandal
6 = Shirt
7 = Sneaker
8 = Bag
9 = Ankle boot '''



