python - 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
解决方案
使用时,pickle
您应该将文件作为二进制文件读取。
只需更换:
with open("generated-embeddings/classifier.pkl", 'r') as f:
和
with open("generated-embeddings/classifier.pkl", 'rb') as f:
它应该可以工作。
推荐阅读
- scala - spark - 数据帧在 scala 源代码中定义
- php - 如何迭代 Twig 循环中的许多属性?
- css - 首选降低透明度媒体查询参数的动机是什么
- json - 为什么我在 Json 响应中得到空链接作为嵌入式资源的一部分?
- android - 如何在 Buttonclick 上的 Android Studio 中将数据保存在我的 Deque 中?
- linux - 处理 Linux 文件上的回车和换行
- c# - 如何在 c# 代码中打开/浏览 html?
- java - 使用 tsVector 在 NativeQuery 中设置参数
- cron - Cron 表达式格式:`*` 和 `?`
- java - camel-activemq 组件和camel-http4 组件版本不兼容