如何使用brython使用OpenCV python库

时间:2017-02-13 12:59:51

标签: javascript python cordova opencv brython

我有一个功能齐全的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项目包含一些我直接安装到操作系统中的库的import语句 使用

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构建图像处理软件。

任何帮助将不胜感激。 在此先感谢

1 个答案:

答案 0 :(得分:3)

Brython是Python代码的转换器 -

虽然它很好地符合Python 3.5实现,但它绝不能运行本机代码。也就是说:使用本机代码的项目,比如openCV,以及许多其他项目都无法与Brython一起运行 - 因为它不会将原生x86二进制文件“转换”为兼容的javascript对象,就像它使用Python源代码一样。

像“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函数。
您只需使用常见的Python框架(如Flask或Pyramid)在HTTP视图中公开所需的openCV功能 - 设置代码以在浏览器和此服务器之间传输图像数据和操作元数据将不会是一件困难的事情。使用Brython。

另一方面说明:

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