Skip to content

Commit

Permalink
mf
Browse files Browse the repository at this point in the history
  • Loading branch information
mam10eks committed Feb 12, 2024
1 parent 50643cf commit d28a90e
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 108 deletions.
26 changes: 0 additions & 26 deletions pupil-submission-page/src/components/Header.vue

This file was deleted.

37 changes: 26 additions & 11 deletions pupil-submission-page/src/components/MainStudentPage.vue
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
<script lang="ts" setup>
import Stepper_1 from "./Stepper_1.vue"
import Stepper_2 from "./Stepper_2.vue"
import Stepper_3 from "./Stepper_3.vue"
import Stepper_4 from "./Stepper_4.vue"
</script>

<!-- eslint-disable vue/valid-v-slot -->
<template>
<v-stepper :items="['Deine Aufgabe', 'Baue Deinen Datensatz', 'Trainiere Deine KI', 'Teste Deine KI']" next-text="Weiter" prev-text="Zur&Uuml;ck">
<v-stepper :items="['Deine Aufgabe', 'Baue Deinen Datensatz', 'Trainiere Deine KI', 'Teste Deine KI']" next-text="Weiter" prev-text="Zur&Uuml;ck" :disabled="stepper_navigation_state" v-model="step">
<template v-slot:item.1><Stepper_1/></template>

<template v-slot:item.2><Stepper_2/></template>
<template v-slot:item.2 :rules="[() => false]" error="tmp"><Stepper_2 :klasse_vorfahrt_strasse="klasse_vorfahrt_strasse" :klasse_vorfahrt_gewaehren="klasse_vorfahrt_gewaehren"/></template>

<template v-slot:item.3><Stepper_3/></template>

Expand All @@ -19,4 +11,27 @@ import Stepper_4 from "./Stepper_4.vue"
</v-stepper>
</template>

<style></style>
<script lang="ts">
import Stepper_1 from "./Stepper_1.vue"
import Stepper_2 from "./Stepper_2.vue"
import Stepper_3 from "./Stepper_3.vue"
import Stepper_4 from "./Stepper_4.vue"
export default {
components: {Stepper_1, Stepper_2, Stepper_3, Stepper_4},
data: () => ({
klasse_vorfahrt_strasse: [],
klasse_vorfahrt_gewaehren: [],
step: '0',
}),
computed: {
stepper_navigation_state() {
if (this.step == '2' && (this.klasse_vorfahrt_strasse.length <= 0 || this.klasse_vorfahrt_gewaehren.length <= 0)) {
return 'next';
}
return false;
}
}
}
</script>
79 changes: 8 additions & 71 deletions pupil-submission-page/src/components/Stepper_2.vue
Original file line number Diff line number Diff line change
@@ -1,83 +1,20 @@
<template>
<p>
Zum Training deiner KI ben&ouml;tigst du einen vorbereiteten Datensatz. Der Beispielbilder der korrekten Klasse, also entweder "Vorfahrtsstra&szlig;e" oder "Vorfahrt gew&auml;hren" zuordnet. Speichere am besten alle bilder, in zwei Ordnern entsprechend Ihrer Klasse und lade sie im folgenden hoch.
Zum Training deiner KI ben&ouml;tigst du einen vorbereiteten Datensatz, der Beispielbilder ihrer korrekten Klasse, also entweder "Vorfahrtsstra&szlig;e" oder "Vorfahrt gew&auml;hren" zuordnet. Speichere am besten alle bilder in zwei Ordnern entsprechend Ihrer Klasse und lade sie im folgenden hoch.
</p>

<v-card color="blue" variant="tonal">
<template v-slot:title>
Klasse: Vorfahrtsstra&szlig;e
</template>
<template v-slot:text>

<v-row><v-col cols="6">
<v-file-input accept="image/png, image/jpeg, image/bmp" placeholder="Bitte f&uuml;ge deine Bildbeispiele f&uuml;r die Klasse Vorfahrtsstra&szlig;e hinzu:" multiple label="Bitte f&uuml;ge deine Bildbeispiele f&uuml;r die Klasse Vorfahrtsstra&szlig;e hinzu:" v-model="klasse_vorfahrt_strasse" block/>
</v-col></v-row>
<v-virtual-scroll height="150" :items="image_rows">
<template v-slot:default="{ item }">
<v-row style="width: 98%">
<v-col :cols="cols" v-for="image in item">
<v-hover v-slot="{ isHovering, props }">
<v-img :src="image.src" v-bind="props">
<v-btn v-if="isHovering" variant="text" icon="mdi-delete">Delete</v-btn>

</v-img>
</v-hover>
</v-col>
</v-row>
</template>


</v-virtual-scroll>
</template>

<v-card-actions>
<v-btn @click="klasse_vorfahrt_strasse=null">Auswahl L&ouml;schen</v-btn>
</v-card-actions>
</v-card>


<v-card flat>
<v-container class="ml-4 mr-4">
<ul>
<li class="text-left">Bevor du beginnen kannst, musst du einen entsprechend gelabelten Datensatz
vorbereitet haben.</li>
<li class="text-left">Alle Bilder deines Teams sollten in zwei Ordnern auf deinem Computer
abgespeichert sein.</li>
<li class="text-left">Öffne die Webseite <a href="https://teachablemachine.withgoogle.com"
target="_blank">https://teachablemachine.withgoogle.com</a></li>
<li class="text-left">Klicke auf „Erste Schritte“</li>
<li class="text-left">Wenn du dein Projekt gerade beginnst, dann klicke auf Bildprojekt, um ein
neues Projekt zu erstellen. Ansonsten öffne ein bestehendes Projekt aus einer Datei. (Wir
erstellen ein Modell mit Standardbildern.)</li>
<li class="text-left">Erlaube der Webseite nicht auf deine Webcam zuzugreifen und lade nur
Bilder hoch, welche du selbst erstellt hast oder welche eine entsprechende Lizenz haben.
(Datenschutz)</li>
</ul>
</v-container>
</v-card>
<upload-images-for-class class_name='Vorfahrtsstra&szlig;e' :available_images='klasse_vorfahrt_strasse'/>
<br>
<upload-images-for-class class_name='Vorfahrt Gew&auml;ren' :available_images='klasse_vorfahrt_gewaehren'/>
</template>


<script lang="ts">
import UploadImagesForClass from '@/components/UploadImagesForClass.vue'
export default {
props: ['klasse_vorfahrt_strasse', 'klasse_vorfahrt_gewaehren'],
data: () => ({
klasse_vorfahrt_strasse: null,
cols: 2
}),
computed: {
image_rows() {
if (!this.klasse_vorfahrt_strasse) {
return []
}
let ret = []
for (let file of this.klasse_vorfahrt_strasse) {
ret.push({'src': URL.createObjectURL(file), 'id': 'tmp'})
}
return [ret];
},
}
components: {UploadImagesForClass},
}
</script>
31 changes: 31 additions & 0 deletions pupil-submission-page/src/components/Stepper_3.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
<template>
<v-card flat>

<v-btn>Trainiere Deine KI</v-btn>

<v-expansion-panels>
<v-expansion-panel title="Erweiterte Einstellungen">
<v-expansion-panel-text>
Epochen: 50

Eine Epoche ist abgeschlossen, wenn jedes Beispiel im Trainingsdatenpool mindestens einmal in das Trainingsmodell eingegeben wurde. Sind deine Epochen beispielsweise auf 50 eingestellt, geht das von dir trainierte Modell den gesamten Trainingsdatenpool 50 Mal durch. Generell gilt, je gr&ouml;&szlig;er diese Zahl ist, desto besser lernt dein Modell, die Daten vorherzusagen.

Wahrscheinlich solltest du diese Zahl &auml;ndern (in den meisten F&auml;llen erh&ouml;hen), bis du mit deinem Modell gute Ergebnisse bei der Vorhersage erzielst.


Batchgr&ouml;&szlig;e: 16

Ein Batch ist ein Satz an Beispielen, die f&uuml;r eine Trainings-Iteration verwendet werden. Wenn du beispielsweise 80 Bilder hast und als Batchgr&ouml;&szlig;e 16 w&auml;hlst, werden die Daten werden in 80/16 = 5 Batches aufgeteilt. Sobald alle f&ouml;nf Batches in das Modell eingegeben wurden, ist genau eine Epoche abgeschlossen.

Diese Zahl musst du vermutlich nicht &auml;ndern, um gute Trainingsergebnisse zu erzielen.


Lernrate: 0.001
&Auml;ndere diese Zahl nur mit gro&szlig;er Vorsicht. Selbst kleine Unterschiede k&ouml;nnen eine gro&szlig;e Auswirkung auf die Lernf&auml;higkeit deines Modells haben.

</v-expansion-panel-text>
</v-expansion-panel>
</v-expansion-panels>





<v-container class="ml-4 mr-4">
<v-img src="@/assets/teachable_machine_screenshot_1.png" aspect-ratio="2.75">
<template v-slot:placeholder>
Expand Down
77 changes: 77 additions & 0 deletions pupil-submission-page/src/components/UploadImagesForClass.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<template>
<v-card color="blue" variant="tonal">
<template v-slot:title>
Klasse: {{class_name}}
</template>
<template v-slot:text>

<v-row><v-col cols="6">
<v-file-input accept="image/png, image/jpeg, image/bmp" placeholder="Bitte f&uuml;ge deine Bildbeispiele f&uuml;r die Klasse {{class_name}} hinzu:" multiple label="Bitte f&uuml;ge deine Bildbeispiele f&uuml;r die Klasse {{class_name}} hinzu:" v-model="to_upload" @change="update_files" block/>
</v-col></v-row>
<v-virtual-scroll height="150" :items="image_rows">
<template v-slot:default="{ item }">
<v-row style="width: 98%">
<v-col :cols="cols" v-for="image in item">
<v-hover v-slot="{ isHovering, props }">
<v-img :src="image.src" v-bind="props">
<v-btn v-if="isHovering" variant="text" icon="mdi-delete">Delete</v-btn>

</v-img>
</v-hover>
</v-col>
</v-row>
</template>


</v-virtual-scroll>
</template>

<v-card-actions>
<v-btn @click="available_images=null">Auswahl L&ouml;schen</v-btn>
</v-card-actions>
</v-card>
</template>

<script lang="ts">
export default {
props: ['class_name', 'available_images'],
data: () => ({
to_upload: null,
cols: 2
}),
computed: {
image_rows() {
if (!this.available_images) {
return []
}
let ret = []
let current_batch = []
for (let file of this.available_images) {
if (current_batch.length < 11) {
current_batch.push(file)
} else {
ret.push(current_batch)
current_batch = [file]
}
}
if (current_batch.length > 0) {
ret.push(current_batch)
}
return ret;
},
},
methods: {
update_files(files) {
for (let file of this.to_upload) {
this.available_images.push({'src': URL.createObjectURL(file), 'file': file})
}
this.to_upload = null
}
}
}
</script>

0 comments on commit d28a90e

Please sign in to comment.