【问题标题】:How to work with OpenCV python library using brython如何使用 brython 使用 OpenCV python 库
【发布时间】:2017-02-13 12:59:51
【问题描述】:

我有一个功能齐全的 Python 项目,已直接通过终端进行测试。

但是当我搜索如何将 Python 代码与 JavaScript 包装器集成时,我发现很少有开源 API

http://www.brython.info/
http://www.skulpt.org/
http://pypyjs.org/
http://transcrypt.org/
http://stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html

我使用过 brython 并且能够运行一些基本的 python 代码

但是我的 python 项目包含一些我直接安装到操作系统中的库的导入语句 使用

apt-get install python-opencv
apt-get install python-numpy
apt-get install python-skimage
apt-get install cython
pip install --user imutils
pip install --user scikit-image

并且项目包含导入语句为

import imutils
from skimage.filter import threshold_adaptive
import numpy as np
import argparse
import cv2

我的目标是能够在 Cordova 项目上使用 JavaScript 包装器运行我的 python 代码,但由于这些库默认情况下不可用,我尝试下载它们并通过本地路径导入,但后来我开始面临许多brython 引发的导入错误和控制台错误是无法理解的。我正在尝试使用在 Cordova Android&iOS 上运行的 Python 构建图像处理软件。

任何帮助将不胜感激。 提前致谢

【问题讨论】:

    标签: javascript python cordova opencv brython


    【解决方案1】:

    Brython 是 Python 代码的转译器 -

    虽然它很好地兼容 Python 3.5 实现,但它绝不可以运行本机代码。也就是说:使用本机代码的项目(例如 openCV 等)无法使用 Brython 运行 - 因为它不会像使用 Python 源代码那样将本机 x86 二进制文件“转换”为兼容的 javascript 对象。

    “skulpt”等其他方法的工作方式不同:它们将 Python 运行时本身的 C 代码编译成 javascript - 如果它们可以选择将二进制 Python 模块与 Python 运行时一起编译,它们就可以工作。 (我不熟悉 Skulpt 或其他客户端 Python 方法,不知道这是否可能)。

    但即使它有效,openCV 也充分利用了现代 CPU,包括 SIMD 指令,甚至可能使用 GPU。所有这些都将在 Javascript 中进行模拟(如果它可以工作的话),带来 3 或 4 个数量级的性能损失 - 更不用说文件 I/O 的完全修改条件(如:不存在 - 如果没有代码你调用有任何文件 I/O 副作用,你可能会摆脱 HTTP 请求和 HTML 本地存储)。

    在浏览器 (nacl) 和其他方法上运行本机代码的意义是努力,但我不知道这些的状态,或者这些使用浏览器上的 cPython 运行时。

    那有什么可能呢?

    拥有您的图像处理代码服务器端,并构建一个后端,允许您从 Brython 端的代码调用服务器上的 RPC 函数。
    您只需要使用 Flask 或 Pyramid 等通用 Python 框架在 HTTP 视图中公开所需的 openCV 功能 - 设置代码以在浏览器和此服务器之间传输图像数据和操作元数据并不难使用 Brython。

    另一个旁注:

    Brython 不允许您导入已安装在系统上的任意文件 - 虽然它可能适用于任何不执行 I/O 的纯 Python3 代码,但这些文件必须放置在特定路径中,通过 HTTP 提供服务,以便 Brython 的导入机制可以获取它们

    【讨论】:

    • 感谢您提供宝贵的信息,但是,遗憾的是,python 的 javascript 包装器不支持大多数本机 python 功能。由于我的目标是使实现工作脱机,因此将我的 python 代码托管在服务器上并通过 ajax 调用进行访问的想法对我来说不是一个好主意。再次感谢您提供真正宝贵的支持,因为他们是提供 Python-JavaScript 包装器帮助的最少在线渠道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多