728x90
cv2.dnn.DictValue와 관련된 AttributeError는 주로 OpenCV 버전 간의 파괴적 변경(Breaking Changes) 때문에 발생합니다. 특히 OpenCV 4.10 버전 이후부터 내부 구조가 변경되면서 기존 코드가 참조하던 속성이 사라지는 경우가 많습니다.
🛑 에러의 원인: OpenCV 버전 불일치
OpenCV 4.10.x 이상 버전(현재 4.13 등)에서는 cv2.dnn 모듈의 내부 구조가 대대적으로 개편되었습니다. 이 과정에서 DictValue 같은 특정 속성이 제거되거나 위치가 변경되었는데, 이를 사용하는 외부 라이브러리(Albumentations, YOLO 관련 도구 등)가 최신 OpenCV를 따라가지 못할 때 발생합니다.
✅ 해결 과정 상세 분석
1단계: 기존 패키지 및 잔여물 완전 삭제
단순히 uninstall만 하면 설정 파일이나 캐시가 남아 다시 꼬일 수 있습니다.
Bash
pip uninstall opencv-python-headless -y
rm -rf /usr/local/lib/python3.10/dist-packages/cv2*
- 이유: /dist-packages/에 남은 파일들을 수동으로 제거하여, 새 버전 설치 시 발생할 수 있는 파일 충돌을 원천 차단합니다.
2단계: 검증된 안정 버전(4.8.x) 설치
가장 호환성이 좋은 버전으로 내려가는 '다운그레이드' 전략입니다.
pip install opencv-python-headless==4.8.1.78 --no-deps
- --no-deps 사용 이유: 이 옵션이 핵심입니다. 보통 OpenCV를 설치하면 의존성 때문에 numpy 등을 최신으로 강제 업데이트하곤 하는데, 이미 환경이 잘 잡혀 있다면 다른 라이브러리를 건드리지 않고 OpenCV만 교체하기 위해 사용합니다.
3단계: 충돌 라이브러리 제거
pip uninstall albumentations albucore -y
- 이유: albumentations는 내부적으로 OpenCV에 강하게 의존합니다. OpenCV 버전을 바꿨으므로, 나중에 이 라이브러리를 다시 설치하여 바뀐 OpenCV 환경에 맞게 재구성하는 것이 안전합니다.
728x90
댓글