-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
655 lines (463 loc) · 41 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Geburtsprognose Präsentation</title>
<meta name="description" content="Bachelor Thesis Presentation">
<meta name="author" content="Dominique Müller">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="dist/reset.css">
<link rel="stylesheet" href="dist/reveal.css">
<link rel="stylesheet" href="dist/theme/black.css" id="theme">
<!-- Styles used to include Bachelor Thesis Presentation -->
<link rel="stylesheet" href="dist/custom.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
<link rel="stylesheet" href="node_modules/@fortawesome/fontawesome-free/css/all.min.css" />
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section data-transition="slide" data-background="#002b36" data-background-transition="zoom">
<aside class="notes">
Ich begrüsse Sie zur Präsentation meiner Bachelor-Thesis. Im Rahmen der Arbeit wurden Geburtsmerkmale von Kühen identifiziert. Anschliessend wurde die Softwarebibliothek OpenCV für die automatische Analyse von Bildern angewendet
</aside>
<img src="images/1result.jpg" alt="Resultat der Bachelor Thesis" style="height: 250px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<h3 class="firstTitle">Automatische Analyse von Kamerabildern zur Prognose des Geburtszeitpunkts von Kälbern</h3>
<p class="startpage small">Präsentation Bachelor Thesis</p>
<div class="divider">
<span class="customCicrle"></span>
</div>
<p class="startpage small">Dominique Müller</p>
</section>
<section data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
Kommen wir zum Inhalt der Präsentation. Nachdem wir die Ausgangslage und Motivation der Arbeit besprochen haben, stelle ich die Ergebnisse der Domänenanalyse vor. Anschliessend wird die entwickelte Lösung vorgestellt und ausgewählte Bereiche der Umsetzung werden fokussiert. Danach werden die Resultate der Arbeit erläutert und abschliessend wir ein Ausblick über den untersuchten Bereich gemacht.
</aside>
<h2>Inhalt</h2>
<ul>
<li>Ausgangslage und Motivation</li>
<li>Domänenanalyse</li>
<li>Lösung</li>
<li>Umsetzung</li>
<li>Resultate</li>
<li>Ausblick</li>
</ul>
</section>
<!-- Example of nested vertical slides -->
<section>
<section>
<aside class="notes">
<ul>
<li>Kritisches Ereignis für Kuh und Kalb</li>
<li>Schwere Geburten: wirtschaftliche Konsequenzen: </li>
<ul>
<li>Kosten für Dienstleistung des Tierarztes</li>
<li>tiefere Milchproduktion, vorzeitige Schlachtung</li>
</ul>
<li>Schwere Geburten beinträchtigen Wohlergehen der Tiere</li>
<ul>
<li>Schmerzvoll</li>
<li>Auslöser für nachfolgende Krankheiten</li>
</ul>
</ul>
################################################# <br>
Die Geburt ist ein kritisches Ereignis für Kuh und Kalb und oftmals Auslöser für nachfolgende Krankheiten.
Schwere Geburten haben wirtschaftliche Konsequenzen in Form von Kosten für die Dienstleistungen des Tierarztes, nicht verkauften Kälbern, tieferer Milchproduktion oder vorzeitiger Schlachtung. Darüber hinaus ist Dystokie schmerzvoll und beeinträchtigt das Wohlergehen der Kühe.
</aside>
<h2>Ausgangslage und Motivation</h2>
<br>
<p>"Schwere" Geburten: wirtschaftliche Konsequenzen und Beinträchtigung des Wohlergehens der Tiere</p>
<br>
<a href="#" class="navigate-down">
<i class="fas fa-arrow-down"></i>
</a>
</section>
<section>
<aside class="notes">
<ul>
<li>Im Bild sieht man, wie der Auftraggeber Geburtsunterstützung leistet.</li>
<li>Mit einer Geburtskette wird gezogen, um die Kuh bei der Geburt zu unterstützen.</li>
<li>Hier setzt das Projekt an! </li>
<li>Prognose des Geburtszeitpunkts unterstützt die Entscheidung, ob und wann menschliche Geburtshilfe angebracht ist.</li>
<li>Optimales Management und Überwachung verringert die Risiken der Geburt.</li>
</ul>
################################################# <br>
Optimales Management und Überwachung der Geburt wirken diesen Risiken entgegen und vermindern die Eintrittswahrscheinlichkeit von Dystokie und Totgeburt. Genau hier setzt das Projekt an: Die Prognose des Geburtszeitpunkts unterstützt die Entscheidung, ob und wann menschliche Geburtshilfe angebracht ist (Unterstützung zB wie im Bild sichtbar). Die Unterstützung beim Abkalben bewirkt eine Verringerung der Kälbersterblichkeit. Die Vorhersage des Geburtszeitpunkts ist daher sowohl für die Wirtschaftlichkeit der Tierhaltung als auch für das Wohlergehen der Tiere von Bedeutung.
</aside>
<h2>Optimales Management</h2>
<br>
<img src="images/2zughilfe.jpg" alt="Zughilfe, unterstützt durch optimale Überwachung" style="height: 350px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
</section>
<section>
<aside class="notes">
<ul>
<li>Aufwand für die Überwachung des Geburtsverlaufs reduzieren</li>
<li>Geburtsrisiken senken</li>
<li>Entscheidungsunterstützung und Vereinfachung der Einleitung von Massnahmen zur Geburtshilfe.</li>
<li>System entwickeln, welches die automatische Analyse von Kamerabildern zur Prognose des Geburtszeitpunkts von Kälbern ermöglicht</li>
<li>Das System arbeitet auf Basis von geometrischen Mustern und visuellen Merkmalen.</li>
<li>Das System arbeitet aus sicherer Entfernung zu den Tieren, sodass es nicht invasiv ist.</li>
<li>Gezielter Benachrichtigungen über den Geburtsverlauf fast in Echtzeit</li>
</ul>
################################################# <br>
Nun gehen wir kurz auf die wichtigsten Ziele der Bachelor-Arbeit ein. Die übergeordneten Ziele ist grundsätzlichz, den Aufwand für die Überwachung des Geburtsverlaufs zu reduzieren und Geburtsrsisiken zu senken. Darüber hinaus soll das entwickelte System als Entscheidungsunterstützung dienen. Es soll auf Basis der Analyse von geometrisches Mustern und visuellen Merkamlen Kamerabilder automatisch analysieren.
</aside>
<h2>Ziele</h2>
<ul>
<li>Aufwand für die Überwachung des Geburtsverlaufs reduzieren</li>
<li>Automatische Analyse von Kamerabildern</li>
<li>Arbeit auf Basis von geometrischen Mustern und visuellen Merkmalen.</li>
<li>Sichere Entfernung zu den Tieren</li>
</ul>
</section>
</section>
<section data-transition="slide" data-background="#002b36" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Tabelle ist integraler Bestandteil des zu entwickeltnden System.</li>
<li> Umsetzung der Merkmale (Kuh liegend usw.) in Daten, die man algorithmisch auswerten kann</li>
<li>Experten haben bewertet, wie stark die Anwesenheit oder Abwesenheit eines Merkmals einen Hinweis für eine Geburt liefert. </li>
<li> Die Spaltengruppen „Anwesenheit“ und „Abwesenheit“ = Rohdaten, welche auf Interviews basieren. Die Spalten der Gruppe „Mittelwert“ entsprechen jeweils dem gewichteten Mittelwert der Rohdaten aus den vorgelagerten Spaltengruppen.</li>
<li> Eine Spalte jeweils die Gewichtung und eine die Bewertung des Hinweises</li>
<li>PAUSE</li>
<li>Ergebnis: Seitenlage und Anwesnheit der Fruchtblasen sind die wichtigsten Geburtsmerkmale--> System muss diese erkennen. </li>
</ul>
################################################# <br>
Zusätzlich wird die Programmiersprache R für die Auswertung der Interviews genutzt. Vorteil: Enge Verzahnung mit Latex.
In der Tabelle wird Domänenwissen von Prof. Dr. med. vet. Samuel Kohler und Dr. med. vet. Gaby Hirsbrunner codiert. Dieses wurde bei Interviews per Videotelefonie erhoben. Beide befragte Personen haben die An- und Abwesenheit von Merkmalen in Bezug auf die Stärke des Hinweises auf eine bevorstehende Geburt bewertet. Die Gruppen „Anwesenheit“ und „Abwesenheit“ repräsentieren dabei die Rohdaten, welche auf der Durchführung von Interviews basieren. Die Spalten der Gruppe „Mittelwert“ entsprechen jeweils dem gewichteten Mittelwert der Rohdaten aus den vorgelagerten Spaltengruppen.
Für die gesammelten Daten zur An- und Abwesenheit von Merkmalen sind je vier Spalten vorhanden. Eine Spalte repräsentiert jeweils die Bewertungen der Tierärzte und eine weitere Spalte entspricht der Gewichtung dieser Bewertung.
Während der Durchführung der Interviews hatten die ExpertInnen die Möglichkeit, weitere Geburtsmerkmale hinzuzufügen und zu bewerten. Deshalb haben nicht beide Veterinäre sämtliche Merkmale bewertet. Falls einer davon die Anwesenheit oder Abwesenheit eines Merkmals nicht bewertet hat, ist dies mit Bewertung = 99 codiert. Diese Bewertung wird dementsprechend nicht gewichtet, also Gewichtung = 0.
Der gewichtete Mittelwert der Bewertung von An- und Abwesenheit dieser Merkmale dient als integraler Bestandteil des zu entwickelnden Systems. Dieses muss das gewonnene Domänenwissen einsetzen, um Kamerabilder mit Abkalbung von Kamerabildern ohne Abkalbung zu unterscheiden.
</aside>
<h2>Domänenanalyse</h2>
<br>
<img src="images/3analysis.jpg" alt="Zentrale Resultate der Domänenanalyse" style="height: 500px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
</section>
<section data-transition="slide" data-background="#002b36" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Darstellung von einigen fachlich interessanten Klassen </li>
<li>"ImageProcessor" verarbeitet Bilder unter Verwendung der OpenCV Bibliothek. Bilder als Matrizen behandelt, zB Multuolikation mit einem Skalar zur Aufhellung. Weiter: Schwellwertverfahren für die Erstellung von Binräbildern oder Histrogramme glätten.</li>
<li>ContourFinder: Sucht abhängig von mitgegebener Konfiguration Konturen in Bild</li>
<li>ContourDrawer: zeichnet diese Konturen in ein Bild win.</li>
<li>TraitRecognitor filtert die gefunden Konturen und hat zum Ziel, zu erkennen, ob sich die Kuh in Seitenlage befindet oder nicht. Ist besonders interessant und wird weiter behandelt. </li>
</ul>
################################################# <br>
UNBEDINGT DARSTELLUNG MIT ZOOM FUNKTION ALT+KLICK <br> <br>
Ich gehe auf eine Auswahl von Klassen ein, welche fachlich interessant sind. <br> <br>
Die Klasse "ImageProcessor" verarbeitet Bilder unter Verwendung der OpenCV Bibliothek. Dabei werden Bilder werden als Matrizen eingelesen, zb und aufgehellt durch Multiplikation mit einem Skalar. Weiter kann der ImageProcessor Schwellwertverfahren mittels der Funktion threshold() oder adaptiveThreshold() durchführen oder das Histogramm eines Bildesmittels clahe() glätten. <br> <br>
Die Klasse "ContourFinder" nimmt eine Konfiguration entgegen und sucht abhängig von der Konfiguration Kontouren in einem Bild. Dabei wird die Funktion findContours() verwendet. <br> <br>
Die Klasse "ContourDrawer" zeichnet ausgehend von einer Konfiguration die Konturen in ein Bild ein, welche com ConntourFinder gefunden wurden. <br> <br>
Die Klasse "TraitRecognitor" filtert die gefunden Konturen und hat zum Ziel, zu erkenen, ob sich die Kuh in Seitenlage befindet oder nicht. Mehr dazu später, da es besonders interessant ist und ein spezifisches Vorgehen angwewendet wurde.<br> <br>
</aside>
<h3>Lösung</h3>
<img src="images/4solution.jpg" alt="Lösung des Pakets ImageAnalysis" style="height:550px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
</section>
<section class="traitRecognitor" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
################################################# <br>
<ul>
<li>Originalbild links, Resultat rechts</li>
<li>grüne Fläche = detektierte Konturen, kein Merkmal für Seitenlage</li>
<li>rote Fläche= Merkmal für Seitenlage</li>
</ul>
<p>Im folgenden zeige ich, wie ich aus dem Originalbild links, das gewünschte Resultat rechts errecht habe.</p>
<p>In den folgenden Abbildungen bedeuten grün eingefärbte Flächen, dass das System Konturen erkannt hat, diese aber nicht als Merkmal für eine Kuh in Seitenlage betrachtet. Rote Flächen bedeuten, dass das System diese Kontur als Merkmal für Seitenlage interpretiert.</p>
</aside>
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2>Übersicht</h2>
</div>
<div class="container">
<div class="col fourtyPercentSize left">
<img src="images/dev/1start.jpg" alt="Originalbild" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Originalbild</p>
</div>
<div class="col twentyPercentSize center">
<div class="fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div>
</div>
<div class="col fourtyPercentSize right">
<img src="images/dev/2resultat.jpg" alt="Resultat Bachelor Thesis" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Resultat</p>
</div>
</div>
</section>
<section class="traitRecognitor" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Unwichtige Konturen erkennen um den wichtigen Bereich einzugrenzen--> zB Lampe</li>
<li> Analyse von Farbwerten </li>
<li>Mit Pipettenwerkzeug eines Bildbearbeitungprogramm Farbwerte augelesen und für lampe einen Farbbereich festlegen</li>
<li>Binärbild mit inRange(): weiss=lampe, Rest schwarz</li>
<li>Wiederholen für Holzträger</li>
<li> Zwischenresultat: Ein Bild mit Lampe = weiss, ein Bild mit Holzträger = weiss</li>
<li>Verknüpfung der Bilder als Matrizen: überall wo in erster oder zweiter Matrix eine 1 im Zielbild eine 1. </li>
<li>Resultat: sämtliche Bereiche weiss, welche Farbwerte der Lampe oder des Holzträgers darstellen</li>
</ul>
################################################# <br>
<p>Um weitere, unwichtige Konturen wie die Lampe zu erkennen, wird ein Verfahren zur Analyse von Farbwerten durchgeführt. Dabei wird in einem ersten Schritt ein Farbbereich für die Lampe definiert. Um einen Richtwert für diesen Farbwert zu erhalten, wird mithilfe eines Bildbearbeitungsprogramms3 ein Farbwert im Bereich der Lampe ausgelesen. Auf Basis dieses Richtwerts wird anschliessend ein Wertebereich für die Farbwerte der zu identifizierenden Lampe festgelegt. Diese Schwellwerte werden der Funktion inRange() von OpenCV zwecks Erstellung eines Binärbilds übergeben. Sämtliche Bereiche mit Farbwerten, die sich zwischen den definierten Schwellwerten befinden, werden im resultierenden Bild weiss dargestellt. Diese entsprechen unwichtigen Bereichen im Bild. Alle anderen Farbewerte sind schwarz. </p>
<p>Dasselbe wird für den Holzträger gemacht. </p>
<p>Durch die Funktion bitwise_or() werden die Bilder so verknüpft, dass im resultierenden Bild sämtliche Bereiche weiss sind, die in einem der beiden oder in beiden Eingangsbildern weiss sind</p>
</aside>
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2>Binärbild</h2>
</div>
<div class="container">
<div class="col fourtyPercentSize left">
<img src="images/dev/1start.jpg" alt="Originalbild" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Originalbild</p>
</div>
<div class="col twentyPercentSize center">
<div class=" fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div> <ol>
<tt><li>inRange() </li></tt>
<tt><li>bitwise_or()</li></tt>
</ol>
</div>
<div class="col fourtyPercentSize right">
<img src="images/dev/5binLampeUndHolz.jpg" alt="Resultat Bachelor Thesis" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Lampe und Holz weiss</p>
</div>
</div>
</section>
<section class="traitRecognitor" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Konturen suchen in vorheriger Abbildung</li>
<li>unwichtige Fläche maximieren und mit schwarzer Farbe füllen</li>
<li>minEnclosingCircle findet Kreise, welche die Kontur mir möglichst geringer Fläche umschliessen</li>
</ul>
################################################# <br>
<p>Ausgehend von vorheriger Abbildung können die als unwichtig identifizierten Bereiche als Konturen erkannt und im Originalbild eingezeichnet werden. Um dies zu erreichen, werden die Funktionen findContours() und drawContours() angewendet. Auf Basis der als unwichtig identifizierten Konturen sind möglichst grosse Flächen aus dem Originalbild zu entfernen, beziehungsweise möglichst grosse Flächen mit schwarzer Farbe zu füllen.</p>
<p> Die Funktion minEnclosingCircle() wird verwendet, um Kreise zu finden, welche Konturen mit möglichst geringer Fläche umschliessen</p>
</aside>
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2 class="unimporantTitle">Unwichtige Bereiche</h2>
</div>
<div class="container">
<div class="col thirdSize left">
<img src="images/dev/5binLampeUndHolz.jpg" alt="Lampe und Holz weiss" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Lampe und Holz weiss</p>
</div>
<div class="col thirdSize center">
<div class="fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div>
<ol>
<tt><li>findContours() </li></tt>
<tt><li>drawContours()</li></tt>
<tt><li>minEnclosingCircle()</li></tt>
</ol>
</div>
<div class="col thirdSize right">
<img src="images/dev/14ContoursAfterThresholding.jpg" alt="Resultat des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Unwichtige Bereiche</p>
</div>
</div>
</section>
<section class="traitRecognitor" class="implementationContainer" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<li> Messung der Winkel der Konturen</li>
<li>Wissen: Lampe ist waagrecht im Raum</li>
<li> Dann werden die Winkel der Konturen um den Winkel der Lampe bereinigt. Das Vorgehen gleicht grundsätzlich dem Prinzip, das Bild solange zu drehen, bis die Lampe waagrecht im Bild ist und erst dann die Winkel zu messen.</li>
<li>Nun werden Winkel zwischen 70 und 110 Grad berücksichtigt, da Beine bei der Seitenlage ca 90 Grad haben </li>
<li>Wertvoll: Merkmal von Bauchlage der Kuh rechts wird gefiltert</li>
<br>
###################################### <br>
<li>boundingRect() bildet Rechtecke, welche die Konturen umschliessen</li>
<li>Für die Messung der Winkel wurde die Funktion fitEllipse() verwendet, welche den Winkel der entsprechenden Ellipse zurückgibt</li>
<li> Dann werden die Winkel der Konturen um den Winkel der Lampe bereinigt. Das Vorgehen gleicht grundsätzlich dem Prinzip, das Bild solange zu drehen, bis die Lampe waagrecht im Bild ist und erst dann die Winkel zu messen.</li>
</aside>
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2>Winkel</h2>
</div>
<div class="container">
<div class="col thirdSize left">
<img src="images/dev/14ContoursAfterThresholding.jpg" alt="Resultat des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Unwichtige Bereiche</p>
</div>
<div class="col thirdSize center">
<div class="fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div>
<ol>
<li class="smallList">Winkel der Lampe messen</li>
<li class="smallList">Winkel der Konturen bereinigen</li>
<li class="smallList">Winkel im Wertebereich <tt>[70°; 110°]</tt></li>
</ol>
</div>
<div class="col thirdSize right">
<img src="images/dev/22AngleCorrectur.jpg" alt="Resultat des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>nach Winkel gefiltertert</p>
</div>
</div>
</section>
<section class="traitRecognitor" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<li>Dabei handelt es sich um das Verhältnis zwischen der Fläche der Kontur und der Fläche des Rechtecks, das die Kontur einschliesst</li>
<li> Erwartung: Fläche der Kontur der Beine gegenüber dem darum gebildeten Rechteck ist klein. </li>
<li>Entsprechend wird als Extent bei Beinen ein tiefer Wert angenommen im Vergleich zum Wert des Extent bei anderen Konturen.</li>
<li>Ergebnis: weiter Konturen können gefiltert werden</li>
######################<br>
<p>Extent= Fläche der Kontur/ Fläche umschliessendes Rechteck</p>
<p>entwickelte Lösung ermöglicht mit der Konstante EXTENT_MAX die Konfiguration eines Schwellwerts, nach welchem Konturen gefiltert werden.</p>
</aside>
<div class="container">
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2>Extent</h2>
</div>
<div class="col fourtyPercentSize left">
<img src="images/dev/22AngleCorrectur.jpg" alt="Ausgangslage des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>nach Winkel gefiltertert</p>
</div>
<div class="col twentyPercentSize center">
<div class="fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div>
<tt> Extent < 0.5 </tt>
</div>
<div class="col fourtyPercentSize right">
<img src="images/dev/24FilteringExtentAngle.jpg" alt="Resultat des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Nach Winkel und Extent gefiltert</p>
</div>
</div>
</section>
<section class="traitRecognitor" data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Aspect Ratio= Verhältnis zwischen Langer Seite und kurzer Seite</li>
<li> wie langgezogen ist ein Rechteck?</li>
<li>Annahme: Rechtecke, welche die Beine der Kuh einschliessen, sind langgezogen.</li>
<li>Ergebnis: Quadrate und Rechtecke mit fast gleich langen Seiten können gefiltert werden.</li>
<li>Hier kurz Resultat besprechen.</li>
<li>Wertvoll: Merkmal von Bauchlage der Kuh rechts wird gefiltert </li>
</ul>
</aside>
<div class="containsTT">
<tt>TraitRecognitor:</tt>
<h2>Aspect Ratio</h2>
</div>
<div class="container">
<div class="col thirdSize left">
<img src="images/dev/24FilteringExtentAngle.jpg" alt="Ausgangslage des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Nach Winkel und Extent gefiltert</p>
</div>
<div class="col thirdSize center">
<div class="fa-container rightArrowContainer">
<i class="fas fa-arrow-right"></i>
</div>
<ol>
<tt>AspectRatio > 1.5</tt>
</ol>
</div>
<div class="col thirdSize right">
<img src="images/dev/30FilteredByExtentAspectAngle.jpg" alt="Resultat des Zwischenscrhritts" style="height: auto; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<p>Nach Winkel, Extent und Aspect Ratio gefiltert</p>
</div>
</div>
</section>
<section data-transition="slide" data-background="#33a02c" data-background-transition="zoom">
<aside class="notes">
<ul>
<li>Korrektes Resultat</li>
<li>Korrektes Resultat</li>
<li>Falsches Resultat</li>
<li>Durch Konfiguration verbessertes Resultat</li>
<p>Wichtigste Konfigurationen</p>
<ol>
<li>Filterung nach Winkel</li>
<li>Weitere Farbwerte für die Funktion inRange() als unwichtige Farbbereiche</li>
<li>Schwellwerte für Aspect Ratio, Extent und Winkel</li>
</ol>
<p>Leere Boxen: Eine Ausnahme stellt ein nicht voller Stall dar. Leere Boxen ermöglichen der kalbernden Kuh, quer in die Box zu liegen (Müller 2020a). Für Kühe, welche neben einer leeren Box liegen, ist also die Filterung der Konturen nach Winkel nicht sinnvoll. Um dieser Situation gerecht zu werden, kann im entwickelten System mittels Konfiguration filterbyAngle=False die Filterung nach Winkel deaktiviert werden.</p>
</ul>
</aside>
<h2>Resultate</h2>
<div class="r-stack">
<img class="fragment" src="images/dev/resultatStanding1.jpg" alt="Resultat des Zwischenscrhritts" style="height: 400px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<img class="fragment" src="images/dev/resultatLying2.jpg" alt="Ausgangslage des Zwischenscrhritts" style="height: 400px; margin: 0 auto 4rem auto; background:transparent;" class="demo-logo">
<img class="fragment" src="images/dev/resultatFehlerhaft.jpg" alt="Ausgangslage des Zwischenscrhritts" style="height: 400px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
<img class="fragment" src="images/dev/resultImprovedConfig.jpg" alt="Ausgangslage des Zwischenscrhritts" style="height: 400px; margin: 0 auto 4rem auto; background: transparent;" class="demo-logo">
</div>
</section>
<section data-auto-animate data-auto-animate-easing="cubic-bezier(0.770, 0.000, 0.175, 1.000)">
<aside class="notes">
<ul><li>Geburtsmerkmale von Kühen identifiziert und bewertet. --> anschliessend in Daten umgesetzt, die man algorithmisch auswerten kann. .</li>
<li>Domänenanalyse: bei Erkennung von seitlichem Liegen und Anwesenheit der Wasser- oder Schleimblase eine Benachrichtigung </li>
<li> umfassendes System modelliert, welches automatische Analyse von Kamerabildern als auch die Benachrichtigung ermöglicht</li>
<li>Kern des modellierten Systems in Code, für automatische Analyse von Kamerabildern (Fokus: Seitenlage)</li>
<li>Anschliessend wurde die Softwarebibliothek OpenCV für die automatische Analyse von Bildern angewendet</li>
</ul>
################################################# <br>
<p> Der Kern der Domänenanalyse war die Identifikation von Geburtsmerkmalen. Im Wesentlichen hat sich ergeben, dass das System bei Erkennung von seitlichem Liegen und Anwesenheit der Wasser- oder Schleimblase eine Benachrichtigung an die Stakeholder auslösen muss.</p>
<p>Dabei wurde ein umfassendes System modelliert, welches sowohl die automatische Analyse von Kamerabildern als auch die Benachrichtigung der Stakeholder ermöglicht. Im Domänenmodell wurde auch weiter gedacht, um die Erfassung von medizinischen Daten/ Krankheitsgeschichten usw. zu ermöglichen</p>
<p>Der Kern des modellierten Systems wurde in Code umgesetzt. Es wurde ein flexibles und konfigurierbares System entwickelt, welches die automatische Analyse von Kamerabildern ermöglicht (Fokus: Seitenlage).</p>
</aside>
<h2>Resultate</h2>
<ul>
<li>Domänenanlyse</li>
<li>Modellierung</li>
<li>Entwicklung</li>
</ul>
</section>
<section data-auto-animate data-auto-animate-easing="cubic-bezier(0.770, 0.000, 0.175, 1.000)">
<aside class="notes">
<ul>
<li>Grundlage für auf ML-basierendes System</li>
<li>Klassifkationsproblem könnte gelöst werden: Kategorien zb "Geburt anstehend" oder "Geburt nicht anstehend"</li>
<li>Das entwickelte System kann Trainingsdaten liefern</li>
<li>jedes Bild mit Tag markieren</li>
<li>Vorstugfe für System mit ML</li>
<li>Diesem Erkennungssystem kann ein Benachrichtigungssystem nachgeschaltet werden, damit Landwirte und TierärztInnen automatisch benachrichtigt werden</li>
</ul>
################################################# <br>
<p>In Bezug auf die Geburtsanalyse können die Resultate der Bildanalyse aus der vorliegenden Arbeit als Grundlage für den Einsatz von Machine Learning verwendet werden. Im Kontext von Machine Learning werden bei einem Klassifikationsproblem die Eingabedaten einer Menge von Klassen oder Kategorien zugeordnet. Im Kontext der vorliegenden Arbeit können Bilder als Eingabedaten den Kategorien „Geburt anstehend“ oder „Geburt nicht anstehend“ zugeordnet werden. </p>
<p>Das entwickelte System kann genau diese Trainingsdaten liefern und jedes Bild aus den Trainingsdaten mit einem oder mehreren „Tags“ markieren. Es kann somit als Vorstufe zu einem auf Machine-Learning-Algorithmen basierenden System im Supervised-Learning-Modus dienen.</p>
<p>Wird diesem Erkennungssystem ein Benachrichtigungssystem nachgeschaltet, können Landwirte und TierärztInnen automatisch benachrichtigt werden.</p>
</aside>
<h2>Ausblick</h2>
<ul>
<li>Vorstufe zu einem auf Machine-Learning-Algorithmen basierenden System </li>
<li>Nachgelagertes Benachrichtigungssystem</li>
</ul>
</section>
<section class="ending" data-transition="slide" data-background="#002b36" data-background-transition="zoom">
<h1>Fragen? </h1>
<br>
<i class="far fa-comments"></i>
<br><br>
<p>Vielen Dank für Ihre Aufmerksamkeit!</p>
</section>
</div>
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/zoom/zoom.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/search/search.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<script>
// Also available as an ES module, see:
// https://revealjs.com/initialization/
Reveal.initialize({
controls: true,
progress: true,
center: true,
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
});
</script>
</body>
</html>