Python3.7.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamのクロスプラットフォームな環境構築事例集

こちらはOS毎の記事への目次です。そのうち Python 3.8 系対応記事にしたいところ。

# 想定する運用スタイル
 - [OpenCV](https://opencv.org/) を利用する GUI アプリケーションを [wxPython](https://www.wxpython.org/) により構築する。
  - wxPython が使えない場合は Tkinter や PyQt、Kivy 等を利用する。

 - [Webcam](https://ja.wikipedia.org/wiki/Web%E3%82%AB%E3%83%A1%E3%83%A9) を USB 接続し OpenCV から利用する。
  - ARM 系ハードでは内蔵カメラの利用も考慮する。

 - 異なるプラットフォーム / OS における作業手順を出来るだけ統一化する。[^Ansible]
  - ソースコードからのビルドは configure, make, make install、もしくは cmake, ninja, ninja install のような、UNIX 系 OS の作法で行えるよう工夫する。

 - [Python 向けパッケージ](https://pypi.org/)は [pip + venv](https://docs.python.org/ja/3/library/venv.html) で管理する。
[^Ansible]: 構築予定の環境の構成によっては [Ansible](https://docs.ansible.com/ansible/latest/index.html) も有用と思われる。参考文献：[Ansibleをはじめる人に。- Qiita](https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c)

※ インストール済みの Python パッケージ全てのアップグレードについては以下を参照下さい。
[How to upgrade all Python packages with pip? - Stack Overflow](https://stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip)

# x86-64アーキテクチャ
## Windows
[Windows10+Python3.7.x+OpenCV-Python4.1.x+wxPython4.0.x/PyQt5/Tkinter+USBWebcamの環境構築例](https://qiita.com/EarthSimilarityIndex/items/83ee1343f3de58c6b29a)

## Linux
Kubuntu_18.04LTS+OpenCV4.1.x+wxPython4.0.6+USBWebcamの環境構築例（工事中）

CentOS_7+Python3.7.x+OpenCV4.1.x+wxPython4.0.6+USBWebcamの環境構築例（工事中）

[Slackware_14.2+Python3.7.x+OpenCV4.1.x+wxPython4.0.6+USBWebcamの環境構築例](https://qiita.com/EarthSimilarityIndex/items/12d12212103f3b057fb0)

[Manjaro-KDE+Python3.7.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamの環境構築例](https://qiita.com/EarthSimilarityIndex/items/bf350b5872b74f77a1c1)

[Sabayon-KDE+Python3.7.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamの環境構築例](https://qiita.com/EarthSimilarityIndex/items/1bd18507574aeb616bd4)

## MacOS
[MacOSCatalina+Python3.7.x+OpenCV4.1.x+wxPython4.0.x+USBWebcamの環境構築例](https://qiita.com/EarthSimilarityIndex/items/78613f02a0833136e8c7)

※ Catalina に標準搭載の Python 3.7.3 から venv を用いることで仮想環境内に pip で簡単に opencv-python と wxPython を導入可能でした。

※ 一方で wxPython をソースからビルドしようとして苦戦中です。なお、OpenCV 及び wxWidgets のビルドは問題ありませんでした。

## FreeBSD
Project Trident+Python2.7.x+OpenCV3.x+wxPython3.xの環境構築例（工事中）

※ OpenCV 4.x 系のビルドが通らない上に、3.x 系に FreeBSD の Ports の Patch を当ててもPython3.x系向けのバインディングが上手く動作しない状況です。そこで、代替案として Linux バイナリ互換機能を用いたアプローチを検討中です。

## Haiku

Haiku+wxQt+wxPython+OpenCV+USBWebcamの環境構築例（計画中）

※ USBカメラ、繋がるんだろうか？

## Hurd（x86）
ArchHurd/DebianGNUHurd+Python3.7.x+OpenCV4.1.x+wxPython4.0.6+USBWebcamの環境構築例（計画中）

※ 目指すは Hurd 1.0 リリース前の記事完成。
※ Hurd ディストリだと [Debian GNU/Hurd](https://www.debian.org/ports/hurd/) が老舗かな？現在は[Debian GNU/Hurd 2019 がリリースされているそうです。](https://news.mynavi.jp/article/20190709-855975/)
※ [ArchHurd](https://archhurd.org/) 復活おめでとうございます。
※ USBカメラ、繋がるんだろうか？

## ReactOS（x86）
計画中。本格始動は実機で WebCam を繋げつつ OS を安定して動かせるようになってから。

最近の Microsoft はかなりオープンソース寄りであることだし、折角だから、ReactOS Project に色々 Donation してくれないかな？

## Docker
Docker+Python3.7.x+OpenCV4.1.x+wxPython4.0.xの環境構築例（工事中）
[Debian](https://hub.docker.com/_/debian) と [Arch](https://hub.docker.com/_/archlinux) を Docker イメージとして利用。ホスト OS は Windows10 or MacOSCatalina or FreeBSD(NomadBSD/GhostBSD) or Linux(Ubuntu/CentOS/Zenwalk/Manjaro/Sabayon)

## Vagrant
Docker+Python3.7.x+OpenCV4.1.x+wxPython4.0.xの環境構築例（工事中）

[Debian](https://app.vagrantup.com/debian) と [Arch](https://app.vagrantup.com/archlinux) をゲスト OS として環境構築。ホスト OS は Windows10 or MacOSCatalina or Linux(Ubuntu/CentOS/Zenwalk/Manjaro/Sabayon) + VirtualBox + VirtualBox Extension Pack。

※ VirtualBox Extension Pack によって、USB 2.0 及び 3.0 のサポートや WebCam 連携機能の強化が期待出来ます。

# ARMアーキテクチャ

## iOS

iOS+Python3.x+Kivy+OpenCV+内蔵カメラの環境構築例（計画中）

## Android

Android+Python3.x+Kivy+OpenCV+内蔵カメラの環境構築例（計画中）

## LineageOS+Raspberry Pi

計画中。Android で出来ることは LineageOS でも普通に出来そうではある。

## Windows 10 IoT Core+Raspberry Pi
計画中。[このあたり](https://www.raspberrypi.org/forums/viewtopic.php?p=1132797)や[このあたり](https://docs.microsoft.com/en-us/windows/iot-core/extend-your-app/ComputerVision)を参照しつつ挑戦してみたい。OpenCV と Python と WebCam が動けば色々楽しそう。

## Raspbian
Raspbian+Python3.7.x+OpenCV4.1.x+wxPython4.0.x/Kivy+内蔵カメラ/USBWebcam の環境構築例（工事中）

※ ほぼ Debian なので Raspbian 向けの記事はそのまま Debian や Devuan に流用可能と思われます。

※ ソースコードのビルドを行う場合は相応に時間が必要とはいえ、コンパイルもアプリ開発も Raspbian 上で x86-64 環境と変わらない使い勝手で行えるのは便利です。

※ USB 接続のカメラからの描画が崩れる場合、OpenCV を WITH_QT=ON でビルドすることで問題を回避可能でした。