HOWTO · Rust

Rust에서 OpenCV 사용

이 기사에서는 Rust를 사용하여 OpenCV로 작업하는 방법을 살펴봅니다.

Rust는 (실행 속도 측면에서) 빠르고 보다 확실한 소프트웨어를 작성하는 데 도움이 되는 프로그래밍 언어입니다. 실질적인 유형 시스템 및 소유권 모델로 메모리 관리를 처리합니다.

이는 정적 컴파일 언어입니다. 즉, Rust 프로그램을 작성하면 바이너리 실행 파일로 컴파일할 수 있으며 이 파일은 Rust가 설치되지 않은 다른 시스템에서 실행할 수 있습니다. 코드를 실행하려면 통역사가 필요하기 때문에 다른 언어와 다릅니다.

또한 오류 처리, 버그 잡기, 데이터 표현 및 동시성에도 좋습니다. 이 언어는 초보자에게 권장되지 않습니다. 더 나은 이해를 위해 하나 이상의 프로그래밍 언어에 익숙해야 합니다.

녹 명령

먼저 일부 Rust 명령에 대한 기본 개요를 살펴보겠습니다.

  • rustc: rustc는 Rust 코드를 컴파일하는 데 사용되는 Rust 컴파일러입니다. Rust에서 입력 코드를 가져와 바이너리 코드/기계가 읽을 수 있는 코드로 컴파일합니다.
  • rustup: rustup 명령은 Rust를 설치하고 업데이트하는 데 사용됩니다.
  • cargo: Python용 pip, Ruby용 gem, JavaScript용 npm과 같은 다른 언어와 유사한 Rust 빌드 시스템 및 패키지 관리자입니다.

나머지 명령은 터미널에서 cargo를 사용하여 확인할 수 있습니다.

녹 설치

이미 시스템에 Rust를 설치했다면 이 단계를 건너뛸 수 있습니다. 시스템에 Rust가 설치되어 있지 않은 경우 시스템에 대해 아래에 제공된 단계를 따를 수 있습니다.

Linux/Mac 시스템의 경우

유닉스 시스템에 Rust를 설치하려면 아래 명령을 복사하여 터미널에 붙여넣고 Enter를 누르십시오.

curl https://sh.rustup.rs -sSf | sh

이 코드는 시스템에 Rust를 다운로드하고 설치합니다.

설치 옵션을 묻는 경우 기본 설치를 선택하려면 1을 입력하고 Enter를 눌러 설치 진행(기본값)을 선택합니다.

다운로드 후 화면 끝에 "Rust가 설치되었습니다. 훌륭합니다!"가 표시되고 그 아래 "계속하려면 Enter 키를 누르십시오" 가 표시되므로 Enter를 누릅니다. 터미널을 닫습니다.

Rust가 올바르게 설치되었는지 확인하기 위해 새 터미널을 다시 열고 아래 명령을 사용하여 Rust 버전을 표시할 수 있습니다.

rustc --version

버전 번호, 커밋 해시 및 커밋 날짜가 나타나면 Rust가 성공적으로 설치되었다고 말할 수 있습니다.

녹 시작하기

먼저 터미널로 이동하여 다음 코드를 입력합니다. Rust가 설치된 경로는 터미널의 경로와 동일해야 합니다.

cargo

그러면 Rust에서 사용되는 모든 패키지와 명령이 표시됩니다.

그런 다음 cargo를 사용하여 Rust에서 새 프로젝트를 생성하기 위한 아래 코드를 입력합니다. 이것은 opencv-rust라는 이름의 이진 코드 프로젝트입니다.

cargo new --bin opencv-rust

이제 화면에 "Created binary (application) opencv-rust package" 출력이 표시됩니다. 이 명령으로 opencv-rust라는 새 바이너리 파일을 만들었습니다.

이제 아래 명령을 사용하여 이 프로젝트를 엽니다.

cd opencv-rust

이렇게 하면 경로가 업데이트되고 프로젝트가 열립니다. 이제 이 프로젝트에 대한 코드를 작성하려면 다음을 입력하십시오.

code .

이렇게 하면 Visual Studio Code가 열립니다.

이제 왼쪽 srcmain.rs 파일로 이동합니다. main.rs를 선택하고 엽니다. 오른쪽에서 이미 존재하는 상용구 코드를 볼 수 있습니다. 그런 다음 Ctrl+Shift+`를 사용하여 VSCode 터미널로 이동하고 아래 명령을 실행합니다.

cargo build
cargo run

그러면 패키지와 종속성이 컴파일되고 코드가 실행됩니다. VSCode 터미널에서 보일러 코드의 출력을 볼 수 있습니다.

Rust에서 OpenCV 사용

OpenCV를 설치하기 전에 OpenCV용 패키지 컴파일러와 프로젝트 빌드 시스템을 설치해야 합니다. 설치하려면 Mac용 패키지 관리자인 Homebrew 또는 brew를 설치해야 합니다. 이 link를 사용하여 brew를 설치할 수 있습니다.

그런 다음 이제 아래 패키지를 설치하고 OpenCV용 시스템을 하나씩 빌드합니다. 첫 번째는 라이브러리 컴파일에 사용되는 도구인 pkg-config입니다.

brew install pkg-config

두 번째는 네이티브 라이브러리 빌드를 지원하는 빌드 시스템인 CMake 시스템을 설치하는 것입니다. 이를 위해 아래 코드를 따릅니다.

brew install cmake

이제 OpenCV를 처리하고 객체 파일로 변환하는 데 필요한 모든 도구, 라이브러리 및 헤더 파일을 포함하는 OpenCV 패키지 및 llvm을 설치합니다.

brew install --debug llvm-dev
brew install libopencv-dev

libopencv-dev는 OpenCV 라이브러리를 설치합니다. 이 단계 후에 환경 경로를 내보내는 것이 중요합니다.

OpenCV가 제대로 작동하는지 확인하려면 OpenCV 프로그램을 만들어야 합니다. 왼쪽을 보면 Cargo.toml 파일을 찾을 수 있습니다. 그것을 클릭하면 오른쪽에 파일이 열리고 아래 종속성이 열립니다.

종속성 아래에 다음 코드를 추가합니다.

opencv = "0.73.0"
bytes = "1"
anyhow = "1"

버전 이름을 찾으려면 crates.io 웹 사이트를 방문하고 OpenCV를 검색하여 사용 가능한 최신 버전을 찾을 수 있습니다. 이 글을 작성할 때 최신 버전이 0.73.0인 것을 확인하여 VSCode에서 업데이트했습니다.

이제 srcmain.rs 파일로 이동하여 아래의 간단한 OpenCV-Rust 프로그램을 작성하십시오.

이것은 OpenCV를 사용하여 이미지를 가로로 뒤집는 간단한 Rust 코드입니다.

코드 스니펫 - (Rust):

use anyhow::Result;
use opencv::{
    core::{self, Mat, Vector},
    imgcodecs,
};

fn main() -> Result<()> {
    let source_img = imgcodecs::imread("car.png", imgcodecs::IMREAD_UNCHANGED)?;

    // Flipping image horizontally
    let mut destination_arr = Mat::default();
    core::flip(&source_img, &mut destination_arr, 1)?;

    // Creating an output image
    let arguments: Vector<i32> = Vector::new();
    imgcodecs::imwrite("final-output.png", &destination_arr, &arguments)?;
    Ok(())
}

먼저 anyhowopencv 라이브러리에서 몇 가지 메서드를 가져왔습니다: Result, Mat, Vectorimgcodecs. 그런 다음 결과를 반환하는 main 함수를 만들었습니다.

출력의 오류를 자동으로 처리하기 위해 anyhow 라이브러리의 Result 를 사용하고 있습니다.

Rust 코드 내에서 소스 이미지를 읽으려면 imgcodecs에서 OpenCV의 imread를 사용하고 source_img 변수에 저장해야 합니다. 이 예에서는 파일 이름과 확장자가 car.png인 자동차 이미지를 사용합니다.

이제 이미지를 읽었으므로 다중 채널 배열인 Mat를 전달할 destination_Arr을 만들어야 합니다. 이미지를 가로로 뒤집으려면 OpenCV 라이브러리의 flip을 사용하고 source_img, destination_arr1flip 메서드에 전달해야 합니다.

마지막 매개변수 1은 이미지를 수평으로 뒤집습니다. 이미지를 세로로 뒤집고 싶다면 1 대신 0을 전달할 수 있습니다.

뒤집힌 이미지를 출력으로 저장하려면 OpenCV의 imwrite 메서드를 사용해야 합니다. 여기에서 파일 이름을 첫 번째 매개 변수에 전달하여 출력 파일에 이름을 지정할 수 있습니다.

마지막으로 코드를 실행할 준비가 되었습니다. 코드를 빌드하고 실행하려면 아래 두 명령을 실행해야 합니다.

cargo build
cargo run

출력:

OpenCV 녹 출력

그러면 Rust 코드가 컴파일되고 실행됩니다. 이 명령의 출력은 위에 나와 있습니다.