在日常办公,会经常遇到批量修改文件名或者按照颜色分类颜色文件的情况,花费很多时间,也会消耗精力,于是决定开发此程序
打开想放置此代码的文件夹,例如D盘,那就打开D盘,鼠标右键,选择在终端中打开,然后输入以下命令,如图
若在线上代码仓库gitee上看到此开源代码,需要先将代码克隆到本地。在命令行终端上输入git clone https://gitee.com/iven_he/office-automation.git
进入代码文件夹
cd D:\office-automation
建议创建虚拟环境,防止污染全局python
python -m venv .venv
安装代码依赖库
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
此项目需要一个工作文件夹,包含了已经初步完成的800x1200尺寸的平铺图,命名规则:1200(x)。x是编号,应该从6开始;对于模特图,应该是以数字命名:例如1,2,3等。但是其他数字似乎没有影响。
一个标准的工作文件夹应该如下图所示
若是对于童装的多件套装,标准的工作文件夹应该如下图所示另外,若是有详情页,详情页的文件命名是:详情页.jpg
,与上图图片的位置应该一致
对详情页裁切完成后会自动删除详情页
的原始文件
务必备份所有文件在进行自动化操作,自动化操作的一切步骤不可撤销
首先要先进行颜色阈值的初始化——color_div/init.py
init.py是一个颜色阈值初始化程序,用于初始化颜色阈值,使得在后续的颜色识别中能够更加准确的识别颜色。传入的参数是包含所有文件夹路径。
在终端打开的文件夹会作为相对路径的根目录,保存的颜色阈值文件会保存在改目录下的下,建议每个工作文件夹都作为单独的项目,例如童装和成人应该分别初始化
建议直接讲图片保存在office-automation文件夹下,下面的指令都是讲工作文件夹放在office-automation下进行操作的
然后鼠标右键,在终端打开office-automation文件夹
如下图
.\.venv\Scripts\activate
然后使用cd指令进入工作文件夹中,例如
cd 42child3pureA
此时,终端显示应该是这样的
(.venv) (base) PS D:\code_python\office_automation\42child3pureA>
如图
运行init.py (PATH->init.py是指init.py的路径),例如:D:\code_python\office_automation\color_div\init.py
# 在命令结尾的-p(也可以是--path)是初始化图片的路径文件夹的参数
python PATH->init.py -p D:\AM66
# 或者
python PATH->init.py --path D:\AM66
如图
注意:
图中的./
是指D:\code_python\office_automation\42child3pureA
下的根目录,即D:\code_python\office_automation\42child3pureA
- 运行程序后会出现3个窗口,一个窗口调整阈值滑块,一个窗口显示原图片,一个窗口显示识别后的图片
-
先调整index滑块,使得显示的图片是需要识别的图片
-
滑动阈值滑块,调整HSV颜色阈值,使在尽可能小的阈值范围将衣服尽可能多的显示白色
-
调整area滑块,用尽可能大的值使得显示原图像的窗口出现完整的绿色框框住衣服 如图
-
调整chooes_area滑块,0对应模特的识别面积,1对应平铺图的识别面积
-
阈值调整完毕后再次滑动index滑块,确定阈值调整的效果,不会识别到别的颜色,如果效果不佳,反复调整阈值
-
选择color对应的数字:
0 :'白色'
1:'黑色'
2:'浅紫'
3:'粉红'
4:'浅蓝'
5:'浅绿'
6:'杏色'
7:'浅黄'
8:'红色'
9:'黄色'
10:'深灰'
11:'卡其'
12:'虾玉色'
13:'雾霾蓝'
14:'天蓝'
15:'水蓝'
16:'橙色'
17:'克莱因蓝'
18:'草绿'
19:'紫色'
20:'彩兰'
21:'啡色'
22:'花灰'
23:'灰蓝'
- 滑动两个save滑块完成保存操作,然后一定要把save滑块归零,然后调整index设置其他颜色的阈值 完成初始化后,文件夹的结构应该是这样的
! 注意,每个面积保存一次后,理论上来说不需要再调整 !
备份工作文件夹,以防出现意外
以上图的工作文件夹为例,程序会对所有图片进行裁剪和分类
在终端执行命令(需要激活虚拟环境)
然后使用cd指令进入工作文件夹中,如果已经进入,不必理会,例如
cd 42child3pureA
激活虚拟环境,如果已经激活,不必理会
.\.venv\Scripts\activate
此时,终端显示应该是这样的
(.venv) (base) PS D:\code_python\office_automation\42child3pureA>
运行程序,无需粘贴png图片(默认),没有多颜色分类(多件童装的形式)(默认),没有提供额外的主图文件夹(默认),需要颜色分类,代码实例如下
python officeautomation.py --path D:\42maleT-A2-2
运行程序,无需粘贴png图片(默认),没有多颜色分类(多件童装的形式)(默认),没有提供额外的主图文件夹(默认),不需要需要颜色分类,代码实例如下
python officeautomation.py --path D:\42maleT-A2-2 --ifcolordiv False
对于多颜色童装例如下图的情况
一般需要粘贴png图片以下是多颜色的童装并且需要粘贴png的代码实例
python path->office_automation.py --path D:\KC-33-171009\AM66 --morecolor true --stack true --stack_path path->png --xposition 90 --yposition 760
如图
以上指令
参数--xposition
是png的粘贴x轴(横向)位置
参数--yposition
是png的粘贴y轴(纵向)位置
参数--path
是图片所在的路径
参数--morecolor
是指是(true)否(false)是多颜色识别
参数--stack
是指是(true)否(false)是粘贴png图片
参数--stack_path
是指png图片的路径
path->office_autmation.py
是office_automation.py的路径,path->png
同理
运行后会弹出一个粘贴png的预览窗口,如果预览结果比较满意,按任意键可以继续运行代码
若出现png粘贴位置不合预期,将窗口切回终端,按ctrl+C,然后关掉窗口,强行终止程序,然后按上箭头
键重复上一次运行的命令,调整--xposition
和--yposition
参数的值,然后回车运行
- 添加了多颜色识别的功能,对于三颜色童装和双颜色通知提供了多颜色分类,在main函数的调用将morecolor参数改为True即可
- 添加了png图片的粘贴
- 对于多件套装的童装需要粘贴png图片(两件装等),在main函数封装了stack参数,如果需要粘贴,将stack参数改为True,stack_path改为png的路径,position改为粘贴的位置坐标。
修改为命令行传参形式
- 添加新的颜色
- 随机将两张主图的800x800尺寸的图片移动到项目根目录下,并且改名为主题(n).jpg
- 对于含有中文路径的图片不进行图像识别操作
- 添加了详情页的裁切功能
- 更正了单件童装不识别的问题
-
如果对参数不清楚,可以输入以下命令查看帮助
python officeautomation.py -h
-
/
是指相对路径,\
是指绝对路径,参考绝对路径和相对路径的区别 -
对于一些参数前面的
r
,是指原始字符串,在python中\
是一种转义字符,要忽略这种转义,在字符串前加r,例如r'D:\42maleT-A2-2'
,这样就可以忽略\
的转义
此操作需要修改源代码
-
第63行修改第四个参数,这个数字是指
颜色的总数-1
,例如现在有24种颜色,那么这个数字应该是23cv2.createTrackbar('color', 'test', 0, 23, callback)
-
第33行的dist是一个字典,添加新的颜色,
编号:颜色名
-
第53行是需要创建的颜色文件夹的列表,在内添加新的颜色,如果这个颜色不添加,这个文件夹就不会创建,移动文件的时候文件就会丢失
-
如果这个颜色是需要单颜色的识别,即成人的一件装,在代码128行开始的
# region 单件装颜色识别
的区域到170行的# endregion
的区域添加新的颜色的识别代码,格式如下elif color_detect(img, '颜色名.npy', areafile=area): mvfile([i], os.path.join(path, '颜色名'))
-
如果这个颜色是需要多颜色的识别,即童装的多件装,在代码188行开始的
# region 对于童装套装的颜色识别
的区域到202行的# endregion
的区域添加新的颜色的识别代码,格式如下if color_detect(img, '颜色名.npy', areafile=area) and len(dict_[file_path]) < 3: dict_[file_path].append('颜色名')
事后再P尺寸1200的主图模特图,直接存在主图文件夹。然后打开cutter/cut.py在结尾函数调用的位置调整参数,比如有多个图片(A和B)都在主图路径(D:\41short\KC-41-XOU179\主图)下,并且A和B都是主图模特图,需要进行裁剪
cut_cut('B.jpg','A.jpg',path=r'D:\41short\KC-41-XOU179\主图')
运行文件
对于设计人员,有很多的图片在本地难以寻找,但是又有相似的图片,这个图片可能是原图片的缩放版本,现在想知道原图片的位置
打开match/matcher.py,调整结尾的函数参数,第一个参数是原图片可能会存在的文件夹路径,第二个参数是需要寻找的图片的路径(现有图片)
main('D:\\', 'C:\\user\\desktop\\1.png')
这是一个颜色分类的模块,用于将图片按照颜色分类,单颜色识别的时候,调用的函数是main
函数,多颜色识别的时候调用的函数是main_more_color
函数
想单独使用这个模块,要对源码修改,现将结尾if '__name__' == '__main__':
的多余代码注释掉,然后在下一行调用main
或者main_more_color
函数,两个函数都有传入两个参数:path
和area
# path 是图片的路径,例如:'D:\42male2-5\S255'
# area 是图片的面积的路径,例如:'D:\42male2-5\S255\area1.npy'
main(path=r'D:\42male2-5\S255', area='D:\42male2-5\S255\area1.npy')
此函数会将此文件夹D:\42male2-5\S255
下的图片按照颜色分类,将图片移动到对应的颜色文件夹下,多颜色识别的时候,会将图片移动到多颜色文件夹下
注意,此文件运行之前要先运行init.py文件,初始化颜色阈值
对于多颜色识别,需要调用main_more_color
函数,传入两个参数,path
和area
# path 是图片的路径,例如:'D:\42male2-5\S255'
# area 是图片的面积的路径,例如:'D:\42male2-5\S255\area1.npy'
main_more_color(path=r'D:\42male2-5\S255', area='D:\42male2-5\S255\area1.npy')
此函数会将此文件夹D:\42male2-5\S255
下的图片按照颜色分类,将图片移动到对应的颜色(黄色+草绿)
文件夹下,多颜色识别的时候,会将图片移动到多颜色文件夹下
注意,此文件运行之前要先运行init.py文件,初始化颜色阈值,并且只对童装套装有效
这是一个图片裁切的模块,用于将图片裁切成800x800和750x1000的图片,主要用于主图模特图的裁切,调用的函数是cut_cut
函数
先传入不定参数——图片名,然后传入path
参数,这个参数是图片所在的文件夹路径
#一下案例是对D:\41short\KC-41-XOU179\主图 文件夹下的A.jpg和B.jpg进行裁切,如果A.jpg和B.jpg有任意一个大小不是800x1200,会抛出异常
cut_cut('A.jpg','B.jpg',path=r'D:\41short\KC-41-XOU179\主图')
在许多设计公司,印花的图片可能存在共享网络的电脑上,现有需求,本地用户直接在共享网络文件中查找图片路径
match/test.py文件是在测试在局域网共享网络中连接其他主机的共享文件夹,然后尝试在内读取图片文件
现有难点:
1.无法获取目标计算机文件下下的文件路径,只能获取文件夹的名次,若有在共享文件夹中有os.walk类似的方法似乎可以解决这个问题
2.无法使用OpenCV的decode方法打开目标文件夹下的图片