JAVA Tess4j doOCR() 不工作,异常“无效内存访问”

2024-02-15

我正在 eclipse 中从事动态 Web 项目, 我制作了一个 TesseractOCR 类,其中包含:

public class TesseractOCR {

    public TesseractOCR()
    {
    }

    public String doOCR(String file)
    {
         System.setProperty("jna.library.path", "32".equals(System.getProperty("sun.arch.data.model")) ? "lib/win32-x86" : "lib/win32-x86-64");

            File imageFile = new File("C:\\Users\\Sherein Dabbah\\Downloads\\ca096-d7a6d799d7a1d798d799d7a72.jpg");
            Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping
            Tesseract1 instance1 = new Tesseract1();
            instance.setLanguage("heb+eng");
            // Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping
            // File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Maven build bundles English data
            // instance.setDatapath(tessDataFolder.getAbsolutePath());
            String sub ="";
            try {
                String result = instance.doOCR(imageFile);
                int indx1 = 6+result.indexOf("אבחנות");
                int indx2 = result.indexOf("הפניות");
                sub = result.substring(indx1,indx2-1);
                System.out.println(sub);
            } catch (Exception e) {
                System.err.println(e.getMessage());
            }

            return sub;
    }
}

虽然有一个 servlet 包含函数 doPost()

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

         System.setProperty("jna.library.path", "32".equals(System.getProperty("sun.arch.data.model")) ? "lib/win32-x86" : "lib/win32-x86-64");

         response.setContentType("text/html;charset=UTF-8");

            // Create path components to save the file
            final String path = "C:\\Users\\Sherein Dabbah\\Desktop\\med"; //request.getParameter("destination");
            final Part filePart = request.getPart("file");
            final String fileName = filePart.getSubmittedFileName();

            OutputStream out = null;
            InputStream filecontent = null;
            PrintWriter writer = response.getWriter();

            if(fileName == ""){
                writer.println("You either did not specify a file to upload or are "
                        + "trying to upload a file to a protected or nonexistent "
                        + "location.");
                return;
            }

            String fullName = path + File.separator+ fileName;

            try {
                File newFile = new File(fullName);
                out = new FileOutputStream(newFile);
                filecontent = filePart.getInputStream();

                int read = 0;
                final byte[] bytes = new byte[1024];

                while ((read = filecontent.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }

                writer.println("New file " + fileName + " created at " + path);
                LOGGER.log(Level.INFO, "File{0}being uploaded to {1}", 
                        new Object[]{fileName, path});

            } catch (FileNotFoundException fne) {
                writer.println("You either did not specify a file to upload or are "
                        + "trying to upload a file to a protected or nonexistent "
                        + "location.");
                writer.println("<br/> ERROR: " + fne.getMessage());

                LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}", 
                        new Object[]{fne.getMessage()});
            } finally {
                if (out != null) {
                    out.close();
                }
                if (filecontent != null) {
                    filecontent.close();
                }
                if (writer != null) {
                    writer.close();
                }
            }

            String s = new TesseractOCR().doOCR(fullName);
            System.out.println(s);
        }

我有一个例外:

   Sep 06, 2015 10:36:46 AM org.apache.catalina.core.StandardWrapperValve invoke
     SEVERE: Servlet.service() for servlet [servlets.UploadServlet] in context   with path [/up] threw exception [Servlet execution threw an exception] with root      cause
    java.lang.Error: Invalid memory access
    at com.sun.jna.Native.invokePointer(Native Method)
    at com.sun.jna.Function.invokePointer(Function.java:470)
    at com.sun.jna.Function.invoke(Function.java:404)
    at com.sun.jna.Function.invoke(Function.java:315)
    at com.sun.jna.Library$Handler.invoke(Library.java:212)
    at com.sun.proxy.$Proxy4.TessBaseAPIGetUTF8Text(Unknown Source)
    at net.sourceforge.tess4j.Tesseract.getOCRText(Unknown Source)
    at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
    at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
    at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
    at classes.TesseractOCR.doOCR(TesseractOCR.java:28)
    at servlets.UploadServlet.doPost(UploadServlet.java:111) 
    at...

它在以下行失败:

String result = instance.doOCR(imageFile); in TesseractOCR class

您可能需要致电setDatapath告诉它在哪里可以找到tessdata.traineddata 文件的文件夹。

此外,您可能不再需要设置jna.library.path变量 tess4j 现在可以自动提取并加载本机库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA Tess4j doOCR() 不工作,异常“无效内存访问” 的相关文章

随机推荐

  • OpenNLP:类文件版本 55.0 错误,应为 52.0

    我在 IntelliJ IDEA 版本 17 0 6 中使用 Open NLP 版本 apache opennlp 2 2 0 库 但收到以下消息 java cannot access opennlp tools namefind Name
  • Castle ActiveRecord:映射到 C# 中的类中的 IUserType

    对于我当前的项目 我在 C 中使用 Castle 的 ActiveRecord 对于我的一个表 我确实需要使用自定义类型类 处理愚蠢的时间到时间跨度转换 为了保持我的代码干净 我喜欢定义派生自的类IUserType在对象映射类内 但我找不到
  • 如果 Moshi 中的值不匹配,如何回退到枚举

    我有一个枚举类 如果值与其中任何一个都不匹配 则希望它回退到特定的枚举值 我发现了一个关于使用 EnumJsonAdapter 的 Moshi 问题 但我没有看到任何可供我使用的公共类 我使用的是莫西 1 8 0 关于如何实现此目标的任何想
  • 为什么我的 rdd 中的 println 会打印元素字符串?

    当我尝试打印 RDD 的内容时 它会打印如下所示的内容 如何打印内容 谢谢 scala gt lines res15 org apache spark rdd RDD Array String MapPartitionsRDD 3 at f
  • OpenCL 双精度与 CPU 双精度不同

    我正在 Linux 中使用 GeForce GT 610 卡进行 OpenCL 编程 我的CPU和GPU双精度结果不一致 我可以在这里发布部分代码 但我首先想知道是否有其他人遇到过这个问题 当我运行多次迭代的循环时 GPU 和 CPU 双精
  • 需要有关 jQuery UI Accordion navigationFilter 选项的帮助

    我正在建造一个用于导航的手风琴 手风琴的每个部分都有一组链接 触发代码如下所示 document ready function selector accordion collapsible true active false navigat
  • IPFIX 数据通过 UDP 传输至 C# - 我可以解码数据吗?

    我有一个来自 MSDN 网站的代码示例 用于创建 UDP 侦听器 客户端 因为我尝试从防火墙接收 IPFIX Netflow 数据 然后使用收到的数据 该代码确实有效并开始接收数据 但它的行话 见下文 所以我想我没有正确解码它 有谁知道我需
  • 使用 NSExpression 计算值的平方?

    NSString formul 3 2 NSExpression e NSExpression expressionWithFormat formul int result e expressionValueWithObject nil c
  • .NET Core Web API / Angular 应用程序中的 Windows 身份验证

    我正在使用 Visual Studio 2019 Community 构建一个 Intranet 应用程序 用于创建 NET Core Web Api 使用 NET Core 2 2 并使用 Visual Studio Code 来创建 A
  • 用于更新值和查询过去某个时间值的状态的数据结构

    假设您对一堆独立的时变值感兴趣 每个值都代表某事物的当前状态 这些值不会按任何固定的时间表更改 并且无法从旧值预测新值 举一个具体的例子 假设您有一堆股票 并且您有兴趣跟踪它们的价值 并且每当对该股票进行交易时 您都会获得有关该股票的更新
  • 从“StringTokenizer”获取原始字符串中的位置

    我需要获取字符串中以空格分隔的标记 但我还需要知道原始字符串中每个标记的字符位置starts 有什么办法可以做到这一点StringTokenizer 另外 据我了解 这是一个遗留类 有没有更好的替代方法StringTokenizer 你应该
  • 尝试用 Java 从文件中读取 2 个单词

    我正在尝试编写一个简单的程序来读取文本文件并将单词对存储在Set 这是我为此编写的代码 import java io File import java io FileNotFoundException import java util Sc
  • 即使关联类型不同,特征实现也会发生冲突

    我正在尝试创建一个通用结构来包装isize or an AtomicIsize 但是当我尝试为该结构的两种可能实现实现一个特征时 我遇到了错误 我创建了一个最小的示例来演示我的问题如下 use std sync atomic AtomicI
  • 按名称引用 Excel 工作表?

    我将工作表的名称作为字符串存储在变量中 如何对该工作表执行某些操作 我想我会做这样的事情 nameOfWorkSheet test ActiveWorkbook Worksheets nameOfWorkSheet someOperatio
  • 比较字典忽略特定键

    如何在不考虑某些键的情况下测试两个字典是否相等 例如 equal dicts foo 1 bar 2 x 55 y 77 foo 1 bar 2 x 66 z 88 ignore keys x y z 应该返回 True UPD 我正在寻找
  • 无法在 while 循环中从列表中排除特定范围内的项目

    所以我发了一个问题before https stackoverflow com questions 48255911 excluding items from a list that are in a certain range using
  • 录制和保存应用程序中的声音?

    我想在c 或vb net 中创建一个应用程序 当我告诉它时 记录从扬声器发出的每个声音 当我完成时 我想按一个按钮并将其保存为mp3 或一些其他格式 到目前为止 我只找到了可以从麦克风录制内容的 API 我的问题是 NET 框架中有什么东西
  • 为什么彩色图像不能进行傅里叶变换?

    为什么彩色图像上无法进行傅里叶变换 dft 为什么只能在灰度图像上进行傅里叶变换 傅立叶变换处理时间或空间信号的强度 并转换为频率信号的强度 没有一个数字可以在不转换为灰度的情况下表示颜色的强度 您可以将图像分割为 3 个不同的图像 每个图
  • 如何在树表素面中显示父项和子项(两个不同的对象)?

    我正在使用 Treetable 组件来显示父对象和子对象 我可以使用以下方式显示父内容本教程 http www primefaces org showcase ui treeTable jsf 就我而言 我使用两个不同的对象来显示 Tree
  • JAVA Tess4j doOCR() 不工作,异常“无效内存访问”

    我正在 eclipse 中从事动态 Web 项目 我制作了一个 TesseractOCR 类 其中包含 public class TesseractOCR public TesseractOCR public String doOCR St