Incom ist die Kommunikations-Plattform der Technische Hochschule Augsburg Gestaltung

In seiner Funktionalität auf die Lehre in gestalterischen Studiengängen zugeschnitten... Schnittstelle für die moderne Lehre

Intelligenter Kleiderschrank

Dokumentation eines Fancy Schrankes

Ideensammlung

1.Ein elektronischer Helfer der einen benachrichtigt, wenn man vergessen hat die Haustür/das Auto zu zusperren.

  1. 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)

schranki.pngschranki.png

Use Case

Schrank Usecase.pngSchrank Usecase.png

Techliste

Schrank Techliste.pngSchrank Techliste.png

USECASES ÜBERARBEITET

Hier die überarbeiteten Usecases

Einscannen

Schrank Usecase Einscannen.pngSchrank Usecase Einscannen.png

Einlagern

Schrank Usecase Hineinlegen.pngSchrank Usecase Hineinlegen.png

Herausnehmen

Schrank Usecase Herausnehmen.pngSchrank Usecase Herausnehmen.png

Schrank Leer

Schrank Usecase Leer.pngSchrank Usecase Leer.png

Technik Referat

Abgenickt von Tech-nick

Techreferat_rist.pdf PDF Techreferat_rist.pdf

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!

Bild_2023-07-10_143224396.pngBild_2023-07-10_143224396.png
Bild_2023-07-10_143304157.pngBild_2023-07-10_143304157.png
Bild_2023-07-10_144231170.pngBild_2023-07-10_144231170.png

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

Bild_2023-07-10_144334360.pngBild_2023-07-10_144334360.png
Bild_2023-07-10_144351720.pngBild_2023-07-10_144351720.png
Bild_2023-07-10_144458853.pngBild_2023-07-10_144458853.png
Bild_2023-07-10_144934914.pngBild_2023-07-10_144934914.png

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_2023-07-16_104435986.pngBild_2023-07-16_104435986.png
Bild_2023-07-16_104512726.pngBild_2023-07-16_104512726.png
Bild_2023-07-16_104642052.pngBild_2023-07-16_104642052.png
Bild_2023-07-16_104751538.pngBild_2023-07-16_104751538.png

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_2023-07-16_104826065.pngBild_2023-07-16_104826065.png

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 '''

Bild_2023-07-16_104935411.pngBild_2023-07-16_104935411.png
Bild_2023-07-16_105005945.pngBild_2023-07-16_105005945.png

Ein Projekt von

Fachgruppe

Sonstiges

Art des Projekts

Keine Angabe

Zugehöriger Workspace

Physical Computing 2023

Entstehungszeitraum

Sommersemester 2023