2017-07-22 44 views
0

我在ubuntu 16.04.02 LTS上安裝了python 3.5的opencv-3.2.0。我想運行下面的腳本:面部表情識別opencv錯誤

import cv2 
import numpy as np 
from keras.models import load_model 

# laptop camera 
rgb = cv2.VideoCapture(1) 

# droidcam android 
# rgb = cv2.VideoCapture('http://ipaddress:port/mjpegfeed?640x480') 


# pre - trinaed xml file for detecting faces 
facec = cv2.CascadeClassifier('/home/shubhamrathore/haarcascade_frontalface_default.xml') 
font = cv2.FONT_HERSHEY_SIMPLEX 


# loading saved cnn model 
model = load_model('/home/shubhamrathore/Downloads/face_reco.h5') 


# predicting face emotion using saved model 
def get_emo(im): 
    im = im[np.newaxis, np.newaxis, :, :] 
    res = model.predict_classes(im,verbose=0) 
    emo = {0: 'Angry', 1: 'Disgust', 2: 'Fear', 3: 'Happy', 4: 'Sad', 5: 'Surprise', 6: 'Neutral'} 
    return emo[res[0]] 


# reshaping face image 
def recognize_face(im): 
    im = cv2.resize(im, (48, 48)) 
    return get_emo(im) 


while True: 
    _, fr = rgb.read() 
    flip_fr = cv2.flip(fr,1) 
    gray = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) 
    faces = facec.detectMultiScale(gray, 1.3, 5) 

    for (x,y,w,h) in faces: 
     fc = fr[y:y+h, x:x+w, :] 
     gfc = cv2.cvtColor(fc, cv2.COLOR_BGR2GRAY) 
     out = recognize_face(gfc) 
     cv2.rectangle(fr,(x,y),(x+w,y+h),(255,0,0),2) 
     flip_fr = cv2.flip(fr,1) 
     cv2.putText(flip_fr, out, (30, 30), font, 1, (255, 255, 0), 2) 

    cv2.imshow('rgb', flip_fr) 

    # press esc to close the window 
    k = cv2.waitKey(1) & 0xEFFFFF 
    if k==27: 
     break 
    elif k==-1: 
     continue 
    else: 
     # print k 
     continue 

cv2.destroyAllWindows() 

我得到的輸出是:

[email protected]:~$ python class13cam.py 
    Using TensorFlow backend. 
    VIDEOIO ERROR: V4L: index 1 is not correct! 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
    packages/keras/engine/topology.py:1242: UserWarning: Update your 
    `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_7", 
    activity_regularizer=None, trainable=True, input_dtype="float32", 
    batch_input_shape=[None, 1, ..., activation="relu", kernel_size=(3, 
    3), filters=64, strides=[1, 1], padding="valid", 
    data_format="channels_first", kernel_initializer="glorot_uniform", 
    kernel_regularizer=None, bias_regularizer=None, 
    kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
    packages/keras/engine/topology.py:1242: UserWarning: Update your 
    `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_8", 
    activity_regularizer=None, trainable=True, activation="relu", 
    kernel_size=(3, 3), filters=64, strides=[1, 1], padding="valid", 
    data_format="channels_first", kernel_initializer="glorot_uniform", 
    kernel_regularizer=None, bias_regularizer=None, 
    kernel_constraint=None, bias_constraint=None, use_bias=True)` 
     return cls(**config) 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
    packages/keras/engine/topology.py:1242: UserWarning: Update your 
    `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_9", 
    activity_regularizer=None, trainable=True, activation="relu", 
    kernel_size=(3, 3), filters=64, strides=[1, 1], padding="valid", 
    data_format="channels_first", kernel_initializer="glorot_uniform", 
    kernel_regularizer=None, bias_regularizer=None, 
    kernel_constraint=None, bias_constraint=None, use_bias=True)` 
     return cls(**config) 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
    packages/keras/engine/topology.py:1242: UserWarning: Update your 
    `MaxPooling2D` call to the Keras 2 API: 
    `MaxPooling2D(name="maxpooling2d_3", trainable=True, pool_size=[2, 2], 
    strides=[2, 2], padding="valid", data_format="channels_first")` 
     return cls(**config) 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
     packages/keras/engine/topology.py:1242: UserWarning: Update your 
     `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_10", 
     activity_regularizer=None, trainable=True, activation="relu", 
     kernel_size=(3, 3), filters=32, strides=[1, 1], padding="valid", 
    data_format="channels_first", kernel_initializer="glorot_uniform", 
    kernel_regularizer=None, bias_regularizer=None, 
    kernel_constraint=None, bias_constraint=None, use_bias=True)` 
     return cls(**config) 
    /home/shubhamrathore/anaconda3/lib/python3.6/site- 
    packages/keras/engine/topology.py:1242: UserWarning: Update your 
    `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_11", 
    activity_regularizer=None, trainable=True, activation="relu", 
    kernel_size=(3, 3), filters=32, strides=[1, 1], padding="valid", 
    data_format="channels_first", kernel_initializer="glorot_uniform", kernel_regularizer=None, bias_regularizer=None, kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(name="convolution2d_12", activity_regularizer=None, trainable=True, activation="relu", kernel_size=(3, 3), filters=32, strides=[1, 1], padding="valid", data_format="channels_first", kernel_initializer="glorot_uniform", kernel_regularizer=None, bias_regularizer=None, kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `MaxPooling2D` call to the Keras 2 API: `MaxPooling2D(name="maxpooling2d_4", trainable=True, pool_size=[2, 2], strides=[2, 2], padding="valid", data_format="channels_first")` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Dropout` call to the Keras 2 API: `Dropout(trainable=True, name="dropout_2", rate=0.5)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(name="dense_1", activity_regularizer=None, trainable=True, input_dim=None, activation="relu", units=128, kernel_initializer="glorot_uniform", kernel_regularizer=None, bias_regularizer=None, kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(name="dense_2", activity_regularizer=None, trainable=True, input_dim=None, activation="relu", units=64, kernel_initializer="glorot_uniform", kernel_regularizer=None, bias_regularizer=None, kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Dropout` call to the Keras 2 API: `Dropout(trainable=True, name="dropout_3", rate=0.5)` 
    return cls(**config) 
/home/shubhamrathore/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py:1242: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(name="dense_3", activity_regularizer=None, trainable=True, input_dim=None, activation="linear", units=7, kernel_initializer="glorot_uniform", kernel_regularizer=None, bias_regularizer=None, kernel_constraint=None, bias_constraint=None, use_bias=True)` 
    return cls(**config) 
2017-07-22 13:14:39.568141: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. 
2017-07-22 13:14:39.568170: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations. 
2017-07-22 13:14:39.568181: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations. 
2017-07-22 13:14:39.568201: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations. 
2017-07-22 13:14:39.568211: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations. 
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/travis/miniconda/conda-bld/conda_1486587069159/work/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7456 
Traceback (most recent call last): 
    File "class13cam.py", line 38, in <module> 
    gray = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) 
cv2.error: /home/travis/miniconda/conda-bld/conda_1486587069159/work/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor 

而且,當我在終端和「進口CV2」運行「蟒蛇」,不會引發錯誤:

[email protected]:~$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cv2 
>>> cv2.__version__ 
'3.2.0-dev' 

我從源碼構建並安裝它。這個錯誤是什麼?

回答

0

我認爲Python的版本是不同的。錯誤消息'/home/shubhamrathore/anaconda3/lib/python3.6/site- packages/keras/engine/topology.py:1242:..'show version是3.6,因爲python路徑不是常規的,I認爲python3.6是由你自己構建的,並被腳本使用。但你在shell上發出的命令是'python3',它顯示的版本是Python 3.5.2。