3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M1 MacにOpenCV4(C++/Python3)をインストールする方法

Last updated at Posted at 2021-02-14

動作環境

  • M1 MacBookAir(2020)
  • conda(Miniforge)
  • OpenCV4.5(with_contrib)

#1. condaのインストール

conda create --name <env_name>
conda activate <env_name>
conda install -y python==3.8.6

#2. Numpyのインストール

% wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha0/tensorflow_macos-0.1alpha0.tar.gz
% tar xvf tensorflow_macos-0.1alpha0.tar.gz
% cd tensorflow_macos/arm64
% pip install --upgrade --no-dependencies --force numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl 
% cd ~

#3. OpenCVをソースからコンパイル

% wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip
% wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip
% unzip opencv.zip
% unzip opencv_contrib.zip
% cd opencv-4.5.0
% mkdir build && cd build
% cmake \
  -DCMAKE_SYSTEM_PROCESSOR=arm64 \
  -DCMAKE_OSX_ARCHITECTURES=arm64 \
  -DWITH_OPENJPEG=OFF \
  -DWITH_IPP=OFF \
  -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D OPENCV_EXTRA_MODULES_PATH=/Users/<user_name>/Downloads/opencv_contrib-4.5.0/modules \
  -D PYTHON3_EXECUTABLE=/Users/<user_name>/miniforge3/envs/dev/bin/python3 \
  -D BUILD_opencv_python2=OFF \
  -D BUILD_opencv_python3=ON \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D INSTALL_C_EXAMPLES=OFF \
  -D OPENCV_ENABLE_NONFREE=ON \
  -D BUILD_EXAMPLES=ON \
  -D OPENCV_GENERATE_PKGCONFIG=ON \
  -D WITH_FFMPEG=ON ..
% make -j8
% sudo make install

参考にした[1]では,恐らくPython版で使うことが想定されているようだが,私はC++ と VideoCapture も使いたかったため,末尾に-D OPENCV_GENERATE_PKGCONFIG=ON \-D WITH_FFMPEG=ONを追記している.

そのため,C++でコンパイルするため,/usr/local/lib/pkgconfig/opencv4.pcへのパスを通す.

~/.zshrc
export PKG_CONFIG_PATH==/usr/local/lib/pkgconfig
source ~/.zshrc

#4. 動作確認

% conda activate <envi_name>
% python
>>> import cv2
>>> cv2.__version__

Pythonに関しては,4.5.0と表示されればOK.

次にC++.
Object Detection系でC++で動く良いサンプルがないかGitHubを物色したところ,YOLOを手軽に動かせるリポジトリ[2]を発見(Detection以外のタスクもほぼ網羅されている).
ObjectDetection-YOLOをclone後以下を実行し,pretraind modelをダウンロード & コンパイル.

% sh getModels.sh
% g++ -std=c++11 object_detection_yolo.cpp `pkg-config --cflags --libs opencv4` -o object_detection_yolo
% ./object_detection_yolo --image=bike.jpg

bike_yolo_out_cpp.jpg
任意の画像で実行して物体検出されればOK.

1つ問題が...

webcam入力でc++からDetectionして,AppleSiliconはえええというのをやりたかったのだが,opencvをcmake時にffmpegが認識されておらず,VideoCaptureが使えないという問題が発覚.この理由は,恐らくだが,私の環境には,x86_64環境とarm64環境の2つ同居してる関係で/usr/local/bin/ffmpeg(x86_64コンパイル(clang-11.0.0))と/opt/local/bin/ffmpeg(arm64コンパイル(clang-12.0.0))があり,前者が参照されているのが原因と思われる.識者がいれば,解決方法をコメントで教えていただけると幸いである.

(2021.02.16 追記)
原因は,予想通り/usr/local/bin/ffmpegがx86_64コンパイル(clang-11.0.0)であるためだった,多少強引だが,/usr/local/bin/にarm64コンパイル(clang-12.0.0)のffmpegのバイナリを突っ込んだら,コンパイル時に認識されるようになった.
また,色々カメラアプリを入れていたせいで,cap(0)がSnapCameraになっていたのも原因だった.

% ffmpeg -list_devices true -f avfoundation -i dummy
ffmpeg version N-100400-g001bc594d8 Copyright (c) 2000-2020 the FFmpeg developers
  built with Apple clang version 12.0.0 (clang-1200.0.32.27)
  configuration: --prefix=/opt/local
  libavutil      56. 62.100 / 56. 62.100
  libavcodec     58.115.102 / 58.115.102
  libavformat    58. 65.100 / 58. 65.100
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 93.100 /  7. 93.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
Changed waitThread to realtime priority!
Asked for all format descriptions...
[AVFoundation indev @ 0x11d70c7f0] AVFoundation video devices:
[AVFoundation indev @ 0x11d70c7f0] [0] Snap Camera
[AVFoundation indev @ 0x11d70c7f0] [1] FaceTime HD Camera
[AVFoundation indev @ 0x11d70c7f0] [2] EpocCam
[AVFoundation indev @ 0x11d70c7f0] [3] Capture screen 0
[AVFoundation indev @ 0x11d70c7f0] [4] Capture screen 1

参考

[1] Building and Installing OpenCV 4.5.0 on an M1 Mac
[2] learnopencv/ObjectDetection-YOLO/
[3] OpenCVを使ったC++コードをコンパイルする(CMake, GCC, pkg-config)
[4] OpenCVのC++コードをMacでmakeする際のMakefile

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?