diff --git a/NGCC/src/ocr/Copie.java b/NGCC/src/ocr/Copie.java index b4ec6ae..583bed6 100644 --- a/NGCC/src/ocr/Copie.java +++ b/NGCC/src/ocr/Copie.java @@ -9,4 +9,14 @@ public class Copie { public Copie(BufferedImage img) { this.base = new ImagesCopie(img); } + + public ImagesCopie getBase() { + return base; + } + + public void setBase(ImagesCopie base) { + this.base = base; + } + + } diff --git a/NGCC/src/ocr/GestionnaireCopies.java b/NGCC/src/ocr/GestionnaireCopies.java index c88977b..6971731 100644 --- a/NGCC/src/ocr/GestionnaireCopies.java +++ b/NGCC/src/ocr/GestionnaireCopies.java @@ -1,5 +1,70 @@ package ocr; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.pdfbox.pdmodel.PDDocument; + + public class GestionnaireCopies { + private List listeCopie; + + private List copies; + + public GestionnaireCopies(String chemin) { + + copies = createImagesCopies(chemin); + listeCopie = new ArrayList(); + + for(BufferedImage i : copies) + { + listeCopie.add(new Copie(i)); + } + } + + public List createImagesCopies(String path){ + + PdfToImage pdfAnalyzer = new PdfToImage(); + File pdfFile; + PDDocument document = null; + //LISTE DES IMAGES + List images = new ArrayList<>(); // stockera les images (resultat) + // CONVERT PAGES TO IMAGES + try { + String pdfFilesDirectory = "C:\\Users\\ph807242\\eclipse-workspace\\PT\\pdf\\"; + // nom du fichier pdf à ouvrir (TODO: changer le chemin) + List files = pdfAnalyzer.listAllFiles(pdfFilesDirectory, ".pdf"); + for (String fname : files) { + pdfFile = new File(fname); + document = PDDocument.load(pdfFile); // charge le fichier pdf cree pour le traiter + images.addAll(pdfAnalyzer.convertPagesToBWJPG(document)); + // appelle la methode qui convertit les pages en images (jpg) noir et blanches + } + } catch (IOException e) { + System.out.println(e); + } + + //LISTE DES IMAGES COMPRENANT L'IMAGE DE LA NOTE ET DU NUM ETUDIANT + + return images; + + } + + public Map createHashMapforCSV(){ + + Map temp = new HashMap<>(); + for(Copie c : listeCopie) + { + temp.put(c.getBase().gethMapImgs().get("NumEtu").getDescription(), c.getBase().gethMapImgs().get("Note").getDescription()); + } + return temp; + + } + } diff --git a/NGCC/src/ocr/ImagesCopie.java b/NGCC/src/ocr/ImagesCopie.java index 1807497..1414cf6 100644 --- a/NGCC/src/ocr/ImagesCopie.java +++ b/NGCC/src/ocr/ImagesCopie.java @@ -21,4 +21,14 @@ public class ImagesCopie { hMapImgs.get(s).applyOcrImg(); } } + + public Map gethMapImgs() { + return hMapImgs; + } + + public void sethMapImgs(Map hMapImgs) { + this.hMapImgs = hMapImgs; + } + + } diff --git a/NGCC/src/ocr/PdfToImage.java b/NGCC/src/ocr/PdfToImage.java new file mode 100644 index 0000000..b80295b --- /dev/null +++ b/NGCC/src/ocr/PdfToImage.java @@ -0,0 +1,101 @@ +package ocr; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.imageio.ImageIO; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.rendering.ImageType; +import org.apache.pdfbox.rendering.PDFRenderer; + +public class PdfToImage { + + public List listAllFiles(String directory, String extension) { + // https://www.mkyong.com/java/java-how-to-list-all-files-in-a-directory/ + List files = new ArrayList(); + try (Stream walk = Files.walk(Paths.get(directory))) { + // voir simplification si necessaire + files = walk.map(x -> x.toString()).filter(f -> f.endsWith(extension)).collect(Collectors.toList()); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return files; + } + + public BufferedImage blackWhiteConvert(BufferedImage image) { + // Convertit une image en image en noir et blanc + // TODO : voir recursivite + int width = image.getWidth(); + int height = image.getHeight(); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + if (image.getRGB(x, y) < 128) { + image.setRGB(x, y, 0); + } else { + image.setRGB(x, y, 255); + } + } + } + return image; + } + + public boolean isBlackWhite(BufferedImage image) { + // verifie si une image est en noir et blanc + // TODO : voir recursivite + int width = image.getWidth(); + int height = image.getHeight(); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + if ((image.getRGB(x, y) != 0) || (image.getRGB(x, y) != 255)) { + return false; + } + } + } + return true; + } + + public ArrayList convertPagesToBWJPG(PDDocument document) { + // convertit chaque page d'un document pdf en image noir et blanc + // retourne une array liste d'images + ArrayList images = new ArrayList(); + PDFRenderer pdfRenderer = new PDFRenderer(document); + try { + int pageCounter = 0; + for (PDPage page : document.getPages()) { + System.out.println("page.getRotation() : " + page.getRotation()); + System.out.println("pageCounter : " + pageCounter); + BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter++, 300, ImageType.BINARY); // BINARY = + // noir et + // blanc + images.add(bim); + System.out.println("Ajout n°" + pageCounter); + } + // document.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return images; + } + + public void saveOnDisk(ArrayList images, String originalFileDir) { + // sauvegarde sur le disque les images + int pageCounter = 0; + try { + for (BufferedImage img : images) { + ImageIO.write(img, "JPEG", new File(originalFileDir + "img_" + pageCounter++ + ".jpg")); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + +} diff --git a/NGCC/src/ocr/Rogneur.java b/NGCC/src/ocr/Rogneur.java index 3063b9a..1826bb2 100644 --- a/NGCC/src/ocr/Rogneur.java +++ b/NGCC/src/ocr/Rogneur.java @@ -10,9 +10,9 @@ public class Rogneur { public static Map createHMapImgs(BufferedImage imgOriginale) { Map temp = new HashMap<>(); - temp.put("NumEtu", rogneurFormatNote(imgOriginale)); - temp.put("Note", rogneurFormatNote(imgOriginale)); - temp.put("FormatNote", rogneurFormatNote(imgOriginale)); + temp.put("NumEtu", rogneurNumEtu(imgOriginale)); + temp.put("Note", rogneurNote(imgOriginale)); + //temp.put("FormatNote", rogneurFormatNote(imgOriginale)); return temp; } @@ -20,18 +20,24 @@ public class Rogneur { // rogne la partie du numEtu public static Img rogneurNumEtu(BufferedImage imgOriginale) { - return imgOriginale.getSubimage(x, y, w, h); + return (new ImgNumEtu(imgOriginale.getSubimage((imgOriginale.getWidth()/4)+4 + , imgOriginale.getHeight()-imgOriginale.getHeight()+115 + , (imgOriginale.getWidth()/4+150)-(imgOriginale.getWidth()/4+4) + , imgOriginale.getHeight()-imgOriginale.getHeight()+146-(imgOriginale.getHeight()-imgOriginale.getHeight()+115) ))); } // rogne la partie de la note public static Img rogneurNote(BufferedImage imgOriginale) { - return imgOriginale.getSubimage(x, y, w, h); + return (new ImgNumEtu(imgOriginale.getSubimage((imgOriginale.getWidth()/4)+4 + , imgOriginale.getHeight()-imgOriginale.getHeight()+160 + , (imgOriginale.getWidth()/4+150)-(imgOriginale.getWidth()/4+4) + , imgOriginale.getHeight()-imgOriginale.getHeight()+200-(imgOriginale.getHeight()-imgOriginale.getHeight()+160) ))); } // rogne la partie du format de la note - public static Img rogneurFormatNote(BufferedImage imgOriginale) + /*public static Img rogneurFormatNote(BufferedImage imgOriginale) { return imgOriginale.getSubimage(x, y, w, h); - } + }*/ }