finalisation de ocr ?
This commit is contained in:
parent
2bb467163d
commit
a6e9730355
@ -9,4 +9,14 @@ public class Copie {
|
|||||||
public Copie(BufferedImage img) {
|
public Copie(BufferedImage img) {
|
||||||
this.base = new ImagesCopie(img);
|
this.base = new ImagesCopie(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ImagesCopie getBase() {
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBase(ImagesCopie base) {
|
||||||
|
this.base = base;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,70 @@
|
|||||||
package ocr;
|
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 {
|
public class GestionnaireCopies {
|
||||||
|
|
||||||
|
private List<Copie> listeCopie;
|
||||||
|
|
||||||
|
private List<BufferedImage> copies;
|
||||||
|
|
||||||
|
public GestionnaireCopies(String chemin) {
|
||||||
|
|
||||||
|
copies = createImagesCopies(chemin);
|
||||||
|
listeCopie = new ArrayList<Copie>();
|
||||||
|
|
||||||
|
for(BufferedImage i : copies)
|
||||||
|
{
|
||||||
|
listeCopie.add(new Copie(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<BufferedImage> createImagesCopies(String path){
|
||||||
|
|
||||||
|
PdfToImage pdfAnalyzer = new PdfToImage();
|
||||||
|
File pdfFile;
|
||||||
|
PDDocument document = null;
|
||||||
|
//LISTE DES IMAGES
|
||||||
|
List<BufferedImage> 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<String> 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<String,String> createHashMapforCSV(){
|
||||||
|
|
||||||
|
Map<String,String> temp = new HashMap<>();
|
||||||
|
for(Copie c : listeCopie)
|
||||||
|
{
|
||||||
|
temp.put(c.getBase().gethMapImgs().get("NumEtu").getDescription(), c.getBase().gethMapImgs().get("Note").getDescription());
|
||||||
|
}
|
||||||
|
return temp;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,14 @@ public class ImagesCopie {
|
|||||||
hMapImgs.get(s).applyOcrImg();
|
hMapImgs.get(s).applyOcrImg();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Img> gethMapImgs() {
|
||||||
|
return hMapImgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sethMapImgs(Map<String, Img> hMapImgs) {
|
||||||
|
this.hMapImgs = hMapImgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
101
NGCC/src/ocr/PdfToImage.java
Normal file
101
NGCC/src/ocr/PdfToImage.java
Normal file
@ -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<String> listAllFiles(String directory, String extension) {
|
||||||
|
// https://www.mkyong.com/java/java-how-to-list-all-files-in-a-directory/
|
||||||
|
List<String> files = new ArrayList<String>();
|
||||||
|
try (Stream<Path> 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<BufferedImage> convertPagesToBWJPG(PDDocument document) {
|
||||||
|
// convertit chaque page d'un document pdf en image noir et blanc
|
||||||
|
// retourne une array liste d'images
|
||||||
|
ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
|
||||||
|
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<BufferedImage> 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,9 +10,9 @@ public class Rogneur {
|
|||||||
public static Map<String, Img> createHMapImgs(BufferedImage imgOriginale) {
|
public static Map<String, Img> createHMapImgs(BufferedImage imgOriginale) {
|
||||||
|
|
||||||
Map<String,Img> temp = new HashMap<>();
|
Map<String,Img> temp = new HashMap<>();
|
||||||
temp.put("NumEtu", rogneurFormatNote(imgOriginale));
|
temp.put("NumEtu", rogneurNumEtu(imgOriginale));
|
||||||
temp.put("Note", rogneurFormatNote(imgOriginale));
|
temp.put("Note", rogneurNote(imgOriginale));
|
||||||
temp.put("FormatNote", rogneurFormatNote(imgOriginale));
|
//temp.put("FormatNote", rogneurFormatNote(imgOriginale));
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
@ -20,18 +20,24 @@ public class Rogneur {
|
|||||||
// rogne la partie du numEtu
|
// rogne la partie du numEtu
|
||||||
public static Img rogneurNumEtu(BufferedImage imgOriginale)
|
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
|
// rogne la partie de la note
|
||||||
public static Img rogneurNote(BufferedImage imgOriginale)
|
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
|
// 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);
|
return imgOriginale.getSubimage(x, y, w, h);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user