[python] AttributeError: module 'cv2.dnn' has no attribute 'DictValue'

    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

    댓글