1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stack Module LLM Advent Calendar 2024

Day 8

Module-LLMでソースからビルドしたOpenCV-Mobileを使ってみる

Last updated at Posted at 2024-12-19

目的

opencv mobileにhttp streamingのプルリクがあることを見つけました。
jpg-streamingで先行実装されており、ブランチをクローンすれば使えることが分かったため、http streamingをお試しするために、ソースからビルドしたOpenCV-Mobileを使ってみることにしました。

OpenCV-Mobileとは

 OpenCV-Mobileは、モバイルデバイスや組み込みシステムなど、リソースが限られた環境でのコンピュータビジョン機能の実装を行うためのOpenCVです。Android, iOS やARM Linuxなどに対応しています。
 ディープラーニングのフレームワークncnnの開発者として知られるnihui氏によって、開発されています。

注意

OpenCV-Mobileをそのまま使う場合は、releasesにあるzipファイルをダウンロードして解凍することで、ビルドすることなく、すぐに使うことが可能です。

環境

$  lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

opencv-mobileのビルド

opencv-mobileのjpg-streamingのブランチをダウンロードします。

$ git clone https://github.com/nihui/opencv-mobile.git -b jpg-streaming

こちらのスクリプトをダウンロードして、OpenCVにパッチを当てます。

$ cd opencv-mobile
$ curl -O https://raw.githubusercontent.com/nnn112358/opencv-mobile_jpg-streaming_test/main/opencv-mobile-build.sh
$ chmod +x opencv-mobile-build.sh

今回はModule-LLMで使うため、aarch64向けにopencv-mobileのクロスコンパイルを行うことにしました。

$ cd opencv-mobile-4.10.0
$ cmake -B build/x64 -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake \
    `cat ./options.txt` -DBUILD_opencv_world=OFF .
$ cmake --build build/x64
$ cmake --install build/x64 --prefix install/aarch64

install/aarch64ディレクトリにOpenCVのライブラリがビルドできていることを確認しました。

 install/aarch64
    ├── bin
    │   └── setup_vars_opencv4.sh
    ├── include
    │   └── opencv4
    │       └── opencv2
    │           ├── core
    ├── lib
    │   ├── cmake
    │   │   └── opencv4
    │   │       ├── OpenCVConfig-version.cmake
    │   │       ├── OpenCVConfig.cmake
    │   │       ├── OpenCVModules-release.cmake
    │   │       └── OpenCVModules.cmake
    │   ├── libopencv_core.a
    │   ├── libopencv_features2d.a
    │   ├── libopencv_highgui.a
    │   ├── libopencv_imgproc.a
    │   ├── libopencv_photo.a
    │   └── libopencv_video.a
    └── share
        └── licenses

次に、C++でjpg-streamingを行うためのソースコードとCMakefilesを作成します。
cmakeでビルドを行うと、jpg-streamingを行うためのバイナリが生成されます。

$ mkdir build
$ cd build
$ cmake ..
$ make 

ファイル構造は以下のようになっています。

.
├── CMakeLists.txt
├── cv_main.cpp
└──  build
cv_main.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main()
{
    cv::VideoCapture cap;
    cap.open(0);

    cv::VideoWriter http;
    http.open(7766);

    cv::Mat bgr;
    while (1)
    {
        cap >> bgr;
        http << bgr;
    }

    return 0;
}

CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(opencv_jpeg_stream)

# コンパイラの設定
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)

# ビルドタイプとフラグの設定
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -Wall")

# OpenCVの設定(環境にあわせて書き換え)
set(OpenCV_DIR /xxx/xxx/opencv-mobile-4.10.0/install/aarch64/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)

# インクルードディレクトリの設定
include_directories(
    ${OpenCV_INCLUDE_DIRS}
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/include
)

# 実行ファイルの設定
add_executable(opencv_jpeg_stream cv_main.cpp)
target_link_libraries(opencv_jpeg_stream ${OpenCV_LIBRARIES})
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?