2017-02-13 96 views
2

我有一個功能完整的Python項目,它已經通過終端直接進行了測試。如何使用brython使用OpenCV 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 

我的目標是能夠運行使用在科爾多瓦項目的JavaScript包裝我的Python代碼,但由於這些庫將無法使用默認情況下,我嘗試下載他們&通過本地路徑導入,但後來我開始面臨很多導入錯誤& brython引發的控制檯錯誤是不可理解的。我正嘗試使用運行在Cordova Android & iOS上的Python構建圖像處理軟件。

任何幫助,將不勝感激。 由於提前

回答

2

Brython是Python代碼transpiler -

雖然這是很好的兼容到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函數。
你只需在HTTP視圖中使用像Flask或Pyramid這樣的通用Python框架公開所需的openCV功能 - 在瀏覽器和此服務器之間設置傳輸圖像數據和操作元數據的代碼不會很難使用Brython的事情。

另一個側面說明:

Brython不會讓你導入任意文件你已經安裝在系統上 - 雖然它可能會與任何純Python3代碼工作不執行I/O時,文件必須放置在通過HTTP服務的特定路徑中,以便Brython的導入機制可以獲得它們

+0

感謝有價值的信息,但是,很遺憾的知道,用於python的javascript包裝將不支持大部分本地python功能。因爲我的目標是讓實現工作脫機,所以將我的python代碼託管在服務器上並通過ajax調用訪問的想法對我來說不是一個好主意。 再次感謝真正有價值的支持,因爲它們是最少的在線渠道,提供有關Python-JavaScript包裝的幫助 – mohammedirfan655