资源简介
识别数字字母,大家可以试一试,也不是太准确,简单学习测试用途
代码片段和文件信息
package cn.pwntcha;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.io.IOUtils;
public class ImagePreProcess {
public static int isBlack(int colorInt) {
Color color = new Color(colorInt);
if (color.getRed() + color.getGreen() + color.getBlue() <= 100) {
return 1;
}
return 0;
}
public static int isWhite(int colorInt) {
Color color = new Color(colorInt);
if (color.getRed() + color.getGreen() + color.getBlue() > 100) {
return 1;
}
return 0;
}
public static BufferedImage removeBackgroud(String picFile)
throws Exception {
BufferedImage img = ImageIO.read(new File(picFile));
int width = img.getWidth();
int height = img.getHeight();
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
if (isWhite(img.getRGB(x y)) == 1) {
img.setRGB(x y Color.WHITE.getRGB());
} else {
img.setRGB(x y Color.BLACK.getRGB());
}
}
}
return img;
}
public static List splitImage(BufferedImage img)
throws Exception {
List subImgs = new ArrayList();
subImgs.add(img.getSubimage(10 6 8 10));
subImgs.add(img.getSubimage(19 6 8 10));
subImgs.add(img.getSubimage(28 6 8 10));
subImgs.add(img.getSubimage(37 6 8 10));
return subImgs;
}
public static Map loadTrainData() throws Exception {
Map map = new HashMap();
File dir = new File(“train“);
File[] files = dir.listFiles();
for (File file : files) {
map.put(ImageIO.read(file) file.getName().charAt(0) + ““);
}
return map;
}
public static String getSingleCharOcr(BufferedImage img
Map map) {
String result = ““;
int width = img.getWidth();
int height = img.getHeight();
int min = width * height;
for (BufferedImage bi : map.keySet()) {
int count = 0;
Label1: for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
if (isWhite(img.getRGB(x y)) != isWhite(bi.getRGB(x y))) {
count++;
if (count >= min)
break Label1;
}
}
}
if (count < min) {
min = count;
result = map.get(bi);
}
}
return result;
}
public static String getAllOcr(String file) throws Exception {
BufferedImage img = removeBackgroud(file);
List listImg = splitImage(img);
Map map = loadTrainData();
String result = ““;
for (BufferedImage bi :
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 163 2010-08-07 17:32 temp\1235.jpg
文件 156 2010-08-07 17:32 temp\14b7.jpg
文件 161 2010-08-07 17:32 temp\1c64.jpg
文件 170 2010-08-07 17:32 temp\3310.jpg
文件 162 2010-08-07 17:32 temp\37fa.jpg
文件 173 2010-08-07 17:32 temp\3842.jpg
文件 167 2010-08-07 17:32 temp\38f5.jpg
文件 167 2010-08-07 17:32 temp\3d87.jpg
文件 161 2010-08-07 17:32 temp\41f7.jpg
文件 165 2010-08-07 17:32 temp\4c79.jpg
文件 155 2010-08-07 17:32 temp\4f6e.jpg
文件 166 2010-08-07 17:32 temp\5aao.jpg
文件 162 2010-08-07 17:32 temp\5fce.jpg
文件 178 2010-08-07 17:32 temp\7a65.jpg
文件 166 2010-08-07 17:32 temp\7b89.jpg
文件 167 2010-08-07 17:32 temp\86f8.jpg
文件 159 2010-08-07 17:32 temp\93cc.jpg
文件 167 2010-08-07 17:32 temp\b6ee.jpg
文件 161 2010-08-07 17:32 temp\b84a.jpg
文件 159 2010-08-07 17:32 temp\caf3.jpg
文件 169 2010-08-07 17:32 temp\d616.jpg
文件 160 2010-08-07 17:32 temp\fa77.jpg
文件 173 2010-08-07 17:32 temp\o22b.jpg
文件 160 2010-08-07 17:32 temp\ofae.jpg
文件 1183 2010-08-08 23:08 temp3\639ED.jpg
文件 1177 2010-08-08 23:08 temp3\6ABBD.jpg
文件 1178 2010-08-08 23:08 temp3\945E7.jpg
文件 1191 2010-08-08 23:08 temp3\95725.jpg
文件 1186 2010-08-08 23:08 temp3\A85A1.jpg
文件 1176 2010-08-08 23:08 temp3\CBDC7.jpg
............此处省略1102个文件信息
评论
共有 条评论