jeiros / BP-Hack

BP Imperial Hackathon
MIT License
3 stars 1 forks source link

cv2 no rula tetes #2

Open jeiros opened 7 years ago

jeiros commented 7 years ago

Estoy dandole al docker, lo primero que me peta al hacer python main.py es lo siguiente:

[INFO] loading facial landmark predictor...
1193
Traceback (most recent call last):
  File "main.py", line 128, in <module>
    main()
  File "main.py", line 35, in main
    X_pca, pca, y = train_pca()
  File "/app/train_face.py", line 90, in train_pca
    X[c,:] = prepare_image(face)
  File "/app/train_face.py", line 28, in prepare_image
    img_gray = cv2.cvtColor(img_color, cv2.cv.CV_RGB2GRAY)
AttributeError: 'module' object has no attribute 'cv'

@axelBarroso @alopezgit sus ha colao algo mal ahi creo

jeiros commented 7 years ago

Hmmm raro, igual es la version que se instala en el docker. En mi mac consegui instalar todo creo, y python main.py peta en otro sitio:

[INFO] loading facial landmark predictor...
1193
/Users/je714/miniconda3/envs/py27/lib/python2.7/site-packages/sklearn/utils/deprecation.py:52: DeprecationWarning: Class RandomizedPCA is deprecated; RandomizedPCA was deprecated in 0.18 and will be removed in 0.20. Use PCA(svd_solver='randomized') instead. The new implementation DOES NOT store whiten ``components_``. Apply transform to get them.
  warnings.warn(msg, category=DeprecationWarning)
[[480 635  30  30]
 [777 239  62  62]
 [649 304 272 272]]
OpenCV Error: Assertion failed (dst.data == dst0.data) in cvCvtColor, file /Users/jhelmus/anaconda/conda-bld/work/opencv-2.4.8/modules/imgproc/src/color.cpp, line 4422
Traceback (most recent call last):
  File "main.py", line 128, in <module>
    main()
  File "main.py", line 50, in main
    out.write(img)
cv2.error: /Users/jhelmus/anaconda/conda-bld/work/opencv-2.4.8/modules/imgproc/src/color.cpp:4422: error: (-215) dst.data == dst0.data in function cvCvtColor

Cleaned up camera.

😅

jeiros commented 7 years ago

Era por la version de OpenCV, que se instalaba la 3 y pico. Bajandola a 2.4.11 rula, pero peta en otro lao:

/opt/conda/lib/python2.7/site-packages/sklearn/utils/deprecation.py:52: DeprecationWarning: Class RandomizedPCA is deprecated; RandomizedPCA was deprecated in 0.18 and will be removed in 0.20. Use PCA(svd_solver='randomized') instead. The new implementation DOES NOT store whiten ``components_``. Apply transform to get them.
  warnings.warn(msg, category=DeprecationWarning)
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file -------src-dir-------/opencv-2.4.10/modules/imgproc/src/color.cpp, line 3739
[INFO] loading facial landmark predictor...
1214
Traceback (most recent call last):
  File "main.py", line 128, in <module>
    main()
  File "main.py", line 49, in main
    img, faces, coor = face_recognition_2(frame)
  File "/app/utils.py", line 30, in face_recognition_2
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: -------src-dir-------/opencv-2.4.10/modules/imgproc/src/color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cvtColor

Creo que esto ya si que es porque el container de docker no ve el hardware de mi host. Montarlo en os x es una movida, creo que es mas facil si el host es un linux.

axelBarroso commented 7 years ago

Esto es un poco cochino, pero prueba a convertirla directamente a B&W

img = cv2.imread( img_path) gray = cv2.imread( img_path, 0)

jeiros commented 7 years ago

Donde? En utils.py?

jeiros commented 7 years ago

He cambiado esta linea por esto gray = cv2.imread(img, 0) y parece que rula, pero como esta dentro del container no ve la webcam y no puede hacer las fotos:

python main.py
[INFO] loading facial landmark predictor...
1214
/opt/conda/lib/python2.7/site-packages/sklearn/utils/deprecation.py:52: DeprecationWarning: Class RandomizedPCA is deprecated; RandomizedPCA was deprecated in 0.18 and will be removed in 0.20. Use PCA(svd_solver='randomized') instead. The new implementation DOES NOT store whiten ``components_``. Apply transform to get them.
  warnings.warn(msg, category=DeprecationWarning)
()
()
()
()
()
()
()
()
()
()
()
()
()
jeiros commented 7 years ago

Lo mejor va a ser esperar a que adri suba su ultima version, haga un pip freeze pa ver exactamente que version tenia de las cosas. Montar la imagen y luego ya pelearse con como conectar el hardware del host a la imagen de Docker.

axelBarroso commented 7 years ago

Vale, mejor!! Porque dependiendo de si al final se utilizaba face_recognition_2 o face_recognition se puede hacer una cosa o la otra!