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