반응형

학교에서 내준 프로젝트를 계속 만들기 위해 방학에도 계속 이어나가고 있다.

그런데 만들다가.. Dlib에서 deserialize라는 함수에 모델 파일을 넣을 때 오류가 난 것이다..

 

왜 그런가.. 하는데 debug 모드에선 this가 nullptr를 가르키고 있다 하고 release 모드에선 예외가 발생했다 하고..

예외 발생(0x00007FF69400D3D3, program.exe): 0xC0000005: 0x0000000000000008 위치를 읽는 동안 액세스 위반이 발생했습니다..

이런식으로..

그래서 뭔 문제인가 보니..

 

이전 프로젝트 같은 경우 정상적으로 됬는데 이번꺼만 안되었다..

왤까 하고 생각해보니 이전껀 포인터를 몰라서 안썼는데 이번껀 포인터를 좀 써봐서 안됬던 것 같은 생각이 떠올랐다..

 

그래서 포인터로 변수 만들때 * 기호를 제거하니.. 되네.. 하하하하하 왜 이걸로 2일을 존버 탄걸까..

 

dlib::shape_predictor* sp;

dlib::deserialize(spPath) >> *sp;

이런식으로 변수를 생성하고 deserialize로 모델을 로드하니 안됬었다..

그래서 그냥 포인터를 제거하니깐 아주 잘된다.. 하하하하하하

 

그래서 난 이런식으로 주석을 했다.

//이거 모델 로드 할때 포인터 쓰면 오류남
dlib::shape_predictor sp; //68점 찍는거

if (modelFileCheck(spPath))
	//dlib::deserialize(spPath) >> sp;

 

요약

Dlib에서 모델 파일 불러올 때 (dlib::deserialize) 이걸로 뭔 이상한 오류 뜨면 포인터를 제거해봐야 한다..

 

(근데 아직도 포인터의 정확한 개념과 사용방법은 몰라서 저게 왜 되는지도 모르겠다.. 흐으억)

반응형
반응형

빠른 해결 방법은 아래로 내려가세요! 해결 방법

 

으윽 Visual Studio에서 QT로 프로젝트를 개발하는 도중에.. 한글이 깨지는 현상이 발견되었다..

그리고 한글을 쓴 상태에서 빌드를 해보니

오류 C2001 : 상수에 줄 바꿈 문자가 있습니다.	
오류 C2146 : 구문 오류: ')'이(가) 'M_FaceCount' 식별자 앞에 없습니다.
오류 C2146 : 구문 오류: ';'이(가) 'M_FaceCount' 식별자 앞에 없습니다.

뭐 이런식으로 오류가 떴다..

이게 문제인 것 같은데.. 난 분명 줄 바꿈 문자를 넣지도 않았는데 저래 뜬다..

그리고 겨우 빌드 해도..

이런식으로 알 수 없는 문자로 뜨는 것이다..

 

그래서 예전에 생각해보니 비슷한 문제가 있어 인코더 문제인가 하고 인코더를 바꿔보니 되는 것이다!

해결방법

문제가 일어나는 파일을 선택 후 "파일 > 다른 이름으로 이름.cpp 저장(A)..."

저장하는 파일 목록이 뜨면 아래에서 저장 바로 오른쪽에 아래로 내리는 삼각형 표시 클릭

그러면 이렇게 인코딩하여 저장(V)... 이 뜨는데 이걸 눌러야 합니다!

글고 파일을 바꿀껀지 묻는데 인코더를 바꿔야 함으로 당연히 바꾸기 클릭!

그럼 이런식으로 뜨는데 여기에서 인코딩이 보통 한국어 - 코드 페이지 949로 뜨는데 이걸 유니코드(서명 없는 UTF-8) - 코드 페이지 65001로 바꿉니다! (보통 Visual Studio에서 저장하면 EUC-KR로 저장되는 것 같습니다.)

그리고 확인을 눌러 저장!

그러고 난 후에 다시 빌드해보면 어떤 문제도 발생하지 않고 정상적으로 글자가 표시됩니다.

그리구! 일본어도 가능!

뭐 어쨌든 이런 것이고.. 분명히 항상 이 설정을 하는 것은 불편하죠..

그러니 바꿔보죠!

(Visual Studio Code는 인코딩 자동 설정으로 바로 되던데..)

Visual Studio 기본 인코더 설정

이 방법은 프로젝트마다 설정해야되니.. 불편하긴 하지만.. 어쨌든 되니 뭐 암튼

일단 프로젝트 파일로 들어갑니다.

프로젝트 파일은 솔루션 폴더 안에 있습니다.

즉! 보통 프로젝트를 만들면 솔루션 이름을 지정하고 프로젝트 이름을 지정하게 되는데

source > repos > 솔루션 이름 > 프로젝트 이름 이런식으로 저장되는데 여기에서 우리가 해야할 작업은 프로젝트 이름 쪽 폴더 입니다.

 

프로젝트 폴더엔 vcxproj 파일이나 cpph 파일을 작성했던 모든 코드들을 볼 수 있는 폴더인거죠

뭐 암튼 여기에서 

이런 파일을 ".editorconfig"생성합니다. 전 그냥 바로 메모장 파일 생성하고 이름하고 확장자 전체 다 바꿨습니다.

그리고 그 안에 이렇게 작성합니다.

root = true

[*]
charset = utf-8

그리고 저장하면 끄읕!

 

그리고 이제 Visual Studio에서 파일을 생성해보면?!!

기존에 있던 파일 인코더
.editorconfig 설정을 한 후 생성한 파일 인코더

이런식으로 바뀌었습니다!

어렵네요..

요약

파일 > 다른 이름으로 이름.cpp 저장(A)... > 저장 오른쪽 삼각형 클릭 > 인코딩하여 저장(V)... > 인코딩(E): 아래 메뉴에서 유니코드(서명 없는 UTF-8) - 코드 페이지 65001 이걸로 변경

 

항상 UTF-8로 자동저장 방법

프로젝트 폴더로 진입 > .editorconfig 파일 생성 > 아래 코드 입력 후 저장

root = true

[*]
charset = utf-8

 

 

.editorconfig 설정 관련 사이트

https://editorconfig.org/

 

EditorConfig

What is EditorConfig? EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs. The EditorConfig project consists of a file format for defining coding styles and a collection o

editorconfig.org

근데 왜이리 중간 중간 말투가 바뀌는거지..

반응형
반응형

잘은 모르겠지만 아마 프로젝트에서 라이브러리 끼리 런타임이 달라서 그러는 것 같다.

불일치가 검색되었습니다. 뒤에 Mt 뭐시기 값이 Mtd 뭐 이런식으로 안맞다는데

그냥 맞추면 끝나는 문제!

 

프로젝트 오른쪽 클릭 > 속성 > ("프로젝트 이름" 속성 페이지) 에서 구성 속성 > C/C++ > 코드 생성 > 런타임 라이브러리

이걸 맞춰주면 된다. 

내가 맞춘 방법으로는 

오류에서 MT_StaticRelease 값이 MD_DynamicRelease 뭐 이런식으로 떴었는데 MD_DynamicRelease 쪽꺼가 내 프로젝트꺼고 MT_StaticRelease가 라이브러리 쪽 같아서 그냥 내 프로젝트를 MT_StaticRelease쪽에 맞췄다. 그냥 런타임 라이브러리 설정에서 MDMT로 바꾼거

이런식으로

 

요약하면 

'RuntimeLibrary'에 대해 불일치가 검색되었습니다. 'MT_StaticRelease' 값이 'MD_DynamicRelease'(프로젝트 이름.obj에 위치) 값과 일치하지 않습니다.

이럴 때 프로젝트의 속성 페이지에서 구성 속성 > C/C++ > 코드 생성 > 런타임 라이브러리MT로 바꿔주면 끝!

 

그리고 더 찾아본 것인데.

MT정적 라이브러리로 연결해서 dll 파일로 동적으로 연결하지 않고 exe에 다 넣어서 정적으로 실행되게 하고

MD동적 라이브러리로 연결해서 dll 파일이 필요한 건데..

https://cheongpark.tistory.com/16

 

DLIB & OPENCV 진짜 쉽게 깔아보기 C++

학교에서 프로젝트를 받아버려서.. 해야하는 상황.. 내 프로젝트를 위해선 DLIB와 OPENCV가 필요한데.. 정말 2~3일동안 수없이 도전해보다가 굉장히 간단한 방법을 찾아서 알려줄까함! (왜이리 dlib는

cheongpark.tistory.com

여기에서 DlibVCPKG로 깔았었는데 난 이때

이 항목이 있어서 그냥 깔아봤다. 근데 여기에 필요한 거였다..

VCPKG로 깔은 것도 정적 라이브러리로 가능한가보다..

 

그래서 속성 페이지로 들어가보니 VCPKG라는 항목이 있는데 거기에 자세히 보니 Use Static Libraries 이런게 있었다.

그래서 정적 라이브러리로 만드는건가 해서 예로 바꿨더니..!

빌드 해서 보니 원래는 사진에 관한 dll 파일들도 막 생기고 그랬는데..

이젠 안생긴다!

다만 윈도우 버전에 따라 필요로 하는 dll 파일들은 생기지만..

 

뭐 어쨌든 더 좋아진 것 같다!

 

암튼 끝

반응형
반응형

QT를 빌드하고 실행해보면 이상하게 제목처럼 Qt6Core.dll Qt6Gui.dll Qt6Widgets.dll 이 세개의 파일이 없다면서 실행을 거부해버린다.

뭐 저걸 찾아서 넣으면 된다만.. 도데체 어딨지 했다는..

 

그래서 찾아보니 다른 사용자들도 사용할 수 있게 배포를 하기 위한 명령어가 있었다는걸..

windeployqt

이거

 

자신이 QT 프로젝트를 만들 때 사용했던거.. Visual Studio로 했으면 MSVC 2019 이런거..

어쨌든 설치했다면 Qt 버전 (설치 된거) 뭐 이런식으로 뜰꺼다..

내껀 이렇게 

그래서 이걸 실행해서 여기에다가 windeployqt "exe 파일 경로" / 예) windeployqt "C:\Users\Deploy\QtProject.exe" 이런식으로 입력하면

엄청난 여러가지 문구가 뜨면서

대충 이거하고 여러가지 dll 파일들을 생성하면서 다른 컴퓨터에서도 구동할 수 있게 파일을 만들어준다..

 

근데 문제는 엄청 귀찮다.. 그리고 명령어가 생각 안날 때도 있다.

 

그래서 Visual Studio 경우 설정을 찾아보니

Qt Project Setting > Run Deployment Tool 이 있었다.

이걸 이용하면 될 것 같아.

어차피 테스트는 디버그에서 할꺼라 Release에서 하는 경우는 배포용으로 빌드 할 때 밖에 없기 때문에

 

구성을 Release로 하고

이런식으로 예로 바꾸니

 

바로 빌드 하자마자 windeployqt 이 명령어 없이 바로 배포 파일들을 생성해주었다..!

근데.. 자주 테스트로 컴파일 해보는 거에다가 저걸 하는건 않좋을 것 같다.. 너무 느려..

 

뭐 어쨌든 요약!

3가지 파일이 없는 이유는 배포 툴로 파일들을 생성 안한 것이며 생성을 간편하게 할려면 Visual Studio의 경우 속성 페이지로 가서 구성 속성 > Qt Project Setting > Run Deployment Tool로 바꿔주면 Release로 빌드 할 때마다 배포 파일로 자동으로 만들어줌!

아니면 windeployqt "exe 파일 경로" 이 명령어로 해도 상관없음!

반응형
반응형

CVUI를 사용하여 OpenCV의 사진에다가 UI를 넣을려고 하는데

내가 코드에 쓰는 CVUI 함수들 마다 다 저딴 오류가 뜬다..

 

이거 그냥 간단하게 해결이 가능하다.

 

해결

상단에 #define "cvui.h" 하기전에 #define CVUI_IMPLEMENTATION이것만 추가하면 된다.

 

#include "cvui.h"

이걸 이렇게

#define CVUI_IMPLEMENTATION
#include "cvui.h"

 

요약

그냥 cvui.h 가져올 때 그 위에 "#define CVUI_IMPLEMENTATION" 이거 추가하기

반응형
반응형

내가 문제 생겼을 때 보기 위한 오류해결

  • C2146 : ';'이(가) 'pixel_type' 식별자 앞에 없습니다. 
  • C2027 : 정의되지 않은 형식 'dlib::image_traits<image_type>'을(를) 사용했습니다.
  • C4430 : 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

일단 저기 Don't add anymore은 그냥 지금 프로젝트를 계속 여러번 테스트하며 하고 있어서 더 이상 추가안한다는 것

 

Dlib 라이브러리를 쓸 때 가끔 이래 뜬다..

이 오류는 내 문제에 대한건 그냥 dlib에 이미지 파일을 넣을 때 그 함수의 지원되지 않는 이미지 변수를 넣어서 그런 것 같음..

 

해결

해결 방법은 그냥 dlib가 지원하는 이미지 변수로 넣으면 아마 될 것이다..!

auto face = detector(camImg);

내 경우 얼굴 인식 때문에 하고 있는데

현재 저 camImg가 OpenCV의 Mat 자료형이다.

 

근데 Dlib에서 OpenCV의 자료형을 넣어버리면 분명 오류를 낼꺼다.. 자기꺼도 아닌데 (왜 넣냐고 나보고 어쩌라고..) 할 것이다.

그래서 간단하게 해결할려면 Dlib에서 지원하는 자료형으로 변환하면 되는 것임!

dlib::cv_image<dlib::bgr_pixel> cimg(camImg);
auto face = detector(camImg);

이렇게 하면 되는 것임..!

dlib의 cv_image가 OpenCV의 이미지를 Dlib의 매트릭스로 바꿔주는 그런 것인 듯

 

어쨋든 그런 것임!

 

요약

Dlib가 지원하는 자료형으로 이미지 넣으면 됨

반응형
반응형

Windows로 OpenCV를 CMake로 빌드할 때

이런식으로 여러가지 오류가 뜬다!

(하하.. 이것 때문에 MSYS도 깔고 그랬는데도 안됬었다..)

 

제일 큰 문제는 저런식으로 Cannot copy output executable, Recorded try_compile output location doesn't exist:

이런식으로 여러가지 뜨는 문제는 아마도 버전 문제인 것 같다...

 

3.25.0 rc3 버전으로 깔아서 Configure을 눌르면 저런 오류들 뜨면서 안된다..

 

위와 말했던 것 처럼 이건 버전 오류인 것 같고..

3.24.2버전이나 그 아래 버전으로 새로 다운받아서 설치하면 정상적으로 Configure(설정)이 된다..!

 

(학교에서 프로젝트 숙제를 받아서 노트북을 새로 빌리고 (교사용으로) 새로 필요한거 빌드 하고 있었는데 하하하.. 이젠 다른걸 빌드 해야한다..)

새로 다운받아서 하니 이렇게 오류는 전혀 안뜸!

 

요약

이런 식의 오류가 나오면 현재 버전을 지우고 그 아래 버전으로 다운 받아서 새로 설치 후 다시 설정해보시길 바랍니다~~

반응형
반응형

보기 귀찮으면

Visual Studio Code에서 Ctrl + Shift + P을 눌르고 나온 검색창에 "Default Profile" 을 입력 그 후 나오는 창을 눌러 그 아래 리스트 중 Command Prompt 를 클릭하여 설정

 

문제점

아나콘다로 가상환경을 만들고 난 후 Visual Studio Code에서 파이썬을 아나콘다 가상환경으로 설정 후 파이썬 파일을 실행하면 Python이나 PowerShell으로 실행되어 아나콘다 가상환경에 진입하지 못하는 경우가 있다.

(학교 친구들 2명이 물어봤었음)

(근데 난 자동으로 설정 됬었는데... 뭐지)

 

해결방법

이 경우 터미널의 기본 종류를 변경해야하는데 변경 방법은

Ctrl + Shift + P를 눌러 검색창을 연다.

 

Ctrl + Shift + P를 눌르면 나오는 창

이 검색 창에 Default Profile을 검색해보자 / 검색창에 검색되는 건 ">Default Profile"이다

 

이런식으로 나온다. 그리고 저 아래 뜨는 것을 클릭한다.

그 후 여러가지가 나오는데 보통 PowerShell이나 Command Prompt가 나올 것이다.

 

파이썬 파일을 실행하면 아나콘다 가상환경에 들어갈 수 있게 해야함으로 Command Prompt로 변경한다.

그 후 실행하면 정상적으로 아나콘다 가상환경에 자동으로 들어가서 파일을 실행한다.

파일을 실행하자마자 자동으로 바뀐거

(맥은 모름 비슷할 것 같긴 함)

 

반응형

+ Recent posts