3

我有一个功能齐全的 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 构建图像处理软件。

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

4

1 回答 1

3

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 的导入机器可以获取它们

于 2017-02-13T18:11:03.773 回答