testing-framework / R / benchmark.r @ 98e1375e
History | View | Annotate | Download (10.6 KB)
1 |
#Hilfsfunktionen |
---|---|
2 |
|
3 |
filter <- function(selektor,wert){ |
4 |
if(selektor){ |
5 |
return(wert) |
6 |
}else{ |
7 |
return(0) |
8 |
} |
9 |
} |
10 |
|
11 |
zusammenfassen <- function(selektoren,werte){ |
12 |
#Punkte der Bibliothek für diese Phase nach Testen |
13 |
phase <- mapply(filter,selektoren,werte) |
14 |
#Summe zurückgeben |
15 |
return(sum(phase)) |
16 |
} |
17 |
|
18 |
zusammenfassenFuerAllePhasen <- function(werte,selektoren){ |
19 |
ret <- lapply(selektoren,zusammenfassen,werte) |
20 |
return(t(ret)) |
21 |
} |
22 |
|
23 |
|
24 |
|
25 |
#Liest die Logdatei zu dem übergebenen Basisnamen ein |
26 |
leseBart <- function(basisname){ |
27 |
bart <- read.csv(file=paste("/home/jonas/Bachelorarbeit/bart2/stat/",basisname,"_log.txt",sep=""),header=F) |
28 |
return(bart) |
29 |
} |
30 |
leseAlvar <- function(basisname){ |
31 |
alvar <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/alvar/2.0.0/alvar-2.0.0-sdk-linux64-gcc44/build/build_gcc44_release/sample/stat/",basisname,"_log.txt",sep=""),header=F) |
32 |
return(alvar) |
33 |
} |
34 |
leseAruco <- function(basisname){ |
35 |
aruco <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/aruco/aruco-1.2.5/stat/",basisname,"_log.txt",sep=""),header=F) |
36 |
return(aruco) |
37 |
} |
38 |
|
39 |
#Funktionen für das Parsen |
40 |
|
41 |
parse <- function(text){ |
42 |
|
43 |
# Extrahiere Zahl (mit Prozentzeichen um die Markerzahlen auszuschließen |
44 |
position <- regexpr("[[:digit:]|[:punct:]]{1,}[[:blank:]]%",text,perl=TRUE) |
45 |
zahl <- regmatches(text,position) |
46 |
# Entferne Prozentzeichen |
47 |
position <- regexpr("[[:digit:]|[:punct:]]{1,}",zahl,perl=TRUE) |
48 |
zahl <- regmatches(zahl,position) |
49 |
|
50 |
if(length(zahl) == 0){ |
51 |
return("-") |
52 |
} |
53 |
|
54 |
#Ausgabeformat (in das Latex-Dokument): Zahl mit genau einer Nachkommastelle |
55 |
zahl <- as.numeric(zahl) |
56 |
|
57 |
return(zahl) |
58 |
} |
59 |
|
60 |
# gewichtungsZeile: Eine Liste, die an den Positionen 1 bis 8 den Wahrheitswert enthält, ob die Prozentzahl berücksichtigt wird und an der Position 9 die Gruppengröße angibt. |
61 |
# benchmarkErgebnisse: Eine Liste, die für alle Auflösungen eine Liste mit den aktuellen Punkten für alle Phasen enthält. |
62 |
parseZeile <- function(stringTabelle,basisname,bezeichnung,gewichtungsZeile){ |
63 |
|
64 |
#print("Parse Zeile:") |
65 |
#print(stringTabelle) |
66 |
#print(basisname) |
67 |
#print(bezeichnung) |
68 |
#print(gewichtungsZeile) |
69 |
|
70 |
# Parsen |
71 |
stringTabelle <- within(stringTabelle,zahlen <- parse(V1)) |
72 |
|
73 |
# Berechne Gewichtungsfaktor (aus den Normierungen) |
74 |
gewichtungsZeile[1:8] <- unlist(as.logical(gewichtungsZeile[1:8])) |
75 |
divisor <- length(Filter(function(x) x,gewichtungsZeile[1:8])) # Anzahl der TRUE |
76 |
divisor <- divisor*as.numeric(gewichtungsZeile[9]) |
77 |
|
78 |
# Teile Werte durch Divisor um die Punkte zu erhalten, die in die Kategorien eingehen |
79 |
if(divisor > 0){ |
80 |
punkte <- sapply(stringTabelle$zahlen,function(x){x/divisor}) |
81 |
}else{ |
82 |
# divisor = 0 bedeutet, dass die Punkte in keine Phase eingehen |
83 |
punkte <- c(0,0,0,0,0,0,0,0,0) |
84 |
} |
85 |
return(punkte[1:9]) |
86 |
} |
87 |
|
88 |
leseUndParseBa <- function(zeile){ |
89 |
# Eingaben umwandeln |
90 |
basisname <- as.character(unlist(zeile[1])) |
91 |
bezeichnung <- as.character(unlist(zeile[2])) |
92 |
gewichtungsZeile <- zeile[3:11] |
93 |
|
94 |
cat("### BART: Lese und verarbeite",bezeichnung,"###\n") |
95 |
# Einlesen |
96 |
stringTabelle <- leseBart(basisname) |
97 |
# Parsen |
98 |
ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile) |
99 |
return(ret) |
100 |
} |
101 |
|
102 |
leseUndParseAl <- function(zeile){ |
103 |
# Eingaben umwandeln |
104 |
basisname <- as.character(unlist(zeile[1])) |
105 |
bezeichnung <- as.character(unlist(zeile[2])) |
106 |
gewichtungsZeile <- zeile[3:11] |
107 |
|
108 |
cat("### ALVAR: Lese und verarbeite",bezeichnung,"###\n") |
109 |
# Einlesen |
110 |
stringTabelle <- leseAlvar(basisname) |
111 |
# Parsen |
112 |
ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile) |
113 |
|
114 |
return(ret) |
115 |
} |
116 |
|
117 |
leseUndParseAr <- function(zeile){ |
118 |
# Eingaben umwandeln |
119 |
basisname <- as.character(unlist(zeile[1])) |
120 |
bezeichnung <- as.character(unlist(zeile[2])) |
121 |
gewichtungsZeile <- zeile[3:11] |
122 |
|
123 |
cat("### ARUCO: Lese und verarbeite",bezeichnung,"###\n") |
124 |
# Einlesen |
125 |
stringTabelle <- leseAruco(basisname) |
126 |
# Parsen |
127 |
ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile) |
128 |
|
129 |
return(ret) |
130 |
} |
131 |
|
132 |
# Wrapperfunktionen um Error wegen leerer Dateien abzufangen |
133 |
leseUndParseBaWrapper <- function(zeile){ |
134 |
ret <- try(leseUndParseBa(zeile)) |
135 |
#Teste ob ein Fehler auftrat (vgl. ?try) |
136 |
if(inherits(ret,"try-error")){ |
137 |
cat(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n")) |
138 |
return(c(0,0,0,0,0,0,0,0,0)) |
139 |
} |
140 |
return(ret) |
141 |
} |
142 |
|
143 |
leseUndParseAlWrapper <- function(zeile){ |
144 |
ret <- try(leseUndParseAl(zeile)) |
145 |
#Teste ob ein Fehler auftrat (vgl. ?try) |
146 |
if(inherits(ret,"try-error")){ |
147 |
cat(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n")) |
148 |
return(c(0,0,0,0,0,0,0,0,0)) |
149 |
} |
150 |
return(ret) |
151 |
} |
152 |
|
153 |
leseUndParseArWrapper <- function(zeile){ |
154 |
ret <- try(leseUndParseAr(zeile)) |
155 |
#Teste ob ein Fehler auftrat (vgl. ?try) |
156 |
if(inherits(ret,"try-error")){ |
157 |
print(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n")) |
158 |
return(c(0,0,0,0,0,0,0,0,0)) |
159 |
} |
160 |
return(ret) |
161 |
} |
162 |
|
163 |
teste <- read.csv(file="/home/jonas/Dokumente/Studium/Bachelorarbeit/evaluation/tests.csv",header=FALSE) |
164 |
print(teste) |
165 |
|
166 |
# Umwandlung in eine Liste von Listen |
167 |
testeL <- split(teste,row(teste)) |
168 |
|
169 |
# ermittle gewichtete Punkte |
170 |
bartPunkte <- data.frame(t(mapply(leseUndParseBaWrapper,testeL))) |
171 |
alvarPunkte <- data.frame(t(mapply(leseUndParseAlWrapper,testeL))) |
172 |
arucoPunkte <- data.frame(t(mapply(leseUndParseArWrapper,testeL))) |
173 |
|
174 |
# Umrechnung in Phasen |
175 |
bartDaten <- lapply(bartPunkte,zusammenfassenFuerAllePhasen,teste[3:10]) |
176 |
alvarDaten <- lapply(alvarPunkte,zusammenfassenFuerAllePhasen,teste[3:10]) |
177 |
arucoDaten <- lapply(arucoPunkte,zusammenfassenFuerAllePhasen,teste[3:10]) |
178 |
|
179 |
# In Frames umwandeln |
180 |
bartDaten <- do.call(rbind,bartDaten) |
181 |
bartDaten <- data.frame(t(bartDaten)) |
182 |
|
183 |
alvarDaten <- do.call(rbind,alvarDaten) |
184 |
alvarDaten <- data.frame(t(alvarDaten)) |
185 |
|
186 |
arucoDaten <- do.call(rbind,arucoDaten) |
187 |
arucoDaten <- data.frame(t(arucoDaten)) |
188 |
|
189 |
# Numerisch machen |
190 |
bartDaten <- lapply(bartDaten,as.numeric) |
191 |
alvarDaten <- lapply(alvarDaten,as.numeric) |
192 |
arucoDaten <- lapply(arucoDaten,as.numeric) |
193 |
|
194 |
# Normalisierung, so dass für jede Phase 0 bis 100 Punkte erreicht werden können |
195 |
divisoren <- c(16.667,33.333,131.667,79.167,119.444,137.778,110.0,171.944) |
196 |
divisorenFrame <- data.frame(divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren) |
197 |
bartDaten <- bartDaten / divisorenFrame * 100 |
198 |
alvarDaten <- alvarDaten / divisorenFrame * 100 |
199 |
arucoDaten <- arucoDaten / divisorenFrame * 100 |
200 |
|
201 |
# Beschriftung ergänzen |
202 |
zeilenBeschriftungen <- c("Graubild","Entstörung","Binarisierung","Segmentierung","Kanten und Eckenerkennung","Kandidatensuche","Normalisierung","Identifikation") |
203 |
bartDaten <- cbind(zeilenBeschriftungen,bartDaten) |
204 |
alvarDaten <- cbind(zeilenBeschriftungen,alvarDaten) |
205 |
arucoDaten <- cbind(zeilenBeschriftungen,arucoDaten) |
206 |
|
207 |
print(bartDaten[c(1,2,3,4),]) |
208 |
print(alvarDaten[c(1,2,3,4),]) |
209 |
print(arucoDaten[c(1,2,3,4),]) |
210 |
|
211 |
# Zusammenführen |
212 |
tabelle1080p <- merge(bartDaten[c(1,2,3,4)],alvarDaten[c(1,2,3,4)],by=c("zeilenBeschriftungen")) |
213 |
tabelle1080p <- merge(tabelle1080p,arucoDaten[c(1,2,3,4)],by=c("zeilenBeschriftungen")) |
214 |
tabelle720p <- merge(bartDaten[c(1,5,6,7)],alvarDaten[c(1,5,6,7)],by=c("zeilenBeschriftungen")) |
215 |
tabelle720p <- merge(tabelle720p,arucoDaten[c(1,5,6,7)],by=c("zeilenBeschriftungen")) |
216 |
tabelle360p <- merge(bartDaten[c(1,8,9,10)],alvarDaten[c(1,8,9,10)],by=c("zeilenBeschriftungen")) |
217 |
tabelle360p <- merge(tabelle360p,arucoDaten[c(1,8,9,10)],by=c("zeilenBeschriftungen")) |
218 |
|
219 |
# Zeilen wieder in die Reihenfolge bringen, in der die Phasen beschrieben wurden |
220 |
positionen <- c(3,2,1,8,6,5,7,4) |
221 |
tabelle1080p <- tabelle1080p[positionen,] |
222 |
tabelle720p <- tabelle720p[positionen,] |
223 |
tabelle360p <- tabelle360p[positionen,] |
224 |
|
225 |
# Umwandlung in Latextabellenobjekte |
226 |
zeilen = nrow(tabelle1080p) |
227 |
#print(zeilen) |
228 |
if(zeilen > 32){ |
229 |
# erste Seiten |
230 |
latex1080p <- xtable::xtable(tabelle1080p[1:32,]) |
231 |
latex720p <- xtable::xtable(tabelle720p[1:32,]) |
232 |
latex360p <- xtable::xtable(tabelle360p[1:32,]) |
233 |
# print(latex1080p) |
234 |
# Ausgabe in die Latexdateien |
235 |
print(latex1080p,file="../text/tabellen/benchm_tabelle1080p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
236 |
print(latex720p,file="../text/tabellen/benchm_tabelle720p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
237 |
print(latex360p,file="../text/tabellen/benchm_tabelle360p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
238 |
|
239 |
# zweite Seiten |
240 |
latex1080p <- xtable::xtable(tabelle1080p[33:zeilen,]) |
241 |
latex720p <- xtable::xtable(tabelle720p[33:zeilen,]) |
242 |
latex360p <- xtable::xtable(tabelle360p[33:zeilen,]) |
243 |
|
244 |
# Ausgabe in die Latexdateien |
245 |
print(latex1080p,file="../text/tabellen/benchm_tabelle1080p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ",")) |
246 |
print(latex720p,file="../text/tabellen/benchm_tabelle720p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ",")) |
247 |
print(latex360p,file="../text/tabellen/benchm_tabelle360p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ",")) |
248 |
|
249 |
} else { |
250 |
latex1080p <- xtable::xtable(tabelle1080p) |
251 |
latex720p <- xtable::xtable(tabelle720p) |
252 |
latex360p <- xtable::xtable(tabelle360p) |
253 |
|
254 |
# Ausgabe in die Latexdateien |
255 |
print(latex1080p,file="../text/tabellen/benchm_tabelle1080p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
256 |
print(latex720p,file="../text/tabellen/benchm_tabelle720p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
257 |
print(latex360p,file="../text/tabellen/benchm_tabelle360p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ",")) |
258 |
|
259 |
} |
260 |
|
261 |
|
262 |
|
263 |
|