java 配置ocr 本地环境测通后,上传服务器总是返回Errors accessing files.There may be spaces in your i

hsbbhzz 2017-04-09 11:07:23
大家好,我使用的是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();
}
}

}
...全文
848 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Map<String, String> env = pb.environment(); //获得进程的环境 env.put("TESSDATA_PREFIX", "E:\\Tesseract-OCR\\tessdata"); 这个加了还是不行啊 这个map是不是要塞回去啊,求指教
wxmisszj1985 2018-01-25
  • 打赏
  • 举报
回复
找了好久 终于解决了 哈哈。我用的是4.0的测试版本,windows环境下,执行的时候需要配置TESSDATA_PREFIX 这个环境变量,但是通过ProcessBuilder 这个创建的是没有原来的环境变量的,所以需要单独配置下。配置代码如下: Map<String, String> env = pb.environment(); //获得进程的环境 env.put("TESSDATA_PREFIX", "E:\\Tesseract-OCR\\tessdata"); 这样在执行的时候就可以了。
qq_33401878 2017-04-29
  • 打赏
  • 举报
回复
只有3.0.1后的版本是支持中英文的
hsbbhzz 2017-04-29
  • 打赏
  • 举报
回复
在命令行执行 tesseract D:\\a.jpg D:\\ww -l chi_sim eng此条命令,如果可同时识别中文、英文图片则程序的问题最终解决。
hsbbhzz 2017-04-29
  • 打赏
  • 举报
回复
结贴:最终此问题已经解决。1:服务器未配置中文库文件 2: 两个版本Ocr冲突。
hsbbhzz 2017-04-14
  • 打赏
  • 举报
回复
服务器是windows环境
匪君子 2017-04-09
  • 打赏
  • 举报
回复
hsbbhzz 2017-04-09
  • 打赏
  • 举报
回复

报错内容如上:
hsbbhzz 2017-04-09
  • 打赏
  • 举报
回复
这应该是什么问题呢?大牛们在哪里??

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧