Python错误:赢得';t隐式地将Unicode转换为字节
我正在学习使用caffe和python的机器学习教程,但在尝试编译给定代码时遇到以下错误:Python错误:赢得';t隐式地将Unicode转换为字节,python,caffe,Python,Caffe,我正在学习使用caffe和python的机器学习教程,但在尝试编译给定代码时遇到以下错误: line 80, in <module> in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString()) TypeError: Won't implicitly convert Unicode to bytes; use .encode() 问题在于Python(二进制字符串)中有字节和常规str: >类型(b“测
line 80, in <module>
in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString())
TypeError: Won't implicitly convert Unicode to bytes; use .encode()
问题在于Python(二进制字符串)中有
字节和常规str
:
>类型(b“测试”)
>>>类型(“试验”)
字节
不被编码(例如US-ASCII、UTF-8等),而str
被编码。您可能想做的是确保使用Python版本<2.7,因为即使您修复了示例中有问题的代码,您也可能在其他地方遇到其他问题。我建议您尝试使用Pytork或Keras的最新教程(如果您想更详细地了解正在发生的事情,请使用Pytork,如果您对基本原理不太了解,并且希望更高层次地了解事情,请使用Keras)
import os
import glob
import random
import sys
sys.path.append("/usr/lib/python3/dist-packages")
import numpy as np
sys.path.append("/home/johannes/.local/lib/python3.8/site-packages")
import cv2
import caffe
from caffe.proto import caffe_pb2
import lmdb
#Size of images
IMAGE_WIDTH = 227
IMAGE_HEIGHT = 227
def transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT):
#Histogram Equalization
img[:, :, 0] = cv2.equalizeHist(img[:, :, 0])
img[:, :, 1] = cv2.equalizeHist(img[:, :, 1])
img[:, :, 2] = cv2.equalizeHist(img[:, :, 2])
#Image Resizing
img = cv2.resize(img, (img_width, img_height), interpolation = cv2.INTER_CUBIC)
return img
def make_datum(img, label):
#image is numpy.ndarray format. BGR instead of RGB
return caffe_pb2.Datum(
channels=3,
width=IMAGE_WIDTH,
height=IMAGE_HEIGHT,
label=label,
data=np.rollaxis(img, 2).tostring())
train_lmdb = '/home/johannes/Documents/Projektseminar/deeplearning-cats-dogs-tutorial-master/trainData'
validation_lmdb = '/home/johannes/Documents/Projektseminar/deeplearning-cats-dogs-tutorial-master/validation'
os.system('rm -rf ' + train_lmdb)
os.system('rm -rf ' + validation_lmdb)
train_data = [img for img in glob.glob("../train/*jpg")]
test_data = [img for img in glob.glob("../test1/*jpg")]
#Shuffle train_data
random.shuffle(train_data)
print('Creating train_lmdb')
in_db = lmdb.open(train_lmdb, map_size=int(1e12))
with in_db.begin(write=True) as in_txn:
for in_idx, img_path in enumerate(train_data):
if in_idx % 6 == 0:
continue
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
img = transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT)
if 'Ohne' in img_path:
label = 0
else:
label = 1
datum = make_datum(img, label)
in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString())
print('{:0>5d}'.format(in_idx) + ':' + img_path)
in_db.close()
print('\nCreating validation_lmdb')
in_db = lmdb.open(validation_lmdb, map_size=int(1e12))
with in_db.begin(write=True) as in_txn:
for in_idx, img_path in enumerate(train_data):
if in_idx % 6 != 0:
continue
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
img = transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT)
if 'Ohne' in img_path:
label = 0
else:
label = 1
datum = make_datum(img, label)
in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString())
print('{:0>5d}'.format(in_idx) + ':' + img_path)
in_db.close()
print('\nFinished processing all images')