iBetter Books
수정

dlib과 OpenCV라는 토대 위에, 이 책이 본격적으로 다룰 얼굴 인식·감정 분석 라이브러리들을 얹을 차례입니다. 빌드가 까다로운 패키지는 이미 conda로 깔았으니, 나머지는 대부분 conda 환경 안에서 pip으로 간단히 설치됩니다. 마지막에는 모두가 제대로 import되는지 한 번에 검증하는 스크립트로 마무리합니다.

설치 순서의 원칙

PART 01의 첫 장에서 세운 원칙을 다시 떠올립니다. 빌드가 까다로운 패키지(dlib, OpenCV)는 conda-forge로 먼저, 순수 파이썬 패키지는 그 위에 pip으로. 앞 장에서 conda 설치를 끝냈으니, 이 장의 라이브러리들은 face 환경 안에서 pip으로 얹습니다. 시작 전 (face) 활성화부터 확인합니다.

conda activate face

라이브러리별 설치

이 책이 다루는 핵심 라이브러리를 역할별로 설치합니다. 한 줄씩 따라 입력하면 됩니다.

# 입문용 얼굴 인식 (dlib 기반, 이미 깐 dlib을 그대로 활용)pip install face_recognition# 올인원 분석 (인식·감정·나이·성별)pip install deepface# 프로덕션급 인식 + ONNX 실행기pip install insightface onnxruntime# 경량 감정·몰입도 인식pip install emotiefflib# PyTorch 기반 임베딩pip install facenet-pytorch# 실시간 검출·표정 (블렌드셰이프)pip install mediapipe# 빠른 검출 + 키포인트pip install ultralytics# TensorFlow용 Keras 2 호환 패키지 (DeepFace·RetinaFace가 요구)pip install tf-keras

마지막 줄의 tf-keras가 낯설 수 있습니다. 최신 TensorFlow는 Keras 3을 기본으로 쓰는데, DeepFace와 RetinaFace는 아직 Keras 2 방식을 쓰기 때문에 tf-keras가 없으면 ValueError: ... requires tf-keras package가 납니다. 미리 함께 깔아 두면 나중에 막히지 않습니다.

각 라이브러리의 역할은 PART 00의 지형도에서 한 번 정리했고, 실제 사용법은 해당 PART에서 처음부터 설명합니다. 지금은 "설치가 통과되는지"만 확인하면 충분합니다.

pip이 OpenCV를 다시 끌어오는 함정

여기에 앞 장과 직결되는 주의점이 하나 있습니다. deepface, insightface, emotiefflib 같은 패키지는 의존성으로 PyPI의 opencv-python을 함께 설치합니다. 그러면 우리가 Ch03에서 일부러 conda-forge로만 깔았던 OpenCV 위에, pip이 또 다른 OpenCV를 얹어 버립니다. Ch03에서 피했던 바로 그 중복이 다시 살아나는 셈입니다.

설치가 끝나면 OpenCV가 중복되지 않았는지 확인하세요.

pip list | grep -i opencv

여기서 opencv-python이나 opencv-contrib-python이 보이면 pip이 끌어온 중복본이므로 제거합니다. 우리에게 필요한 cv2는 conda-forge의 opencv 하나로 충분합니다.

pip uninstall -y opencv-python opencv-contrib-pythonpython -c "import cv2; print('OpenCV', cv2.__version__)"   # 여전히 동작하면 정상

제거 후에도 import cv2가 정상 동작하면, conda 쪽 OpenCV가 살아 있다는 뜻이니 안심해도 됩니다.

실무 팁. deepfacefacenet-pytorch는 각각 TensorFlow와 PyTorch라는 큰 딥러닝 프레임워크를 함께 끌고 옵니다. 그래서 이 둘을 설치할 때 내려받는 용량이 크고 시간이 좀 걸립니다. 네트워크가 느리면 한 번에 다 깔지 말고, 지금 당장 실습할 PART의 라이브러리부터 나눠서 설치해도 됩니다.

한 번에 검증하는 스크립트

라이브러리를 다 깔았다면, 하나하나 따로 확인하는 대신 모두를 한 번에 점검하는 스크립트를 만들어 둡니다. 다음 내용을 check_env.py로 저장합니다.

# 파일: check_env.py"""face 환경에 설치한 핵심 라이브러리가 모두 import되는지 확인한다."""import importlib# (표시 이름, import 이름) 목록LIBS = [    ("OpenCV", "cv2"),    ("dlib", "dlib"),    ("face_recognition", "face_recognition"),    ("DeepFace", "deepface"),    ("InsightFace", "insightface"),    ("ONNX Runtime", "onnxruntime"),    ("EmotiEffLib", "emotiefflib"),    ("facenet-pytorch", "facenet_pytorch"),    ("MediaPipe", "mediapipe"),    ("Ultralytics", "ultralytics"),]ok, fail = [], []for name, module in LIBS:    try:        mod = importlib.import_module(module)        version = getattr(mod, "__version__", "?")        print(f"  [OK]   {name:18s} {version}")        ok.append(name)    except Exception as e:        print(f"  [FAIL] {name:18s} {e}")        fail.append(name)print()print(f"성공 {len(ok)}개 / 실패 {len(fail)}개")if fail:    print("실패 목록:", ", ".join(fail))

(face) 환경에서 실행합니다.

python check_env.py

모든 줄이 [OK]로 나오면 이 책의 모든 실습을 시작할 준비가 끝난 것입니다.

  [OK]   OpenCV             4.13.x  [OK]   dlib               20.0.x  [OK]   face_recognition   1.3.0  ...성공 10개 / 실패 0개

만약 어떤 줄이 [FAIL]로 나온다면, 그 라이브러리만 다시 설치하거나 오류 메시지를 그대로 검색해 해결합니다. 자주 발생하는 변경 사항은 [PART 00. 들어가기]의 업데이트 현황 페이지에도 정리해 둡니다.

dlib과 NumPy의 궁합. import는 되는데 나중에 dlib으로 얼굴을 검출할 때 RuntimeError: Unsupported image type, must be 8bit gray or RGB image가 난다면, 십중팔구 dlib과 NumPy 버전이 어긋난 경우입니다. 위의 pip 설치들이 NumPy 2.x를 끌어오는데, 오래된 dlib은 NumPy 1.x용으로 빌드되어 충돌합니다. conda install -c conda-forge "dlib>=20"으로 NumPy 2를 지원하는 최신 dlib을 받으면 해결됩니다.

이 장에서 기억할 것

빌드가 까다로운 dlib·OpenCV는 conda로, 나머지 핵심 라이브러리는 conda 환경 안에서 pip으로 얹는다는 순서를 그대로 실천했습니다. 그리고 check_env.py 한 번으로 열 개 라이브러리의 import와 버전을 한꺼번에 점검하는 방법을 익혔습니다. 다음 장에서는 이렇게 구성한 환경을 파일 하나로 박제해, 다른 컴퓨터나 팀원에게 그대로 재현하는 방법을 다룹니다.