Как работать с библиотекой Python 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 содержит некоторые операторы импорта библиотек, которые я установил непосредственно в ОС, используя
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
Моя цель состоит в том, чтобы иметь возможность запускать мой код Python с помощью оболочки JavaScript в проекте Cordova, но, поскольку эти библиотеки не будут доступны по умолчанию, я попытался загрузить их и импортировать по локальным путям, но затем я столкнулся со многими ошибками импорта и Ошибки консоли, генерируемые brython, не понятны. Я пытаюсь собрать программное обеспечение для обработки изображений, используя Python, работающий на Cordova Android и iOS.
Любая помощь будет оценена. Заранее спасибо
1 ответ
Brython - это транспортер для кода Python -
Хотя он хорошо совместим с реализацией Python 3.5, он никоим образом не может запускать нативный код. То есть: проекты, которые используют собственный код, такой как openCV, среди многих других, не могут работать с Brython - так как он не "переносит" собственные двоичные файлы x86 в совместимый объект javascript, как это происходит с исходным кодом Python.
Другие подходы, такие как "skulpt", работают по-разному: они компилируют код C самой среды исполнения Python в javascript - и если у них есть возможность компилировать двоичные модули Python вместе со средой исполнения Python, их можно заставить работать. (Я не знаком со Skulpt или другими клиентскими подходами Python, чтобы знать, возможно ли это по крайней мере).
Но даже если это работает, openCV использует множество преимуществ современных процессоров, включая инструкции SIMD и, вероятно, даже использование графического процессора. Все это будет эмулироваться в Javascript (если он вообще работает), что приведет к потере производительности на 3 или 4 порядка - не говоря уже о полностью измененных условиях для файлового ввода-вывода (как в случае: не существует - если нет кода) у вашего звонка есть побочные эффекты ввода-вывода, вы можете избежать запросов HTTP и локального хранилища HTML).
Существуют попытки запуска нативного кода в браузере (nacl) и других подходах, но я не в курсе их состояния или использования среды выполнения cPython в браузере.
Что тогда возможно?
Создайте свой серверный код для работы с изображениями и создайте бэкэнд, который позволит вам вызывать функции RPC на сервере из кода на стороне Brython.
Вам просто нужно предоставить желаемую функциональность openCV в представлениях HTTP, используя общую среду Python, такую как Flask или Pyramid - настройка кода для передачи данных изображения и метаданных операций между браузером и этим сервером не составит труда делать с помощью Brython.
Другое примечание стороны:
Brython не позволит вам импортировать произвольные файлы, которые вы установили в вашей системе - хотя он, вероятно, будет работать с любым кодом на чистом Python3, который не выполняет ввод / вывод, файлы должны быть размещены по определенным путям, которые обслуживаются через HTTP, так что механизм импорта Brython может получить их