java 配置ocr 本地环境测通后,上传服务器总是返回Errors accessing files.There may be spaces in your i
大家好,我使用的是java技术,最近在配ocr图文识别,本地环境已经测试通过,可以成功的识别出图片内容,但是部署至服务器后总是返回Errors accessing files.There may be spaces in your image's filename.我详细查了代码,并没有哪里是存在空格的,而且将线上和线下环境配置的相同的图片地址、也同样是返回Errors accessing files.There may be spaces in your image's filename. 很郁闷,找不到原因。
ocr所需的环境及ocr的语言包都已经配置,不知问题所在,只能过来问问路过的大牛们了,大牛们快帮帮忙吧。。。。。。万分感谢!!!!
ocr识别代码如下:
public class OCR {
private final String LANG_OPTION = "-l"; //英文字母小写l,并非数字1
private final String EOL = System.getProperty("line.separator");
private String tessPath = "D:\\tesseract";
//private String tessPath = new File("tesseract").getAbsolutePath();
public String recognizeText(File imageFile,String imageFormat)throws Exception{
System.out.println("new File(tesseract).getAbsolutePath():"+new File("tesseract").getAbsolutePath());
File tempImage = ImageIOHelper.createImage(imageFile,imageFormat);
File outputFile = new File(imageFile.getParentFile(),"output");
StringBuffer strB = new StringBuffer();
List<String> cmd = new ArrayList<String>();
if(OS.isWindowsXP()){
cmd.add(tessPath+"\\tesseract");
}else if(OS.isLinux()){
cmd.add("tesseract");
}else{
cmd.add(tessPath+"\\tesseract");
}
cmd.add("");
cmd.add(outputFile.getName());
System.out.println("outputFile.getName():"+outputFile.getName());
cmd.add(LANG_OPTION);
cmd.add("chi_sim");
cmd.add("eng");
ProcessBuilder pb = new ProcessBuilder();
pb.directory(imageFile.getParentFile());
cmd.set(1, tempImage.getName());
pb.command(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
//tesseract.exe 1.jpg 1 -l chi_sim
int w = process.waitFor();
//删除临时正在工作文件
tempImage.delete();
if(w==0){
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8"));
String str;
while((str = in.readLine())!=null){
strB.append(str).append(EOL);
}
in.close();
}else{
String msg;
switch(w){
case 1:
msg = "Errors accessing files.There may be spaces in your image's filename.";
break;
case 29:
msg = "Cannot recongnize the image or its selected region.";
break;
case 31:
msg = "Unsupported image format.";
break;
default:
msg = "Errors occurred.";
}
tempImage.delete();
throw new RuntimeException(msg);
}
// new File(outputFile.getAbsolutePath()+".txt").delete();
return strB.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
String path = "d:\\a.jpg";
try {
String valCode = new OCR().recognizeText(new File(path), "jpg");
System.out.println(valCode);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}