基于macbook M1搭建图像分析环境

1.前言

最近苹果公司发布新款产品,搭载 arm64 架构的处理器,作为嵌入式小白,必须要搞一款来玩玩,在上面跑跑图像处理(按理来说其实跟树莓派是差不多的,相对来说树莓派还是太小众,很多库和软件都来不及适配,那可能有人说了苹果发布的arm64咋可以呢,谁让苹果公司big呢。。。)

2.配置概要

 既然是做图像相关的分析,那么opencv是必须的啦,很多人可能就不服气啦,大名鼎鼎的MATLAB分析什么都厉害,当然也难不倒图像分析,可MATLAB那玩意俺不会用,,,【据说很简单】,其次是macOS Big Sur系统还不支持。然后还需要使用opencv C++版本,需要编译源码。前期想法验证当然需要python啦,提到python就离不开anaconda了-做环境打包配置绝佳利器,可以让一个系统里配置多个python版本,一开始不知道为什么,后来在配置环境的时候还是遇到很多问题的,不断尝试python版本才成功的。所以需要如下几个库:

  1. anaconda
  2. python3.9
  3. opencv4.5.0

3.anaconda库配置

anaconda 目前还没有正式版支持Mac最新的处理器但天无绝人之路,所谓哪里有压迫,哪里就有反抗,miniforge - 该库是conda实现的最小库也称作为conda-forge。下载地址点击下载miniforge,这里选OS X(arm64)。下载后是个shelle脚本,直接运行即可。

基于macbook M1搭建图像分析环境_第1张图片

4、python版本配置

使用conda进行配置,命令如下,其中myenv是一个完整环境的名字,内置python3.9版本,然后activate激活环境。

conda create -n myenv python=3.9
conda activate myenv

执行完以上两条命令之后,在terminal里可以看到如下信息:

基于macbook M1搭建图像分析环境_第2张图片

以上信息就代表在conda里配置python3.9成功。

5、其他相关库配置(opencv numpy matplotlib)

opencv是这次做图像分析和处理的主角,我们先安装其他必要的库,numpy matplotlib,再安装python版本的opencv库,命令如下:

pip install numpy
pip install matplotlib
pip install opencv

安装完之后,还需要验证一下是否成功。可以看到各个版本如下:

基于macbook M1搭建图像分析环境_第3张图片

6、代码验证

来个小试牛刀代码吧,图像暗光增强,展示最后的效果。

7、c++版本的opencv库配置

python代码毕竟只是做前期算法验证,真正实现还是c++代码。所以需要拿到opencv源码重新编译生存平台支持的库。

  1. 下载opencv源码:
    wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip

     

  2. 解压
    unzip opencv.zip
    cd opencv-4.5.0
    mkdir build && cd build

     

  3. 配置
    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 ..

     

  4. 编译,并安装
    make -j8;sudo make install

     

  5. 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 
    
    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.参考:

https://sayak.dev/install-opencv-m1/

https://qiita.com/syoyo/items/6ad890c8a902d02d8c5a

你可能感兴趣的:(Python入门学习记录)