목록프로그래밍, 알고리즘 (11)
Shine's dev log
face_recognition은 얼굴 인식이나 신원 인증에 사용하는 파이썬 라이브러리이다. face_recognition 라이브러리를 포함한 파이썬 파일을 pyinstaller를 통해 exe로 변환하고 싶어서 변환을 했는데 아래와 같은 오류가 떴다. 대충 살펴보면 뭐 face_recognition_models/models/ 경로에 shape_prediction_68_face_landmark.dat 데이터 파일이 없다는 그런 오류이다. 해결법) 우선 shape_prediction_68_face_landmark.dat 와 같은 데이터 파일들을 다운받아야 한다. 파이썬 프로젝트에서 라이브러리 폴더에 가서 face_recognition_models 폴더에 있는 4개의 데이터 파일을 복사해놓는다. 나는 파이썬 프..
C를 이용해 코드를 짜다보면 구조체를 활용할 때가 많이 있다. 우선 man이라는 구조체를 선언하고 이 구조체 변수에 값을 할당해보자. 위의 코드는 name이라는 문자열과 age라는 정수변수를 가지고 있는 man이라는 구조체를 만들고, alice와 bob이라는 man구조체에 값들을 할당한 코드이다. 위 코드를 실행해보면 할당한대로 잘 나오는 것을 확인할 수 있다. 그렇다면, 구조체를 복사하고싶을때는 어떻게 할까? 일단 등호(=)를 이용하여 구조체를 복사해주는 방법을 생각해볼 수 있다. 이렇게 실행을 해보면, 이렇게 원하는대로 복사가 된 것을 확인할 수 있다. 하지만, 여기서 한가지 문제가 발생하는데, 아래 코드를 보며 살펴보자 앞부분까지는 이전의 과정과 똑같지만, 이후에 alice 구조체의 name변수를 ..
C로 코딩을 하다보면 빠질 수 없이 등장하는 것이 바로 함수 이다. 반복적인 동작을 수행하거나 코드의 전체적인 가독성을 위해서 꼭 필요한 것이 바로 함수이다. 오늘은 함수가 어떻게 데이터를 공유하는지 알아보자. 여기서 데이터란 1. 매개변수 값과 2. 리턴 값을 생각해 볼 수 있다. 우선 다음과 같은 예제를 살펴보자 다음과 같은 경우, main() 에서 int형 변수 x와 y를 test라는 함수의 매개변수로 넘겨주었다. 이 때, x와 y의 값이 a와 b로 선언된 변수에 복사되어 들어간다. 또한, a와 b의 합한 값이 sum 으로 선언된 변수에 복사되어 들어간다. 즉, 함수의 매개변수는 직접적으로 변수 자체를 넘겨받는것이 아니라, 변수 속의 값만 복사되어 넘겨지는 것이다. 그렇다면 다음예시를 살펴보자 위의..
C를 처음 배우면 가장 먼저 배우는 것 중에 하나가 바로 배열이다. 배열은 대괄호 연산자 [ ]를 이용하여 굉장히 직관적으로 초기화되고, 사용되기 때문에 사실 별 어려움없이 사용할 수 있다. 하지만, 이후에 포인터를 배우고 배열과 포인터가 밀접하게 연관되어있다는 사실을 알게되면 멘붕에 빠지기도 한다;; 이번에는 배열과 포인터의 관계에 대해 깔끔하게 정리해보도록 하자. #include int main() { int arr[10] = {0, }; print("%d", arr[0]); } 위와같이 int형 변수 10개를 담은 arr라는 배열을 만들어봤을 때, arr[0]의 값을 print하면 당연히 0이 나온다. 하지만, arr[0]이 아닌 arr를 출력하면 뭐가 나올까? #include int main() ..
신입생 시절, 나를 괴롭혔던 문자열에 대하여 제대로 정리해보자. 아까도 말했듯이 C에는 문자열을 직접 다루는 자료형이 없다. 그래서 char의 배열을 사용하여 문자열을 '간접적으로' 나타낸다. 하지만, 리스트와는 다르게 배열은 크기가 고정적이다. 그래서 처음 char배열의 변수를 만들 때, 넉넉하게 크기를 설정해줘야 하는데, 그러다 보면 메모리의 낭비가 발생할 수 있다. 예를들어 char s1[100] 으로 설정된 s1라는 변수에 "hello"라는 문자열로 초기화 시킨다면, h, e, l, l, o, \0 이 6개를 제외한 94개의 칸은 낭비되는 것이다. 그렇다고 무턱대고 배열의 크기를 줄이자니 데이터가 잘릴 위험이 있기 때문에 조심스럽다. 이러한 문제점을 해결할 수 있는 것이 바로 char*이다. 예를..