1.前言
最近苹果公司发布新款产品,搭载 arm64 架构的处理器💻,作为嵌入式小白,必须要搞一款来玩玩,在上面跑跑图像处理(按理来说其实跟树莓派是差不多的,相对来说树莓派还是太小众,很多库和软件都来不及适配,那可能有人说了苹果发布的arm64咋可以呢,谁让苹果公司big呢。。。)
2.配置概要
既然是做图像相关的分析,那么opencv是必须的啦,很多人可能就不服气啦,大名鼎鼎的MATLAB分析什么都厉害,当然也难不倒图像分析,可MATLAB那玩意俺不会用,,,【据说很简单】,其次是macOS Big Sur系统还不支持。然后还需要使用opencv C++版本,需要编译源码。前期想法验证当然需要python啦,提到python就离不开anaconda了-做环境打包配置绝佳利器,可以让一个系统里配置多个python版本,一开始不知道为什么,后来在配置环境的时候还是遇到很多问题的,不断尝试python版本才成功的。所以需要如下几个库:
- anaconda
- python3.9
- opencv4.5.0
3.anaconda库配置
anaconda 目前还没有正式版支持Mac最新的处理器但天无绝人之路,所谓哪里有压迫,哪里就有反抗,miniforge - 该库是conda实现的最小库也称作为conda-forge。下载地址点击下载miniforge,这里选OS X(arm64)。下载后是个shelle脚本,直接运行即可。
4、python版本配置
使用conda进行配置,命令如下,其中myenv是一个完整环境的名字,内置python3.9版本,然后activate激活环境。
conda create -n myenv python=3.9
conda activate myenv
执行完以上两条命令之后,在terminal里可以看到如下信息:
以上信息就代表在conda里配置python3.9成功。
5、其他相关库配置(opencv numpy matplotlib)
opencv是这次做图像分析和处理的主角,我们先安装其他必要的库,numpy matplotlib,再安装python版本的opencv库,命令如下:
pip install numpy
pip install matplotlib
pip install opencv
安装完之后,还需要验证一下是否成功。可以看到各个版本如下:
6、代码验证
来个小试牛刀代码吧,图像暗光增强,展示最后的效果。
7、c++版本的opencv库配置
python代码毕竟只是做前期算法验证,真正实现还是c++代码。所以需要拿到opencv源码重新编译生存平台支持的库。
- 下载opencv源码:
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip
- 解压
unzip opencv.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 INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D BUILD_EXAMPLES=ON ..
- 编译,并安装
make -j8;sudo make install
-
opencv库代码验证
在opencv-4.5.0/samples/cpp/example_cmake下有个演示demo,cmake . 进行生成Makefile文件(注意,cmake后面有个 . )。然后使用make进行编译。#include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include "opencv2/videoio.hpp" #include <iostream> using namespace cv; using namespace std; void drawText(Mat & image); int main() { cout << "Built with OpenCV " << CV_VERSION << endl; Mat image; VideoCapture capture; capture.open(0); if(capture.isOpened()) { cout << "Capture is opened" << endl; for(;;) { capture >> image; if(image.empty()) break; drawText(image); imshow("Sample", image); if(waitKey(10) >= 0) break; } } else { cout << "No capture" << endl; image = Mat::zeros(480, 640, CV_8UC1); drawText(image); imshow("Sample", image); waitKey(0); } return 0; } void drawText(Mat & image) { putText(image, "Hello OpenCV", Point(20, 50), FONT_HERSHEY_COMPLEX, 1, // font face and scale Scalar(255, 255, 255), // white 1, LINE_AA); // line thickness and type }
最后一步再次一举了。直接 ./opencv_example 运行;
8.参考:
Building and Installing OpenCV 4.5.0 on an M1 Mac | Sayak Paul
M1 macOS で python + numpy/scipy/pandas/matplotlib/jupyterlab 環境構築のメモ(2020/12/24 時点) - Qiita