【问题标题】:AttributeError: 'module' object has no attribute 'io' in caffeAttributeError:“模块”对象在 caffe 中没有属性“io”
【发布时间】:2016-10-19 11:03:54
【问题描述】:

我正在尝试做一个性别识别程序,下面是代码..

import caffe
import os
import numpy as np
import sys
import cv2
import time

#Models root folder
models_path = "./models"

#Loading the mean image
mean_filename=os.path.join(models_path,'./mean.binaryproto')
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean_image  = caffe.io.blobproto_to_array(a)[0]

#Loading the gender network
gender_net_pretrained=os.path.join(models_path,
'./gender_net.caffemodel')
gender_net_model_file=os.path.join(models_path,
'./deploy_gender.prototxt')
gender_net = caffe.Classifier(gender_net_model_file,     gender_net_pretrained)

#Reshaping mean input image
mean_image = np.transpose(mean_image,(2,1,0))

#Gender labels
gender_list=['Male','Female']

#cv2 Haar Face detector
    face_cascade=cv2.CascadeClassifier(os.path.join
  (models_path,'haarcascade_frontalface_default.xml'))

 #Getting prediction from live camera
 cap = cv2.VideoCapture(0)

 while True:    
   ret,frame = cap.read()
   if ret is True:
      start_time = time.time()

       frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
       rects = face_cascade.detectMultiScale(frame_gray, 1.3, 5)

       #Finding the largest face
       if len(rects) >= 1:
           rect_area = [rects[i][2]*rects[i][3] for i in xrange(len(rects))]
           rect = rects[np.argmax(rect_area)]
           x,y,w,h = rect
           cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
           roi_color = frame[y:y+h, x:x+w]

           #Resizing the face image
           crop = cv2.resize(roi_color, (256,256))

           #Subtraction from mean file
           #input_image = crop -mean_image
       input_image = rect
           #Getting the prediction
           start_prediction = time.time()
           prediction = gender_net.predict([input_image]) 
           gender = gender_list[prediction[0].argmax()]
           print("Time taken by DeepNet model: {}").format(time.time()-start_prediction)
           print prediction,gender
           cv2.putText(frame,gender,(x,y), cv2.FONT_HERSHEY_SIMPLEX, 1,(0,255,0),2)

           print("Total Time taken to process: {}").format(time.time()-start_time)
        #Showing output
        cv2.imshow("Gender Detection",frame)
        cv2.waitKey(1) 

#Delete objects
cap.release()
cv2.killAllWindows()

运行时出现错误:

a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
AttributeError: 'module' object has no attribute 'io'

我该如何解决。我正在使用 cnn_gender_age_prediction 模型。我想用python和cnn_gender_age模型做一个实时性别识别程序。

【问题讨论】:

  • 错误不言自明。尝试在模块上使用dir()
  • 您应该在$CAFFE_ROOT/python/caffe 文件夹中有io.py 文件。如果不是,那么你得到的咖啡有问题。尝试重新安装软件包。
  • @Shai 嗨,我看到了文件夹,我得到了io.py
  • 可以输入$CAFFE_ROOT/python/caffe/__init__.py的内容吗?
  • @SSj.Luffy 我做了dir( ),我得到了:>>> dir(caffe) ['AdaDeltaSolver', 'AdaGradSolver', 'AdamSolver', 'Classifier', 'Detector', 'Layer', 'NesterovSolver', 'Net', 'NetSpec', 'RMSPropSolver', 'SGDSolver', 'TEST', 'TRAIN', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_caffe', 'classifier', 'detector', 'get_solver', 'io', 'layer_type_list', 'layers', 'net_spec', 'params', 'proto', 'pycaffe', 'set_device', 'set_mode_cpu', 'set_mode_gpu', 'set_random_seed', 'to_proto'] >>>

标签: python machine-learning computer-vision caffe


【解决方案1】:

iocaffe 包中的一个模块。基本上当你输入import caffe时,它不会自动尝试导入caffe包中的所有模块,包括io。有两种解决方案。

第一个:手动导入caffe.io

import caffe
import caffe.io

第二个:更新到最新的caffe版本,在python/caffe目录下的__init__.py中找到一行:

from . import io

【讨论】:

  • 如果您阅读有关问题的 cmets,您会看到 OP 具​​有最新版本,并在 caffe init 中正确导入
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多