[PYTHON] Erstellen Sie ein Rad Ihres eigenen OpenCV-Moduls

Ich bin grafi und arbeite in Teilzeit bei ALBERT Co., Ltd. Ich habe noch nie bei Qiita gepostet, aber ich werde es zum ersten Mal posten.

Motivation

Deshalb bauen Sie OpenCV. Ich denke, es gibt Erklärungen, wie man es baut, also werde ich es weglassen. Dadurch wird eine Datei wie "cv2. Irgendwie .so" als Python-Modul erstellt. Um es global zu installieren, machen Sie einfach "make install".

Sie können dieses "cv2" -Modul jedoch nicht in der Umgebung sehen, die mit "virtualenv" (oder "venv") erstellt wurde, es sei denn, Sie fügen "--system-site-packages" hinzu. Wenn ich "cv2.so" irgendwie in "site-packages" in der "virtualenv" -Umgebung kopiere, funktioniert es, aber es ist einfach nicht cool.

Also fragte ich mich, ob ich daraus ein Rad machen könnte.

Wie macht man

Was ich wirklich tun möchte, ist "Ich möchte eine vorgefertigte Erweiterung in ein Rad verwandeln", aber dies scheint nicht unterstützt zu werden.

Deshalb habe ich viele Fehler gemacht, aber ich habe es geschafft. Ich bezog mich hauptsächlich auf

Dort sind drei.

Erstens ist die Verzeichnisstruktur wie folgt.

--+-- cv2 --+-- _native --+-- cv2.irgendwie.so
  |         |             |
  |         |             +-- __init__.py
  |         | 
  |         +-- __init__.py
  |
  +-- setup.py
  |
  +-- MANIFEST.in

In __init __. Py direkt unter dem cv2 Verzeichnis

import * from _native.cv2

Schreiben. Das "__init __. Py" im Verzeichnis "_native" kann leer sein.

setup.py ist wie folgt

from setuptools import setup
from setuptools.dist import Distribution

class BinaryDistribution(Distribution):
    def has_ext_modules(foo):
        return True

setup(
    name='cv2',
    version='1.0',
    packages=['cv2'],
    include_package_data=True,
    distclass=BinaryDistribution,
)

Auch "MANIFEST.in" ist

include cv2/_native/cv2.irgendwie.so

Schreiben.

Wenn Sie nun "python setup.py bdist_wheel" ausführen, haben Sie ein Rad mit einem Dateinamen wie "cv2-1.0-cp36-cp36m-linux_x86_64.whl" unter "dist". Ich bin glücklich.

Kommentar

Sie müssen lediglich ein Dummy-Paket erstellen und alle Definitionen im ursprünglichen cv2-Modul exportieren. Ich möchte das ursprüngliche "cv2" -Modul vorerst ausblenden, aber wenn ich "cv2" umbenenne. Irgendwie .so "in" _cv2 ". Irgendwie .so" wird es nicht funktionieren, also habe ich es gelöst, indem ich es in ein anderes Paket gesteckt habe. tat.

Indem Sie Ihnen zwangsweise mitteilen, dass die Erweiterung enthalten ist, indem Sie "has_ext_modules = True" setzen, können Sie das Rad so einstellen, dass die Installation abgelehnt wird, wenn Sie es auf ein anderes Betriebssystem bringen.

Anwendung

numpy und scipy funktionieren nur dann gut, wenn Sie sie selbst kompilieren und mit einer Hochleistungsmatrix-Operationsbibliothek verknüpfen. Es ist jedoch auch praktisch, das kompilierte Ergebnis als Rad zu behalten. Ich werde dieses Detail später schreiben.

Recommended Posts

Erstellen Sie ein Rad Ihres eigenen OpenCV-Moduls
Erstellen Sie Ihre eigene Ausnahme
Erstellen Sie ein Python-Modul
Erstellen Sie Ihre eigene Django-Middleware
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
Reinforcement Learning 23 Erstellen und verwenden Sie Ihr eigenes Modul mit Colaboratory
[Python] Anmelden Ihres eigenen Moduls
Erstellen Sie Ihren eigenen Namensauflösungsdienst
[Django] Erstellen Sie Ihre eigene 403, 404, 500-Fehlerseite
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Erstellen Sie Ihre eigenen Linux-Befehle in Python
[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Erstellen Sie mit Twisted Ihren eigenen DNS-Server
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
Erstellen Sie mit SQLAlchemy Ihren eigenen zusammengesetzten Wert
Erstellen Sie mit dem Sympy-Modul ein Diagramm
Erstellen Sie mit Python + OpenCV Ihre eigene virtuelle Kamera und wenden Sie Originaleffekte an
So importieren Sie Ihr eigenes Modul mit jupyter
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
[Python] Erstellen Sie eine Liste mit verschiedenen Zeichentypen
Erstellen Sie schnell Ihr eigenes Modul mit setuptools (Python)
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Erstellen Sie eine Tabelle mit IPython Notebook
Ablauf beim Erstellen eines eigenen Pakets mit setup.py mit Python
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
[Python] 2 Erstellen Sie eine Risiko-Rendite-Karte für Ihr Asset-Portfolio
Verschrotten Sie Ihren Qiita-Artikel, um eine Wortwolke zu erstellen
Machen Sie Ihren Cursor unter Linux zu einem Foto Ihrer Wahl
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Rufen Sie Ihr eigenes Python-Modul aus dem ROS-Paket auf