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://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!