口红色号识别器
- 选题
- 程序名称:
口红色号识别器
- 选题:
基于图像处理、人脸识别和 Flask 构建的图片口红色号识别及商品推荐系统
- 功能:
根据上传的图片自动化图像处理后分析脸部特征,并判断其嘴部妆容状态,依托现有大数据分析,识别其口红色号,并推荐相关商品,通过 Flask 服务器框架返回到网页前端并动态呈现
-
需求分析
-
应用场景
假设,圣诞前夕, 小姐姐 发来了一张美妆博主的美照,并暗示你,“人家也喜欢这个颜色。 ”
这个时候,用我们的口红色号识别器,就能定位嘴唇,并迅速给出它的颜色隶属哪家品牌的哪个色号。
- 需求分析
现代社会,化妆是一样很常见且必要的技能,本程序可以依据现有的图片,提取其口红色号,匹配其化妆品的型号。
-
设计
公开的后端接口:
接口 | 调用方式 | 返回值 | 说明 |
---|---|---|---|
/upload | [POST] \<str>ImgData=图片二进制数据 | \<JSON> Path: 上传完成后的在服务端的文件名 | 将图片上传到后端,保存为文件后返回 |
/getLip | [POST] \<str>Path=图片在服务端的路径 | \<JSON> state:状态,1 代表成功,0 代表失败 fcolor:识别出来的嘴唇部分颜色 list:识别出来颜色对应口红的字典 | 获取已上传的某张图片的嘴唇部分的颜色并返回与其匹配的口红列表 |
/matchColor | [post] \<str>Color=16 进制颜色值 | \<JSON> state:状态,1 代表成功,0 代表失败 list:与该颜色接近的口红的列表 | 根据给定的颜色值寻找在数据集中最相近的 5 款口红 |
内部模块接口
接口 | 调用方式 | 返回值 | 说明 |
---|---|---|---|
\@data. parseJSON | 初始化时自动调用 | 无 | 将庞大的口红数据集转为 python 可以直接使用的 list |
\@data. getLipstickByID | Args: \<str>ID:口红编号 | \<Tuple> | 根据口红的编号取口红的数据 |
\@data. matchSimlarLipstick | Args: \<int>Color:10 进制颜色值 | \<List> | 根据给定的颜色返回最接近的口红编号列表 |
\@data. matchSameColor | Args: \<int>color:10 进制颜色值 | \<tuple> | 返回与给定颜色同色系的口红列表 |
\@data. matchSameBrand | Args: \<str>brand;品牌 | \<tuple> | 返回与给定品牌同品牌的口红列表 |
\@face.iface .init | Args: \<str>Imgpath:欲处理的图片文件名 | \<None> | 初始化一个自己编写的 iface 对象 |
\@face.iface .hasFace | 直接调用,无参数 | \<BOOL> Ture/False | 检测该对象的图片是否存在完整人脸 |
\@face.iface .findLips | 直接调用,无参数 | \<Tuple> [0]:左顶点 [1]:宽度 [2]:高度 | 返回该对象图片中嘴唇所在的矩形区域 |
\@face.iface .getAndCutLipsRECT | Args: None | None | 截取 iface 中的嘴唇矩形图片,并保存 |
\@image. getLipsColor | Args: \<str>imagepath | None | 取得嘴唇图片中嘴唇部分的颜色 |
\@image. rgbTo10 | Args: \<int>r,g,b | \<int> | 将一个 RGB 颜色值转化为 10 进制颜色值 |
\@image. hexto10 | Args: \<str>HEX | \<int> | 十六进制到 10 进制转换 |
\@image. getRGB | Args: \<int>color | \<Turple> [0]:R [1]:G [2]:B | 从一个十进制的颜色值转为 R,G,B |
\@image. getColorDistan ce | Args: \<int>Color1 \<int>Color2 | \<int> | 取得两个颜色在 LAB 空间下的视差距离 |
项目文件结构:
文件名 | 功能 |
---|---|
/server.py | 项目的主程序 于惠松 负责 接受和处理来自网页的请求 基于 Flask |
/face.py | 人脸识别模块 耿茂荣 负责 负责对已上传的图片进行人脸采集 并提取其特征点 |
/image.py | 图像处理模块 靳浩昊 负责 负责对已采集好的特征点进行图像处理,通过算法提取其嘴唇颜色 |
/data.py | 数据处理模块 赵君夫 负责 负责对现有的包含各品牌口红的 JSON 数据进行分析处理 |
/data.json | 来源于网络的 包含了口红色号及品牌名称的庞大数据集 |
/static/ /temples/ | 静态网页资源 于惠松 负责 前端 HTML5 网页 UI 基于 MDUI 前端框架构建 交互由原生 JavaScript 的 FormData 和 XHR,实现异步 AJAX 请求 |
-
关键代码
-
运行效果
运行方式:运行 server.py 之后,在浏览器打开 http://127.0.0.1/
运行时总体没有出现大问题,但仍有部分图片识别错误,人脸特征点不对,或者把非人脸识别成人脸。
- 总结
- 对庞大数据集的处理
程序将口红数据储存在 lipstick.json 中,本程序遇到的难点在于如何把 JSON 数据集中庞大的数据转换为 python 中的列表,而且这个 JSON 数据采用了多重嵌套,本程序使用的解决方案是将 lipstick.json 一步一步解套然后加入到一个列表中。
- LAB 颜色空间算法
事实上,人眼对颜色的识别有非常大的偏差,当两个颜色值相差一定值的时候,在不同分量上的相差往往表现的观感不同,比如在红色上相差一定值往往比在绿色上相差一定值要来得更明显,在这种情况下,常规取色差的方法就显得不那么靠谱。
于是我们最终选择了查阅资料找到的 LAB 颜色空间算法,这种算法将 RGB 颜色转换为 LAB 颜色,LAB 颜色是以颜色在各个分量的比例确定的,更接近人眼的观感。
- Face_recognition 库
我们采用了 face_recognition 来识别人脸和处理脸部特征。但是在这个库安装的时候出现了许多问题,最后发现这个库需要一个前置库 cmake,还要安装 visual studio 来编译这个库之后才能使用。
- 程序处理时间的优化
在现代手机相机中,一张照片的尺寸是极大的,而在提取颜色的时候需要对所有的像素进行分析,这样的操作十分费时间。
举例说明,一个 4000*4000 像素的照片其操作的时间复杂度是 400*400 像素照片的 100 倍,因此,我们选择在上传前和后对图片进行压缩。
参考文献
- 文本综合处理平台的研究与实现(济南大学·王孟孟)
- 基于在线评论特征的消费者品牌决策偏好识别研究(华中师范大学·信丽敏)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于内容的服装检索系统的设计与实现(天津大学·刘楠楠)
- 基于ROR框架研究与应用(武汉理工大学·刘耿)
- 成语电子词典系统的设计与实现(电子科技大学·刘健)
- 基于内容的服装检索系统的设计与实现(天津大学·刘楠楠)
- 基于Django的模型参数分析系统的设计与实现(南京大学·府洁)
- 基于Python的非结构化数据检索系统的设计与实现(南京邮电大学·董海兰)
- 中学python课程知识图谱构建及应用研究(华中师范大学·黄健)
- 基于C/S结构的棉花商品库存管理系统设计与开发(浙江工业大学·徐李霞)
- 基于颜色特征的图像检索系统设计与实现(沈阳工业大学·邸洪波)
- 基于web的人脸识别登陆和管理系统设计与实现(郑州大学·王哲)
- 股票数据库管理系统的设计与实现(电子科技大学·卢火)
- 基于web的人脸识别登陆和管理系统设计与实现(郑州大学·王哲)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码助手 ,原文地址:https://bishedaima.com/yuanma/35894.html