Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.image.BufferedImage;
- import java.awt.image.MemoryImageSource;
- import java.awt.image.PixelGrabber;
- import java.awt.image.WritableRaster;
- import java.awt.image.ImageObserver;
- import java.io.*;
- import java.net.URL;
- import java.util.*;
- import javax.imageio.ImageIO;
- import javax.imageio.stream.ImageInputStream;
- import javax.swing.*;
- import java.awt.GraphicsConfiguration;
- public class ocr
- {
- public static BufferedImage bimg;
- public static Image img;
- public static Robot rob;
- public static HashMap<int[],String> cmap;
- public static HashMap<String, int[]> analysis;
- public static boolean analyze;
- public static void main(String[] args) throws Exception
- {
- analyze=true;
- cmap = new HashMap<int[], String>();
- try{
- FileInputStream fis = new FileInputStream("crusade.cmap");
- ObjectInputStream ois = new ObjectInputStream(fis);
- analysis = (HashMap<String, int[]>)ois.readObject();
- } catch(Exception e) {
- analysis = new HashMap<String, int[]>();
- }
- for(int x = 0; x < 50;x++)
- {
- File sourceimage = new File("samples/ocr"+x+".jpg");
- bimg = ImageIO.read(sourceimage);
- int[] rgbarray = new int[120*40];
- for(int i = 0; i < 120*40;i++)
- {
- rgbarray[i] = bimg.getRGB(i%120, ((i/120)%40));
- }
- for(int i = 0; i <rgbarray.length;i++)
- {
- int alpha = (rgbarray[i] >> 24) & 0xff;
- int red = (rgbarray[i] >> 16) & 0xff;
- int green = (rgbarray[i] >> 8) & 0xff;
- int blue = (rgbarray[i] ) & 0xff;
- if(blue < 120 && red < 120 && green < 120)
- {
- bimg.setRGB(i%120, ((i/120)%40), 0x00000000);
- //newarray[i] = -99999999;
- } else {
- bimg.setRGB(i%120, ((i/120)%40), 0xFFFFFFFF);
- //newarray[i] = 0xffffffff;
- }
- }
- BufferedImage[] characters = isolatechars();
- for(int i = 1; i < characters.length;i++)
- {
- analyse(characters[i]);
- saveMap("crusade");
- }
- }
- PrintWriter out = new PrintWriter(new File("analysis.txt"));
- for(String key : analysis.keySet())
- {
- for(int i = 0; i < analysis.get(key).length;i++)
- {
- out.print(((analysis.get(key)[i])));
- if(((i%13) == 0) && !(i ==0))
- out.println();
- }
- out.println();
- out.println();
- out.println();
- out.println();
- out.println();
- }
- out.close();
- }
- public static Image getImageFromArray(int[] pixels, int width, int height) {
- MemoryImageSource mis = new MemoryImageSource(width, height, pixels, 0, width);
- Toolkit tk = Toolkit.getDefaultToolkit();
- return tk.createImage(mis);
- }
- public static BufferedImage[] isolatechars() throws Exception
- {
- BufferedImage[] sections = new BufferedImage[7];
- int[] section = new int[13*26];
- for(int x = 1; x < 7;x++)
- {
- //PixelGrabber pg = new PixelGrabber(bimg,0+(16*x+1),8,15,26,false);
- //pg.grabPixels();
- //section = (int[])pg.getPixels();
- //bimg.getSubimage(x, y, w, h)
- if(x==1)
- sections[x] = (BufferedImage)bimg.getSubimage(15,8,13,26);
- else if (x == 2)
- sections[x] = (BufferedImage)bimg.getSubimage(31,8,13,26);
- else if (x == 3)
- sections[x] = (BufferedImage)bimg.getSubimage(47,8,13,26);
- else if (x == 4)
- sections[x] = (BufferedImage)bimg.getSubimage(64,8,13,26);
- else if (x == 5)
- sections[x] = (BufferedImage)bimg.getSubimage(80,8,13,26);
- else if (x == 6)
- sections[x] = (BufferedImage)bimg.getSubimage(95,8,13,26);
- }
- return sections;
- }
- public static String solve(BufferedImage img) throws Exception
- {
- int[] network = new int[13*26];
- float[] probs = new float[analysis.keySet().size()];
- int index = 0;
- int temp = 0;
- String[] keysAtIndex = new String[network.length];
- for(int i = 0; i < 13*26;i++)
- {
- network[i] = img.getRGB(i%13, ((i/13)%26));
- if(network[i] == -16777216)
- {
- network[i] = 1;
- } else {
- network[i] = 0;
- }
- }
- /* see our network...
- PrintWriter out = new PrintWriter(new File("tempanalyse.txt"));
- for(int i = 0; i < network.length;i++)
- {
- out.print(network[i]);
- if(((i%13) == 0) && !(i ==0))
- out.println();
- }
- out.close();
- System.exit(1);
- */
- int numPixelsHit = 0;
- for(int i = 0; i < network.length;i++)
- if(network[i] == 1)
- numPixelsHit++;
- for(String key : analysis.keySet())
- {
- temp = 0;
- for(int x = 0; x < network.length;x++)
- {
- if(network[x] == 1)
- {
- temp += analysis.get(key)[x];
- }
- }
- probs[index] = temp / numPixelsHit;
- keysAtIndex[index] = key;
- index++;
- }
- int highestIndex = 0;
- float highest = 0;
- for(int i = 0; i < probs.length;i++)
- {
- if(probs[i] > highest)
- {
- highestIndex = i;
- highest = probs[i];
- }
- }
- return keysAtIndex[highestIndex];
- }
- public static void analyse(BufferedImage im) throws Exception
- {
- JFrame frame = new JFrame();
- JLabel label = new JLabel(new ImageIcon(im));
- frame.getContentPane().add(label, BorderLayout.CENTER);
- frame.pack();
- frame.setVisible(true);
- System.out.println("best guess: " + solve(im)); // where the magic happens baby
- int[] network = new int[13*26];
- for(int i = 0; i < 13*26;i++)
- {
- network[i] = im.getRGB(i%13, ((i/13)%26));
- if(network[i] == -16777216)
- {
- network[i] = 1;
- } else {
- network[i] = 0;
- }
- }
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String theletter = br.readLine();
- if(!analysis.containsKey(theletter))
- {
- analysis.put(theletter, network);
- }
- else
- {
- addToAnalysis(theletter, network);
- }
- frame.dispose();
- }
- public static void addToAnalysis(String letter, int[] array)
- {
- for(int i = 0; i < analysis.get(letter).length;i++)
- {
- if(array[i] != 0)
- analysis.get(letter)[i]++;
- }
- }
- public static void saveMap(String name) throws Exception
- {
- FileOutputStream fos = new FileOutputStream(name+".cmap");
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(analysis);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement