From d0df5d42d334c9fa77493236be7ce901eeed8c41 Mon Sep 17 00:00:00 2001 From: FEIJINTI <83849113+FEIJINTI@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:14:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第一次合并 --- .gitignore | 142 ++------------- README.md | 48 +++++ classifer.py | 363 ++++++++++++++++++++++++++++++++++++++ pics/TODO.png | Bin 0 -> 30635 bytes pics/result.png | Bin 0 -> 35291 bytes pics/从木板中提取色彩.png | Bin 0 -> 15399 bytes pics/色彩分类.png | Bin 0 -> 26973 bytes root_dir.py | 10 ++ socket_detector.py | 71 ++++++++ utils.py | 73 ++++++++ 10 files changed, 579 insertions(+), 128 deletions(-) create mode 100644 README.md create mode 100644 classifer.py create mode 100644 pics/TODO.png create mode 100644 pics/result.png create mode 100644 pics/从木板中提取色彩.png create mode 100644 pics/色彩分类.png create mode 100644 root_dir.py create mode 100644 socket_detector.py create mode 100644 utils.py diff --git a/.gitignore b/.gitignore index b6e4761..39d471a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,129 +1,15 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: +data/correct/*.bmp +data/dark/*.bmp +data/light/*.bmp +data/middle/*.bmp +data1 +data2 +data3 +data4 +data5 +.idea +__pycache__ +*.pyc +test.py *.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ +.models \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ea35201 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# 木地板分色识别项目 + +## 训练数据准备 + +请在使用前在同一文件夹下创建data文件夹,所需的文件目录如下: + +```bash +. +├── README.md +├── classifer.py +├── data +│ ├── dark +│ ├── light +│ └── middle +``` + +上上面所示的三个文件夹下分别放置三种不同色彩的木板图片就可以训练了。 + +当然不要放除了图片外的东西,不然程序会出错哦。 + +## 色彩提取 + +下图为色彩提取效果: + +![从木板中提取色彩](./pics/从木板中提取色彩.png) + +我们利用概率的方法以随机对抗随机,然后使用二项分布的概率分位点即可获得任意纯度下的木板色彩。 + +但是纯度过高有时反而会难以反映木板的颜色,所以关于纯度的取舍还需调整。目前的纯度要求0.99999下,该木板的分类效果好像可以有较好的表现,反正之后再调整嘛~ + +## 色彩分布 + +我们可以明显发现,在进行了色彩提纯后,色彩的区分度在lab空间下的ab平面还是很具备可分性的,所以直接用logistic regression这样的线性方法就够了。 + +![色彩分类](./pics/色彩分类.png) + +在classifer中还有6处简单的TODO, 交给老孙完成了,加油! + +![image-20201105104225975](./pics/TODO.png) + + + +最终通过选择多次特征的组合,找到了效果比较好的特征 1 2 6 7 8 或 1 2 6 7 + +在数据集上的测试准确率为: 97.05% + +![测试结果](./pics/result.png) + diff --git a/classifer.py b/classifer.py new file mode 100644 index 0000000..e9311e1 --- /dev/null +++ b/classifer.py @@ -0,0 +1,363 @@ +# -*- coding: utf-8 -*- +""" +Created on Nov 3 21:18:26 2020 + +@author: l.z.y +@e-mail: li.zhenye@qq.com +""" +import sys +import numpy as np +import cv2 +from sklearn.cluster import KMeans +from sklearn.linear_model import LogisticRegression +from sklearn.model_selection import train_test_split +from sklearn.metrics import accuracy_score +from scipy.stats import binom +import matplotlib.pyplot as plt +import time +import pickle +import os +sys.path.append(os.getcwd()) +from root_dir import ROOT_DIR +import utils + +FEATURE_INDEX = [0, 1, 2, 6, 7] + + +class WoodClass(object): + def __init__(self, load_from=None, w=2048, h=12450, n=5000, p1=0.3, pur=0.99999, single_pick_mode=False, + debug_mode=False): + """ + 初始化. + + :param w: 图像的尺寸w + :param h: 图像的尺寸h + :param p1: 木板色彩在图像中的比例p1 + :param n: 采集用于识别的样本点的个数 + :param single_pick_mode: 是否使用单点提取方案 + """ + if load_from is None: + if w is None or h is None: + print("It will damage your performance if you don't set w and h and use single_pick_mode!") + raise ValueError("w or h is None") + self.pur, self.p1, self.k = pur, p1, 1 + self.w, self.h, self.n = w, h, n + self.ww, self.hh = None, None + self.width = None + self._single_pick = single_pick_mode + self.set_purity(self.pur) + self.change_pick_mode(single_pick_mode) + self.model = LogisticRegression(C=1e5) + else: + self.load(load_from) + self.isCorrect = False + self.correct_color = None + self.log = utils.Logger(is_to_file=debug_mode) + self.debug_mode = debug_mode + self.image_num = 0 + + def change_pick_mode(self, single_pick_mode): + """ + 更改图像提取方法, + + :param single_pick_mode:若True, 则为单点随机抽取模式 + :return: None + """ + w, h, n = self.w, self.h, self.n + + if single_pick_mode: + self._single_pick = True + width = int(np.floor(np.sqrt(w * h / n))) + w0, h0 = np.arange(0, w-width, width), np.arange(0, h-width, width) + self.ww, self.hh = np.meshgrid(w0, h0) + self.width = width + else: + self._single_pick = False + ratio = np.sqrt(n / (w * h)) + self.ww, self.hh = int(ratio * w), int(ratio * h) + + def get_rand_sample(self, x): + """ + 在图像中进行随机抽取,如果single_pick_mode为True,则为真随机抽取,反之为假的抽取. + + :param x: + :return: + """ + if self._single_pick: + offset_w, offset_h = np.random.randint(0, self.width), np.random.randint(0, self.width) + sample = x[self.hh+offset_h, self.ww+offset_w, ...] + else: + sample = cv2.resize(x, (self.ww, self.hh)) + return sample + + def fit_pictures(self, data_path=ROOT_DIR): + """ + 根据给出的data_path 进行 fit.如果没有给出data目录,那么将会使用当前文件夹 + :param data_path: + :return: + """ + # 训练数据文件位置 + result = self.get_train_data(data_path) + if result is False: + return 0 + x, y = result + score = self.fit(x, y) + self.save() + return score + + def fit(self, x, y, test_size=0.1): + x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=test_size, random_state=0) + self.model.fit(x_train, y_train) + y_pred = self.model.predict(x_test) + pre_score = accuracy_score(y_test, y_pred) + self.log.log("Test accuracy is:"+str(pre_score * 100) + "%.") + y_pred = self.model.predict(x_train) + pre_score = accuracy_score(y_train, y_pred) + self.log.log("Train accuracy is:"+str(pre_score * 100) + "%.") + y_pred = self.model.predict(x) + pre_score = accuracy_score(y, y_pred) + self.log.log("Total accuracy is:"+str(pre_score * 100) + "%.") + return int(pre_score*100) + + def calculate_p1(self, x, remove_background=False): + """ + + :param x: + :param remove_background: + :return: + """ + if remove_background: + x = self.remove_background(x) + kmeans = KMeans(n_clusters=2, init='k-means++') + kmeans.fit(x) + result = kmeans.predict(x) # 聚类结果 + + def predict(self, img): + """ + :param img: 输入图像 + :return: 分类值 + """ + if self.debug_mode: + cv2.imwrite(str(self.image_num) + ".bmp", img) + self.image_num += 1 + feature = self.extract_feature(img, remove_background=False, debug_mode=False) + feature = feature.reshape(1, -1)[:, FEATURE_INDEX] + if self.isCorrect: + feature = feature / (self.correct_color+1e-4) + pred_color = self.model.predict(feature) + if self.debug_mode: + self.log.log(feature) + return int(pred_color[0]) + + def correct(self, img=None, img_path=None): + """ + 记录校准值,将校准值记录到类别内 + :param img: 校准板图片 + :param img_path: 用于校准的图片路径 + :return: 0 if correct success, 1 if failed + """ + if img is None: + path = os.path.join(ROOT_DIR, "data", "correct") + utils.mkdir_if_not_exist(path) + file_list = os.listdir(path) + if len(file_list) == 0: + return 1 + if img_path is None: + file_name = os.path.join(ROOT_DIR, "data", "correct", file_list[-1]) + else: + file_name = img_path + img = cv2.imread(file_name) + + feature = self.extract_feature(img)[FEATURE_INDEX] + self.correct_color = feature + self.isCorrect = True + self.log.log("Correct Successfully!") + return 0 + + def set_purity(self, purity): + self.pur = purity + vs_pur = 1 - self.pur + for i in range(self.n): + vs_pur_i = binom.cdf(k=i, p=self.p1, n=self.n) + if vs_pur_i > vs_pur: + self.k = i + return i + + def remove_background(self, x): + # TODO: 利用色度?饱和度或者明度?亮度?去除背景 + # 去背景的方法效果不好,太慢了,所以没弄了。。。 + # x = x[2000:16000, 300:1600, :] + x = x[2000:10000, 300:1600, :] + return x + + def save(self, file_name=None): + """ + 保存当前文件下的classify.model文件模型 + save_parameters 为要保存的参数 + :return: None + """ + if file_name is None: + file_name = "model_" + time.strftime("%Y-%m-%d_%H-%M") + ".p" + file_name = os.path.join(ROOT_DIR, "models", file_name) + model_dic = {"n": self.n, "k": self.k, "p1": self.p1, "pur": self.pur, "model": self.model, + "ww": self.ww, "hh": self.hh, "width": self.width, "w": self.w, "h": self.h, + "mode": self._single_pick, "isCorrect": self.isCorrect} + with open(file_name, "wb") as f: + pickle.dump(model_dic, f) + self.log.log("Save file to '" + str(file_name) + "'") + + def load(self, path=None): + if path is None: + path = os.path.join(ROOT_DIR, "models") + utils.mkdir_if_not_exist(path) + model_files = os.listdir(path) + if len(model_files) == 0: + self.log.log("No model found!") + return 1 + self.log.log("./ Models Found:") + _ = [self.log.log("├--"+str(model_file)) for model_file in model_files] + file_times = [model_file[6:-2] for model_file in model_files] + latest_model = model_files[int(np.argmax(file_times))] + self.log.log("└--Using the latest model: "+str(latest_model)) + path = os.path.join(ROOT_DIR, "models", str(latest_model)) + with open(path, "rb") as f: + model_dic = pickle.load(f) + self.n, self.k, self.p1, self.pur = model_dic["n"], model_dic["k"], model_dic["p1"], model_dic["pur"] + self.ww, self.hh, self.width = model_dic["ww"], model_dic["hh"], model_dic["width"] + self.w, self.h, self.model = model_dic["w"], model_dic["h"], model_dic["model"] + self.isCorrect = model_dic["isCorrect"] + self._single_pick = model_dic["mode"] + self.set_purity(self.pur) + self.change_pick_mode(self._single_pick) + return 0 + + def extract_feature(self, x, correct_color=False, remove_background=False, debug_mode=False): + """ + 获取图片的特征,色彩值的mean和var【l, a, b, s_l, s_a, s_b】. + :param x: 图片 + :param correct_color: 是否进行颜色校准 + :param remove_background:是否需要移除背景 + :param debug_mode: 是否使用debug模式 + :return: + """ + if remove_background: + x = self.remove_background(x) + x = self.get_rand_sample(x) + if correct_color is True: + x = x / self.correct_color + if debug_mode: + plt.figure() + plt.subplot(211) + plt.imshow(cv2.cvtColor(x, cv2.COLOR_BGR2RGB)) + x_hsv = cv2.cvtColor(x, cv2.COLOR_BGR2HSV) + x = cv2.cvtColor(x, cv2.COLOR_BGR2LAB) + x = np.concatenate((x, x_hsv), axis=2) + x = np.reshape(x, (x.shape[0]*x.shape[1], x.shape[2])) + x = x[np.argsort(x[:, 0])] + x = x[-self.k:, :] + if debug_mode: + # self.log.log(x) + self.log.log(x.shape) + # self.log.log(self.k) + # self.log.log(x) + self.log.log(x.shape) + mean_value = np.mean(x, axis=0) + if debug_mode: + self.log.log("mean color:"+str(mean_value)) + plt.subplot(212) + color_img = np.asarray(np.ones((100, 100, 3), dtype=np.uint8) * mean_value[:3], dtype=np.uint8) + color_img = cv2.cvtColor(color_img, cv2.COLOR_LAB2RGB) + plt.imshow(color_img) + plt.show() + var_value = np.var(x, axis=0) + feature = np.hstack((mean_value, var_value)) + if debug_mode: + self.log.log("var: "+str(var_value)) + return feature + + def get_image_data(self, img_dir="./data/dark"): + """ + :param img_dir: 图像文件的路径 + :return: 图像数据 + """ + img_data = [] + utils.mkdir_if_not_exist(img_dir) + files = os.listdir(img_dir) + if len(files) == 0: + return False + for file in files: + path = os.path.join(img_dir, file) + if self.debug_mode: + self.log.log(path) + train_img = cv2.imread(path) + data = self.extract_feature(train_img) + img_data.append(data) + img_data = np.array(img_data) + return img_data + + def get_train_data(self, data_dir=None, plot_2d=True, plot_data_3d=False, save_data=False): + """ + 获取图像数据 + :return: x_data, y_data + """ + data_dir = ROOT_DIR if data_dir is None else data_dir + dark_data = self.get_image_data(img_dir=os.path.join(data_dir, "data", "dark")) + middle_data = self.get_image_data(img_dir=os.path.join(data_dir, "data", "middle")) + light_data = self.get_image_data(img_dir=os.path.join(data_dir, "data", "light")) + if (dark_data is False) or (middle_data is False) or (light_data is False): + return False + x_data = np.vstack((dark_data, middle_data, light_data)) + dark_label = np.zeros(len(dark_data)).T + middle_label = np.ones(len(middle_data)).T + light_label = 2 * np.ones(len(light_data)).T + y_data = np.hstack((dark_label, middle_label, light_label)) + x_data = x_data[:, FEATURE_INDEX] + # 进行色彩数据校正 + if self.isCorrect: + x_data = x_data / (self.correct_color+1e-4) + if plot_data_3d: + fig = plt.figure() + ax = fig.add_subplot(1, 1, 1, projection="3d") + ax.scatter(x_data[:, 1], x_data[:, 2], x_data[:, 0], c=y_data, edgecolors="k") + ax.set_xlabel("a*") + ax.set_ylabel("b*") + ax.set_zlabel("l") + plt.show() + if plot_2d: + plt.figure() + plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data) + plt.show() + # 尝试最合适的特征组合,保存提取出的特征的方法 + # 0: l, 1: a, 2: b, 3: var(l), 4: var(a), 5: var(s), 6: h, 7: s, 8: v, 9: var(h) 10: var(s): 11: var(v) + # 全部:0.941 + # [:, [0, 1, 2, 3, 4, 5, 6, 7]] : 0.88 + # [:, [0, 1, 2]] : 0.911 + # [:, [0, 1, 2, 6, 7, 8]] : 0.941 + # [:, [1, 2, 6, 7, 8]] : 0.9705 + # [:, [1, 2, 6, 7]] : 0.9705 + # [:, [1, 2, 4, 5, 6, 7]] : 0.941 + # [:, [0, 1, 2, 6, 7]] : 0.8529 + if save_data: + with open(os.path.join("data", "data.p"), "rb") as f: + pass + return x_data, y_data + + +if __name__ == '__main__': + # 初始化wood + wood = WoodClass(w=4096, h=1200, n=3000, debug_mode=False) + print("色彩纯度控制量{}/{}".format(wood.k, wood.n)) + wood.correct() + # wood.load() + # fit 相应的文件夹 + wood.fit_pictures(data_path=r"C:\Users\FEIJINTI\PycharmProjects\wood_color") + + # 测试单张图片的预测,predict_mode=True表示导入本地的model, False为现场训练的 + pic = cv2.imread(r"./data/dark/rgb60.png") + start_time = time.time() + for i in range(100): + wood_color = wood.predict(pic) + end_time = time.time() + print("time consume:"+str((end_time - start_time)/100)) + print("wood_color:"+str(wood_color)) + diff --git a/pics/TODO.png b/pics/TODO.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6bbeaef7f7a40095c88cf54bc65a24556a6e94 GIT binary patch literal 30635 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

&s{(n6cE@e`0;oq! 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

#xv*h}wysIq|-FG(`1HL8XU{=JLtVAle< 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 aUG_d<#G{u+`xwBAAdSnqmx?b~-}xV^7IXao literal 0 HcmV?d00001 diff --git a/pics/色彩分类.png b/pics/色彩分类.png new file mode 100644 index 0000000000000000000000000000000000000000..521035e0f975b9f339bb84a53c4e39d13545c9b3 GIT binary patch literal 26973 zcmeFZbx<5pye)WOlx&X%2-jhT({qlJ^xk1s4N|NTC*or5_`0$F4j6x2s38F3Lcx3r@bcQ3Ws zg^u&JWUAyN204G_I0+1Le>f;cIU+FZ7&oW= zDG)<6w8$LE8A=q9JP;90<^lLE9{DSe1$d(e@&7;k-_J(qFUse51`Rf|5qt+nM`hVR z7Lz$<{e|+Wl9__u(z3D?pFRa(ev(vDQ=2Ip{RxB6a6PB9zgWj0BO~*kkRuch1sC?x z2AFgV%wF7Zyz=5=av`D2CA;=?BDz&MlF`J2^)^d; zGsPdEAgdk>I5;?r`YlOEN7nit`&86llRBE55Ak_^d>6LI5AKAl`N+x2BFh%Lc*g+G zG$&v#rKE%&80jBPik1M~5d17WX5GCSc?pRi_^WEu;S^Hf<5S~8uU<7S$;rtN$>teI zcXhW%3%SsZgYvcxv8l^Xt2ajr(@n5=!J-cNYlNt%s3YloiM6#H7nhf*r0rW^Ik)Y2 zjfRJVQW-@>^OvW4o^*v^RHB`0U4_CAh0_a81|Zaq3;|DRdHLh2+mC@56b|3i)xn90 zQnIqLMPj_BhN)MHj9OhiVIPXi%c*E+Lh|Jj!RhHMPEYX~`i5PBNG7JHhBXV)U%#5H zcLiPTO?DshnvW!Pev09DnA$8ZE(Tu(VTj&gqjq-~^6@AuDGA%#vx4Tz3}=dzBgup^ z#6r+GNqqORLugr8%onOn%XA>obgBiPZI^ktY!_Up~ZGrqUr01t

Z8np4ztw0)e0vQY0+vv{~PO+WUh9 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 G0{#n!uK`g2 literal 0 HcmV?d00001 diff --git a/root_dir.py b/root_dir.py new file mode 100644 index 0000000..3a7d5d8 --- /dev/null +++ b/root_dir.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +""" +Created on Nov 3 21:18:26 2020 + +@author: l.z.y +@e-mail: li.zhenye@qq.com +""" +import os + +ROOT_DIR = r"C:\Users\FEIJINTI\PycharmProjects\wood_color" \ No newline at end of file diff --git a/socket_detector.py b/socket_detector.py new file mode 100644 index 0000000..b6612e7 --- /dev/null +++ b/socket_detector.py @@ -0,0 +1,71 @@ +import socket +import numpy as np +import cv2 +from classifer import WoodClass +import time + + +def main(): + model_path = "models/model_2022-09-06_13-08.p" + socket_receive = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + socket_receive.connect(('127.0.0.1', 21122)) + socket_send = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + socket_send.connect(('127.0.0.1', 21123)) + # _ = socket_receive.recv(4096*1000*10) + detector = WoodClass(w=4096, h=1200, n=3000, debug_mode=False) + detector.load(path=model_path) + while True: + # receive data + t1 = time.time() + size_buff = socket_receive.recv(4) + n_rows, n_cols = size_buff[0] << 8 | size_buff[1], size_buff[2] << 8 | size_buff[3] + data_size = n_rows * n_cols * 3 + print(data_size) + recv_size = data_size + buff_all, size = [], 0 + while True: + data_buff = socket_receive.recv(recv_size) + recv_size -= len(data_buff) + buff_all += data_buff + if recv_size == 0: + break + print(len(buff_all)) + raw_data = np.frombuffer(bytes(buff_all), dtype=np.uint8).reshape(int(n_rows), int(n_cols), -1) + print(raw_data.shape) + wood_color = detector.predict(raw_data) + # cv2.imshow("img", raw_data) + # cv2.waitKey(30) + # print('Class is ', wood_color) + if wood_color == 0: + socket_send.send(b'S') + print('S send success') + elif wood_color == 1: + socket_send.send(b'Z') + print('Z send success') + elif wood_color == 2: + socket_send.send(b'Q') + print('Q send success') + print((time.time()-t1)) + + +if __name__ == '__main__': + # 2个端口 + # 接受端口21122 + # 发送端口21123 + # 接收到图片 n_rows * n_bands * n_cols, float32 + # 发送图片 n_rows * n_cols, uint8 + main() + # test(r"D:\build-tobacco-Desktop_Qt_5_9_0_MSVC2015_64bit-Release\calibrated15.raw") + # main() + # debug_main() + # test_run(all_data_dir=r'D:\数据') + # with open(r'D:\数据\虫子\valid2.raw', 'rb') as f: + # data = np.frombuffer(f.read(), dtype=np.float32).reshape(600, 29, 1024).transpose(0, 2, 1) + # plt.matshow(data[:, :, 10]) + # plt.show() + # detector = SpecDetector('model_spec/model_29.p') + # result = detector.predict(data) + # + # plt.matshow(result) + # plt.show() + # result = result.reshape((600, 1024)) diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..eec4a8f --- /dev/null +++ b/utils.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +""" +Created on Nov 3 21:18:26 2020 + +@author: l.z.y +@e-mail: li.zhenye@qq.com +""" +import os +import shutil +import time + + +def mkdir_if_not_exist(dir_name, is_delete=False): + """ + 创建文件夹 + :param dir_name: 文件夹 + :param is_delete: 是否删除 + :return: 是否成功 + """ + try: + if is_delete: + if os.path.exists(dir_name): + shutil.rmtree(dir_name) + print('[Info] 文件夹 "%s" 存在, 删除文件夹.' % dir_name) + + if not os.path.exists(dir_name): + os.makedirs(dir_name) + print('[Info] 文件夹 "%s" 不存在, 创建文件夹.' % dir_name) + return True + except Exception as e: + print('[Exception] %s' % e) + return False + + +def create_file(file_name): + """ + 创建文件 + :param file_name: 文件名 + :return: None + """ + if os.path.exists(file_name): + print("文件存在:%s" % file_name) + return False + # os.remove(file_name) # 删除已有文件 + if not os.path.exists(file_name): + print("文件不存在,创建文件:%s" % file_name) + open(file_name, 'a').close() + return True + + +class Logger(object): + def __init__(self, is_to_file=False, path=None): + self.is_to_file = is_to_file + if path is None: + path = "wood.log" + self.path = path + create_file(path) + + def log(self, content): + if self.is_to_file: + with open(self.path, "a") as f: + print(time.strftime("[%Y-%m-%d_%H-%M-%S]:"), file=f) + print(content, file=f) + else: + print(content) + + +if __name__ == '__main__': + log = Logger(is_to_file=True) + log.log("nihao") + import numpy as np + a = np.ones((100, 100, 3)) + log.log(a.shape)