# numpy 2 is allowed, and that is what lets this install on a current Python. # `<2.0` capped the resolver at numpy 1.26.4, whose newest wheel is cp312, so # on a Mac with Python 3.14 pip fell back to BUILDING numpy from source and # died in clang - two screens of C compiler output on a shop counter, for a # version choice made silently by behavision-setup. # # Measured before changing it, nine runs of the detector guard per combination # on one machine: # # numpy 1.26 / cv2 4.11 9 passed, 0 crashed # numpy 2.0 / cv2 4.11 8 passed, 1 crashed # numpy 1.26 / cv2 4.14 3 passed, 6 crashed # numpy 2.0 / cv2 4.14 2 passed, 7 crashed # # numpy is not the variable there; OpenCV is. The crash was a test racing a # shared cv2.FaceDetectorYN on purpose - undefined behaviour in C++, which 4.11 # usually turned into an exception and 4.14 usually turns into a segfault. The # product never shares one (Engine._build_worker builds a detector per camera), # and the test now runs that race out of process. With that fixed, the whole # suite is 226 passed / 2 skipped on numpy 2.0.2, five runs out of five. # # opencv IS capped, and the two are not the same call. Everything above was # measured on 4.x; OpenCV 5.0 is a major release this project has never run a # real camera or an emotion model through, and an uncapped `>=4.8.1` means # every NEW install silently gets it while every existing one keeps 4.11. Lift # it after running a camera on 5.x, not before. numpy>=1.26,<3.0 opencv-python>=4.8.1,<5 onnxruntime>=1.16 fastapi>=0.110 uvicorn>=0.29 pydantic>=2.6 PyYAML>=6.0 python-dotenv>=1.0 faiss-cpu>=1.7.4 requests>=2.31 pywin32>=306; sys_platform == "win32"