【问题标题】:Optical Character Recognition in Blackberry?黑莓中的光学字符识别?
【发布时间】:2012-08-10 19:22:14
【问题描述】:

我正在研究需要执行 OCR 任务的黑莓核心应用程序。

到目前为止,我搜索并发现很少有像ABBY这样可以读取图像并返回文本文件的在线API,但它们不是免费的,经过几次尝试后,它们会收取一定的费用。

我可以通过服务器实现在设备端完全执行光学字符识别吗? 请建议我完成这项任务。

已编辑:我正在使用以下代码

public String serverUrl = "http://cloud.ocrsdk.com";
    static final String BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy";


    public byte[] send() throws Exception
    {
        HttpConnection hc = null;

        InputStream is = null;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        byte[] res = null;

        try
        {
            hc = (HttpConnection) Connector.open(serverUrl+"/processImage/"+"language=en&exportFormat=txt");

            hc.setRequestProperty("Content-Type", "multipart/image-JPG; boundary=" + BOUNDARY);
            /*hc = (HttpConnection) Connector.open(SERVICE_URL);
            hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
            hc.setRequestProperty(PARAM_IMAGE, "");
            hc.setRequestProperty(PARAM_LANGUAGE, lang);
            hc.setRequestProperty(PARAM_APIKEY, key);*/

            hc.setRequestMethod(HttpConnection.POST);

            OutputStream dout = hc.openOutputStream();

            dout.write(raw);

            dout.close();

            int ch;
            StringBuffer sb= new StringBuffer();
            is = hc.openInputStream();

            while ((ch = is.read()) != -1)
            {
                bos.write(ch);
                sb.append(ch);
            }
            System.out.println(sb);
            res = bos.toByteArray();
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if(bos != null)
                    bos.close();

                if(is != null)
                    is.close();

                if(hc != null)
                    hc.close();
            }
            catch(Exception e2)
            {
                e2.printStackTrace();
            }
        }
        return res;
    }

但即使使用此代码也无法正常工作。发出 HTTP 请求后,我得到 200 作为响应代码。 但没有像预期的那样得到完美的回应。作为回应,我收到 ABBYY 的错误页面。 http://cloud.ocrsdk.com/GenericError.htm?aspxerrorpath=/processImage/language=English&exportFormat=txt;connectionhandler=httpc

请给我建议:(

【问题讨论】:

    标签: blackberry ocr


    【解决方案1】:

    如果我对您的理解正确,您希望为 BlackBerry 设备实现自己的 OCR 应用程序,并且您希望将图像发送到服务器,识别它并将文本文件发送回设备。

    有一个开源的 OCR 实现,请查看此链接:http://en.openocr.org/

    使用此信息来实现 OCR 服务器功能。黑莓客户端功能将是微不足道的。只需使用HTTPConnection 类和流类向服务器上传/下载文件。

    编辑

    注意到 openocr.org 没有直接的源代码下载。他们需要向 cuneiform@cognitive.ru 发送电子邮件请求,他们会考虑。我认为这不是一种方便的方式。

    让我们检查另一个来源,例如Tesseract OCR。通过该链接,您可以下载源代码并构建 OCR 应用程序。然后为这个通过 HTTP 工作的应用程序实现 server-wrapper,并编写通过 HTTP 将图像文件上传到该服务器的黑莓客户端,并获取结果文本文件。

    【讨论】:

    • 你好 Rafael,感谢您提供如此出色的指导。我还有一个问题,我们是否创建自己的服务器来实现此 OCR 功能?或者我们已经使用这个 openOCR 以图像形式或 base64 字节发送请求,并以 .txt 文档形式等待响应。请给我建议。
    • OpenOCR 不是服务器应用程序,它是一个没有客户端-服务器交互功能的独立应用程序。从我的角度来看,您需要构建 OpenOCR 应用程序,实现服务器功能,从客户端获取请求并与 OpenOCR 一起使用(在 java 中运行 Runtime.exec() 等)并将识别的文本文件发送到移动客户端。
    • Rafael,我刚刚试图从您提供的链接中获取一些信息。它要求创建我的帐户。但是我还没有得到确认。另外,我现在有点迷茫。作为一个黑莓开发者,我需要做些什么来实现这个功能?:(是点击几次后的付费账户吗??
    • Tesseract OCR 没有提供任何 Java 代码。我试图通过遇到异常来与 ABBY 合作,但在发出请求时不知道在哪里使用我的 App ID 和 paasword。还尝试使用ocrapiservice.com OCR 在线再次出现异常并且代码无法正常工作。问题是,我仍在寻找可用于我的应用程序的可信 API。请给我建议。
    • 我认为应该可以编译 Tesseract OCR 引擎并在您的服务器 java 应用程序上使用 JNI (java native interface) 来调用必要的 Tesseract 功能。
    【解决方案2】:

    我完成了 OCR 任务。

    我从 GitHub 获得的 Java 代码不完整,或者在我这边可能无法正常工作。 我已经在我的 PHP 服务器上执行了 OCR 功能。 并且它的工作很成功。

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 2013-12-25
      • 2014-04-25
      • 2014-05-27
      • 1970-01-01
      • 2020-12-26
      • 2021-10-08
      • 2011-10-30
      相关资源
      最近更新 更多