def save_traindata(self): if not os.path.exists("svm.dat"): self.model.save("svm.dat") if not os.path.exists("svmchinese.dat"): self.modelchinese.save("svmchinese.dat") char_table = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '川', '鄂', '赣', '甘', '贵', '桂', '黑', '沪', '冀', '津', '京', '吉', '辽', '鲁', '蒙', '闽', '宁', '青', '琼', '陕', '苏', '晋', '皖', '湘', '新', '豫', '渝', '粤', '云', '藏', '浙'] provinces = [ "zh_cuan", "川", "zh_e", "鄂", "zh_gan", "赣", "zh_gan1", "甘", "zh_gui", "贵", "zh_gui1", "桂", "zh_hei", "黑", "zh_hu", "沪", "zh_ji", "冀", "zh_jin", "津", "zh_jing", "京", "zh_jl", "吉", "zh_liao", "辽", "zh_lu", "鲁", "zh_meng", "蒙", "zh_min", "闽", "zh_ning", "宁", "zh_qing", "靑", "zh_qiong", "琼", "zh_shan", "陕", "zh_su", "苏", "zh_sx", "晋", "zh_wan", "皖", "zh_xiang", "湘", "zh_xin", "新", "zh_yu", "豫", "zh_yu1", "渝", "zh_yue", "粤", "zh_yun", "云", "zh_zang", "藏", "zh_zhe", "浙" ] car_plate_w, car_plate_h = 136, 36 char_w, char_h = 20, 20 SZ = 20 # 训练图片长宽 MAX_WIDTH = 1000 # 原始图片最大宽度 Min_Area = 2000 # 车牌区域允许最大面积 PROVINCE_START = 1000 f = open('config.js') j = json.load(f) for c in j["config"]: if c["open"]: cfg = c.copy() break
时间: 2023-06-18 13:08:23 浏览: 379
这段代码看起来是一个保存训练数据的函数。首先,它检查是否存在名为"svm.dat"和"svmchinese.dat"的文件,如果没有就保存模型为这两个文件。然后定义了一个字符表和省份列表。接下来是一些参数的定义,包括训练图片的长宽、原始图片的最大宽度、车牌区域允许的最大面积等。最后,读取一个名为"config.js"的配置文件,根据其中的开关状态选择一个配置项。
相关问题
class CardPredictor: def __del__(self): self.save_traindata() def train_svm(self): # 识别英文字母和数字 self.model = SVM(C=1, gamma=0.5) # 识别中文 self.modelchinese = SVM(C=1, gamma=0.5) if os.path.exists("svm.dat"): self.model.load("svm.dat") else: chars_train = [] chars_label = [] for root, dirs, files in os.walk("train\\chars2"): if len(os.path.basename(root)) > 1: continue root_int = ord(os.path.basename(root)) for filename in files: filepath = os.path.join(root, filename) digit_img = cv2.imread(filepath) digit_img = cv2.cvtColor(digit_img, cv2.COLOR_BGR2GRAY) chars_train.append(digit_img) chars_label.append(root_int) chars_train = list(map(deskew, chars_train)) chars_train = preprocess_hog(chars_train) chars_label = np.array(chars_label) self.model.train(chars_train, chars_label) if os.path.exists("svmchinese.dat"): self.modelchinese.load("svmchinese.dat") else: chars_train = [] chars_label = [] for root, dirs, files in os.walk("train\\charsChinese"): if not os.path.basename(root).startswith("zh_"): continue pinyin = os.path.basename(root) index = provinces.index(pinyin) + PROVINCE_START + 1 # 1是拼音对应的汉字 for filename in files: filepath = os.path.join(root, filename) digit_img = cv2.imread(filepath) digit_img = cv2.cvtColor(digit_img, cv2.COLOR_BGR2GRAY) chars_train.append(digit_img) chars_label.append(index) chars_train = list(map(deskew, chars_train)) chars_train = preprocess_hog(chars_train) chars_label = np.array(chars_label) self.modelchinese.train(chars_train, chars_label)
这段代码实现了一个卡牌识别器,使用 SVM 算法来识别卡牌上的数字、英文字母和汉字。它将训练数据从文件中读取,对于数字和英文字母,训练数据位于 "train\\chars2" 文件夹中;对于汉字,训练数据位于 "train\\charsChinese" 文件夹中。训练数据中的每张图片都经过了去倾斜、HOG 特征提取等预处理操作,最后使用 SVM 算法进行训练。训练好的模型可以保存到文件中以便于之后的使用。当程序结束时,会自动保存训练数据。
if not os.path.exists(self.model_save_dir): os.makedirs(self.model_save_dir)
这段代码应该也是在某个类的初始化方法中出现的。它的作用是检查模型保存目录是否存在,如果不存在则创建该目录。具体含义如下:
- `self.model_save_dir`:表示模型保存目录的路径,应该是该类的一个属性。
- `os.path.exists(self.model_save_dir)`:判断模型保存目录是否存在。
- `os.makedirs(self.model_save_dir)`:如果模型保存目录不存在,则创建该目录。
阅读全文