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가 살아 있다는 뜻이니 안심해도 됩니다.
실무 팁.
deepface와facenet-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와 버전을 한꺼번에 점검하는 방법을 익혔습니다. 다음 장에서는 이렇게 구성한 환경을 파일 하나로 박제해, 다른 컴퓨터나 팀원에게 그대로 재현하는 방법을 다룹니다.