【问题标题】:Phonegap barcodescanner fasterPhonegap 条码扫描器更快
【发布时间】:2013-02-04 18:21:10
【问题描述】:

这是我的代码(它工作正常):

document.addEventListener('deviceready', myDeviceReady, false);
function myDeviceReady() {
    $('#Print').append('Device is ready');
    function Scan() {
        try {
            $('#Print').append('Scanning')
            window.plugins.barcodeScanner.scan(mySuccess,myError);
        } catch (myCatch) {
            $('#Print').append('catch: ' + myCatch)
            Scan();
        }   
    }
    function mySuccess(result) {
        if (result.cancelled) {
            $('#Print').append('The user cancelled the scan.')
        } else {
            $('#Print').append(result.text);
            $('#Print').append(result.format);
        }
        Scan();
    }

    function myError(error) {
        $('#Print').append('Scanning failed: ' + error);
        Scan();
    }
    Scan();
}

问:有什么方法可以更快地轮询扫描仪?每次扫描需要几秒钟,我的用户需要扫描大量条码。

他们曾经用楔子扫描笔记本电脑,但他们现在想使用 iPad。

编辑:

也许我正在寻找的是第 3 方解决方案。

【问题讨论】:

  • phonegap 是否使用 zxing 插件读取条形码?一个普遍的问题是您要读取哪种条形码格式,是否有任何方法可以使软件仅查找该代码?条码软件必须在图像中找到条码,所以它寻找的代码越少,性能越快。
  • 你用哪个插件来扫码?
  • 我正在使用 phonegap 插件站点的条形码扫描器插件。
  • 为了速度,我们真的可以取消一些$('#Print')

标签: cordova barcode


【解决方案1】:

除非您的 HTML 很大(通过 $('#Print') 获取 DOM 节点可能需要一些时间),或者您正在运行应用程序很长时间(在这种情况下 .append 可能会变慢,因为它永远不会被清除),您的 JavaScript 代码没有任何问题。事实上,我假设延迟来自您的条形码插件,而不是您的 JavaScript 处理程序。

在做任何其他事情之前,您应该检查我的假设是否正确,并且延迟实际上发生在您的 .barcodeScanner.scan() 调用和 mySuccess()/myFailure() 函数之间。

PhoneGap 似乎正在使用 ZXing ("Zebra Crossing"),这是一个既定标准。如果这还不够快,您可能想尝试其他库:

但可能是移动相机的自动对焦速度不足以满足您的要求,您需要基于激光的硬件。 This link 有许多与硬件接口的产品。

【讨论】:

  • HTML 是概念验证代码,因此非常小。感谢您的链接。我会调查他们。有一句格言是“客户永远是对的”,我的客户希望使用手机扫描条形码而不是购买激光扫描仪。因此,我敢肯定,谁能找到实现这一目标的方法,谁就会变得富有。
【解决方案2】:

如果你使用的是cordova官方插件http://ngcordova.com/docs/plugins/barcodeScanner/

你可以在 iOS 上让它更快,

在您的 XCode 项目中,转到 plugins 文件夹,然后打开 CDVBarcodeScanner.mm

改变这一行:

captureSession.sessionPreset = AVCaptureSessionPresetHigh;

为:

captureSession.sessionPreset = AVCaptureSessionPresetMedium;

【讨论】:

    【解决方案3】:

    在之前的工作中,我曾在CipherLab 工作,这是一家条形码扫描仪制造商。

    关于条码扫描仪

    首先,您需要澄清不是扫描仪本身很慢,而是读取它的应用程序。扫描仪性能本身在某种程度上是价格的函数。如果你有一个便宜的扫描仪,它可能会更慢,把钱花在一个好的扫描仪上会提高性能和适应性(读取损坏/污迹/脏条码的能力)。仅供参考,大多数移动扫描仪没有@Hazzit 建议的“自动对焦”,但有一个针对特定距离范围优化的固定预对焦镜头。如果它是成像扫描仪(不是激光),则将扫描仪对准条形码,然后将其拉回,直到扫描仪读取。如果最终用户正在扫描大量条码,他们将很快记住“最佳位置”。激光扫描仪只能读取一维条码,但速度可能更快,并且能够从更远的距离进行读取。

    关于你的 JS 代码

    扫描仪插件似乎正在同步执行(阻止 JS 直到它获得条形码)。该库中是否还有另一个功能可以异步使用扫描仪?如果没有,请考虑查看其他 SDK,看看是否有其他人允许异步使用条形码扫描仪。

    可能有点小,但我会尝试将您的 DOM 操作 JS 与扫描仪代码分开。 DOM 操作可能会很慢,具体取决于 DOM 结构、您的选择器和您正在执行的操作。

    如果您可以获得对扫描仪的异步访问,则您可以将它们解耦并在“可能时”进行所有 DOM 操作,前提是扫描仪在等待下一个条形码时没有阻塞(基本上是在您启动扫描仪接受下一个条形码)。

    关于键盘楔形扫描

    现在,键盘楔形扫描器显然以打字一样快的速度输入数据,无论应用程序是否已准备好或可以跟上击键。这会很快,但缺乏应用程序级别的控制。

    您可以将蓝牙条形码扫描仪用作 HID 设备(在现代技术中基本上是“键盘楔”),它的工作方式与上述完全一样。速度快,但仍缺乏对硬件的应用级控制。

    当然,这些蓝牙库中的许多还支持 SPP 串行端口蓝牙配置文件,这为您提供了应用程序级别的控制。您可以发送扫描仪命令/配置,然后读回扫描的数据。

    这就是您的 SDK 工具发挥作用的地方。它们只是读取/写入蓝牙串行端口(扫描仪)以轮询扫描的条形码。这可能非常快,但取决于 SDK 的质量。我不是 iOS 程序员,对那个特定平台一无所知,但我知道在 Windows 中它们是访问串行端口的高级方法和性能更高的低级方法。

    不管怎样,如果你愿意,你仍然可以选择回到键盘楔形的做事方式!只是想我会指出这一点。

    在这种键盘楔形模式下,通常会在扫描仪数据前加上快捷键。大多数扫描仪可以在扫描数据的开头或结尾插入一些额外的击键。例如,您可以将扫描仪配置为键入 F3+{barcode data}+Enter 并让您的页面监视该快捷方式,将焦点移至正确的输入框,然后接受数据。

    如果一切都失败了

    如果所有其他方法都失败了,并且您无法获得所需的性能……唯一的方法是为 iOS 编写本机应用程序。虽然高级工具很棒,但无论如何(无论是硬件访问还是 UI 性能),您都无法完全获得原生应用的性能。

    【讨论】:

    • 请注意:Phillip 使用的 phonegap 库使用了 iPad camera。在他当前的开发设置中,他似乎没有使用激光扫描仪(或任何其他专用硬件设备)。他的 previous 设置(新的应该替换)使用了键盘楔,我认为 iPad 不存在这些东西。顺便说一句,scan() 调用 异步的。除了你的帖子是正确的,它只是不适合这里的情况。
    • @Hazzit:哈,哈,对不起。我没有意识到它正在使用相机。我的专长显然是条形码 - 而不是 phonegap/iOS。 iPad 相机仍然没有可调节的焦距。延迟只是相机本身的延迟加上任何处理(这样的图像处理会很慢并且会消耗 iPad CPU 周期)。菲利普应该研究一下蓝牙条码扫描仪以真正加快速度!
    • Apple 似乎不同意apple.com/ipad/specs(向下滚动到 iSight 摄像头的详细信息,Apple 称之为“自动对焦”)根据我在手机上使用条形码应用程序的经验,对焦时间变慢了进程下来而不是处理时间。但我同意您关于使用不同硬件的建议。
    猜你喜欢
    • 2012-01-08
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多