반응형

Windows에 설치된 Rust에서 OpenCV를 설치, 사용하는 방법을 다룹니다. 



2023. 12. 9 최초작성




0. 다음 영상 또는 포스트를 참고하여 Visual Studio Code에서 Rust 개발하는 환경을 만드세요.

 

Windows에 Visual Studio Code + Rust 개발 환경 만들기

https://webnautes.tistory.com/2110

 

https://youtu.be/e_xamRk7m98?feature=shared 



1.이제 Chocolatey를 설치합니다.

 

윈도우키를 누르고 powershell를 입력하여 검색된 Windows PowerShell에서 관리자로 실행을 클릭합니다. 

 



다음 주소에 접속하여 빨간색 사각형으로 표시한 부분을 클릭하여 명령어를 복사합니다.

https://chocolatey.org/install#individual 

 



PowerShell 창에 붙여넣고 엔터키를 누릅니다.

 



설치 완료후 다음 화면이 보이게 됩니다.

 



2. 다음 명령을 사용하여 opencv와 llvm를 설치합니다. Rust에서 OpenCV를 사용하기 위해 LLVM이 추가로 필요합니다.

 

choco install llvm opencv

 



다음 화면에서 y를 입력후 엔터키를 누르면 LLVM 설치가 진행됩니다. 

 



다음 화면에서 y를 입력후 엔터키를 누르면 OpenCV 설치가 진행됩니다. 

 




설치가 완료되면 다음처럼 보입니다.

 



3. 시스템 환경 변수에 다음 변수와 값을 추가해야 합니다. 

 

윈도우키 + R을 누르고 sysdm.cpl 입력 후 엔터키를 눌러 제어판의 시스템 항목을 실행합니다.

 



고급 탭의 환경변수 버튼을 클릭합니다.

 



시스템 변수 항목에 있는 새로 만들기 버튼을 클릭합니다.

 



아래 있는 3개의 변수 이름과 변수 값을 하나씩 다음처럼 적어주고 확인 버튼을 클릭합니다.

 

 

변수이름 : OPENCV_LINK_LIBS

변수값    : opencv_world481

 

위에 있는 값에서 빨간색 부분은 C:\tools\opencv\build\x64\vc16\lib에 있는 opencv_worldxxx.lib 파일의 버전과 맞추세요.

 

변수이름 : OPENCV_LINK_PATHS

변수값    : C:\tools\opencv\build\x64\vc16\lib

 

변수이름 : OPENCV_INCLUDE_PATHS

변수값    : C:\tools\opencv\build\include



시스템 변수에 다음처럼 3개의 변수가 등록되어야 합니다.

 



4. 윈도우 키 + R을 누르고 cmd를 입력한 후, 엔터키를 눌러 명령 프롬프트를 실행합니다.

 

원하는 위치에서 다음 명령을 실행하여 OpenCV를 위한 Rust 프로젝트를 생성하고 해당 경로로 이동하여 Visual Studio Code를 실행합니다.

 

cargo new opencv_rust

cd opencv_rust

code .

 



5. Visual Studio Code의 메뉴에서 View > Terminal을 실행하여 터미널 창을 열어줍니다. 터미널에서 다음 명령으로 Cargo.toml 파일에 opencv를 추가합니다.

 

cargo add opencv

 




6. src/main.rs에 다음 코드를 추가하고 Ctrl + S를 눌러 파일을 저장합니다. 웹캠에서 영상을 가져와 화면에 보여주는 예제코드입니다. 

 

use opencv::{
    core,
    highgui,
    prelude::*,
    videoio,
};

fn run() -> opencv::Result<()> {
    let window = "video capture";
    highgui::named_window(window, 1)?;
    #[cfg(feature = "opencv-32")]
    let mut cam = videoio::VideoCapture::new_default(0)?;  // 0 is the default camera
    #[cfg(not(feature = "opencv-32"))]
    let mut cam = videoio::VideoCapture::new(0, videoio::CAP_ANY)?;  // 0 is the default camera
    let opened = videoio::VideoCapture::is_opened(&cam)?;
    if !opened {
        panic!("Unable to open default camera!");
    }
    loop {
        let mut frame = core::Mat::default(); 
        cam.read(&mut frame)?;
        if frame.size()?.width > 0 {
            highgui::imshow(window, &mut frame)?;
        }
        let key = highgui::wait_key(10)?;
        if key > 0 && key != 255 {
            break;
        }
    }
    Ok(())
}

fn main() {
    run().unwrap()
}



7. main 함수 위에 보이는 Run을 클릭하여 실행합니다. 

 



다음과 같은 에러가 발생합니다.

 

 *  Executing task: C:\Users\webnautes\.cargo\bin\cargo.exe run --package opencv_rust --bin opencv_rust 

 

    Finished dev [unoptimized + debuginfo] target(s) in 0.06s

     Running `target\debug\opencv_rust.exe`

error: process didn't exit successfully: `target\debug\opencv_rust.exe` (exit code: 0xc0000135, STATUS_DLL_NOT_FOUND)



C:\tools\opencv\build\x64\vc16\bin 위치에 있는 opencv_world481.dll 파일을 Ctrl을 누른채 드래그하여 Visual Studio Code의 탐색기에서 보이는 실행 파일 위치로 복사해서 가져오고 다시 실행해보면 문제없이 실행이 됩니다.  ESC 키를 누르면 웹캠 영상 창이 닫힙니다. 

 



생성된 실행파일 opencv_rust.exe와 OpenCV DLL 파일인 opencv_world481.dll 파일이 같은 폴더에 있습니다.

 



매번 OpenCV DLL 파일을 복사해오는 번거로움을 줄이려면 환경변수 PATH에 C:\tools\opencv\build\x64\vc16\bin를 추가하면 됩니다. 



윈도우키 + R을 누르고 sysdm.cpl 입력 후 엔터키를 눌러 제어판의 시스템 항목을 실행합니다.

 



고급 탭의 환경변수 버튼을 클릭합니다.

 



시스템 변수에서 Path를 선택하고 편집 버튼을 클릭합니다. 

 



새로 만들기 버튼을 클릭한 후, 파란색으로 변하면 다음 경로를 입력후 확인을 클릭합니다.

 

C:\tools\opencv\build\x64\vc16\bin

 



Visual Studio Code를 종료후 다시 실행하면 Rust OpenCV 폴더가 다시 열립니다.

다시 실행해보면 문제 없이 실행됩니다.





참고

https://github.com/twistedfall/opencv-rust/issues/118#issuecomment-619608278




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts