首页 > 解决方案 > TypeError:需要一个类似字节的对象,而不是尝试将 python 2.7 转换为 python 3.6 的“str”

问题描述

我正在研究监视系统。我在哪里使用 openface、flask、python、opencv。当我在 python 2.7 中运行 webapp.py 时,它工作正常。但是当我在 python 3.6 中运行时,我得到了错误。我解决了大部分错误,但我陷入了困境(需要一个类似字节的对象而不是'str')这是代码:

  def __init__(self):
        self.net = openface.TorchNeuralNet(args.networkModel, imgDim=args.imgDim,cuda=args.cuda)
        self.align = openface.AlignDlib(args.dlibFacePredictor)
        self.neuralNetLock = threading.Lock()
        self.predictor = dlib.shape_predictor(args.dlibFacePredictor)

        logger.info("Opening classifier.pkl to load existing known faces db")
        with open("generated-embeddings/classifier.pkl", 'r') as f: # le = labels, clf = classifier
            (self.le, self.clf) = pickle.load(f) # Loads labels and classifier SVM or GMM

其他部分代码如下:

 def reloadClassifier(self):
        with open("generated-embeddings/classifier.pkl", 'rb') as f: # Reloads character stream from pickle file
            (self.le, self.clf) = pickle.load(f, encoding= 'utf-8') # Loads labels and classifier SVM or GMM
        logger.info("reloadClassifier called")
        return True

和 pickle.dump() 放在这里:

  self.clf.fit(embeddings, labelsNum) #link embeddings to labels

        fName = "{}/classifier.pkl".format(workDir)
        logger.info("Saving classifier to '{}'".format(fName))
        with open(fName, 'wb') as f:
            pickle.dump((self.le,  self.clf), f) # Creates character stream and writes to file to use for recognition

标签: pythonpython-3.6

解决方案


使用时,pickle您应该将文件作为二进制文件读取。

只需更换:

with open("generated-embeddings/classifier.pkl", 'r') as f:

with open("generated-embeddings/classifier.pkl", 'rb') as f:

它应该可以工作。


推荐阅读