package dokumenty.test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import pl.wroc.pwr.file.FileComparator; import pl.wroc.pwr.image.IRGBImage; import pl.wroc.pwr.image.io.GenericLoader; import pl.wroc.pwr.image.io.GenericSaver; import pl.wroc.pwr.imagechannel.draw.DrawRectangle; import dokumenty.DetektorGrafikiSzkielet; import dokumenty.Element; public class TesterDetektoraGrafiki { private File folder = new File("C:\\paradowski\\1-finalne\\1"); private DetektorGrafikiSzkielet detektor = new DetektorGrafikiSzkielet(); private File nazwaDefinicji(File plik) { return new File(plik.getPath() + ".expected"); } private List filtruje(List elementy) { List filtr = new ArrayList(); for (Element el : elementy) { if (el.pobierzTyp().equals("Image")) { filtr.add(el); } } return filtr; } private List wczytajPlik(File plik) { List elementy = new ArrayList(); BufferedReader in = null; try { in = new BufferedReader(new FileReader(plik)); String line = null; while ((line = in.readLine()) != null) { Element el = Element.ParsujLinie(line); if (el != null) { elementy.add(el); } } in.close(); } catch (IOException ioe) { if (in != null) { try { in.close(); } catch (Exception e) {}; } return null; } return elementy; } public void narysujZaznaczenie(List oczekiwane, List wygenerowane, IRGBImage obraz, File plik) { for (Element segment : oczekiwane) { int[] box = segment.pobierzPudelko(); String typ = segment.pobierzTyp(); if (typ.equals("Image")) { new DrawRectangle(1.0f, 5).apply(obraz.getRedChannel(), box); new DrawRectangle(0.3f, 5).apply(obraz.getGreenChannel(), box); new DrawRectangle(0.3f, 5).apply(obraz.getBlueChannel(), box); }; } for (Element segment : wygenerowane) { int[] box = segment.pobierzPudelko(); String typ = segment.pobierzTyp(); if (typ.equals("Image")) { new DrawRectangle(0.3f, 3).apply(obraz.getRedChannel(), box); new DrawRectangle(1.0f, 3).apply(obraz.getGreenChannel(), box); new DrawRectangle(0.3f, 3).apply(obraz.getBlueChannel(), box); }; } IRGBImage output = obraz; String nazwa = plik.getName(); new GenericSaver(output, new File("C:\\paradowski\\1-finalne\\res", nazwa)).apply(); } private void uruchom(File plik) { System.out.println("Testuje plik: " + plik.getName()); List oczekiwane = this.wczytajPlik(this.nazwaDefinicji(plik)); if (oczekiwane.size() == 0) { System.out.println("Brak definicji dla pliku. Pomijam."); return; } List filtrowane = this.filtruje(oczekiwane); for (Element el : filtrowane) { System.out.println(" EXP: " + el); } IRGBImage obraz = new GenericLoader(plik).apply(); List wygenerowane = this.detektor.przetworz(obraz, plik); List filtrowaneWg = this.filtruje(wygenerowane); this.narysujZaznaczenie(filtrowane, filtrowaneWg, obraz, plik); for (Element el : filtrowaneWg) { System.out.println(" RES: " + el); } } public void uruchom() { File[] pliki = this.folder.listFiles(); Arrays.sort(pliki, new FileComparator()); for (File plik : pliki) { if (plik.getName().toLowerCase().endsWith(".png")) { this.uruchom(plik); } } } public static void main(String[] args) { TesterDetektoraGrafiki tester = new TesterDetektoraGrafiki(); tester.uruchom(); } }