首页 > 编程语言 >Python课程设计项目期末大作业(含免费源代码)

Python课程设计项目期末大作业(含免费源代码)

时间:2024-07-25 10:00:16浏览次数:19  
标签:课程设计 iface 颜色 Python 口红 face 源代码 data 图片

选题

代码下载地址:https://download.csdn.net/download/s44359487yad/89572689

  1. 选题

  2. 程序名称:

口红色号识别器

  1. 选题:

基于图像处理、人脸识别和Flask构建的图片口红色号识别及商品推荐系统

  1. 功能:

根据上传的图片自动化图像处理后分析脸部特征,并判断其嘴部妆容状态,依托现有大数据分析,识别其口红色号,并推荐相关商品,通过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. getLipstickByIDArgs: <str>ID:口红编号<Tuple>根据口红的编号取口红的数据
@data. matchSimlarLipstickArgs: <int>Color:10进制颜色值<List>根据给定的颜色返回最接近的口红编号列表
@data. matchSameColorArgs: <int>color:10进制颜色值<tuple>返回与给定颜色同色系的口红列表
@data. matchSameBrandArgs: <str>brand;品牌<tuple>返回与给定品牌同品牌的口红列表
@face.iface .initArgs: <str>Imgpath:欲处理的图片文件名<None>初始化一个自己编写的iface对象
@face.iface .hasFace直接调用,无参数<BOOL> Ture/False检测该对象的图片是否存在完整人脸
@face.iface .findLips直接调用,无参数<Tuple> [0]:左顶点 [1]:宽度 [2]:高度返回该对象图片中嘴唇所在的矩形区域
@face.iface .getAndCutLipsRECTArgs: NoneNone截取iface中的嘴唇矩形图片,并保存
@image. getLipsColorArgs: <str>imagepathNone取得嘴唇图片中嘴唇部分的颜色
@image. rgbTo10Args: <int>r,g,b<int>将一个RGB颜色值转化为10进制颜色值
@image. hexto10Args: <str>HEX<int>十六进制到10进制转换
@image. getRGBArgs: <int>color<Turple> [0]:R [1]:G [2]:B从一个十进制的颜色值转为R,G,B
@image. getColorDistan ceArgs: <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请求

关键代码

已上传

  1. 运行效果

运行方式:运行server.py 之后,在浏览器打开 http://127.0.0.1:8987/

运行时总体没有出现大问题,但仍有部分图片识别错误,人脸特征点不对,或者把非人脸识别成人脸。

  1. 总结

  2. 对庞大数据集的处理

程序将口红数据储存在 lipstick.json 中,本程序遇到的难点在于如何把json数据集中庞大的数据转换为python中的列表,而且这个json数据采用了多重嵌套,本程序使用的解决方案是将lipstick.json一步一步解套然后加入到一个列表中。

./media/image10.png

  1. LAB颜色空间算法

事实上,人眼对颜色的识别有非常大的偏差,当两个颜色值相差一定值的时候,在不同分量上的相差往往表现的观感不同,比如在红色上相差一定值往往比在绿色上相差一定值要来得更明显,在这种情况下,常规取色差的方法就显得不那么靠谱。

于是我们最终选择了查阅资料找到的LAB颜色空间算法,这种算法将RGB颜色转换为LAB颜色,LAB颜色是以颜色在各个分量的比例确定的,更接近人眼的观感。

./media/image11.png

  1. Face_recognition库

我们采用了face_recognition 来识别人脸和处理脸部特征。但是在这个库安装的时候出现了许多问题,最后发现这个库需要一个前置库cmake,还要安装visual studio 来编译这个库之后才能使用。

  1. 程序处理时间的优化

在现代手机相机中,一张照片的尺寸是极大的,而在提取颜色的时候需要对所有的像素进行分析,这样的操作十分费时间。

举例说明,一个4000*4000像素的照片其操作的时间复杂度是400*400像素照片的100倍,因此,我们选择在上传前和后对图片进行压缩。

./media/image12.png

  1. 评语和成绩
教师 评语
成绩学生1:学生2:学生3:学生4:学生5:

标签:课程设计,iface,颜色,Python,口红,face,源代码,data,图片
From: https://blog.csdn.net/s44359487yad/article/details/140652028

相关文章

  • springboot农村综合风貌展示平台92098(案例分析)+V可免费领取源代码
    目  录摘要1绪论1.1研究背景1.2 研究意义1.3系统开发目标2.农村综合风貌展示平台系统分析2.2系统功能分析2.3 系统用例分析2.4 业务流程分析2.5本章小结3农村综合风貌展示平台总体设计3.1系统架构设计3.2 系统模块设计3.3数据库......
  • python webbrowser.open 不使用默认浏览器
    对你们来说这是一个好奇的家伙..在我的python程序中webbrowser.open('etc..')打开MicrosoftEdge现在奇怪的是,我在与opensChrome(我的默认值)稍有不同的文件夹中还有另一个python程序关于发生了什么的任何想法吗?!!(我知道有人问过类似的问题,但......
  • 如何在 Mac 上运行 Python 文件来读取 txt 文件并将其写入外部硬盘?
    我目前有一个充满了我想阅读的epub的文件夹,一个我已经阅读过并想再次阅读的epub的文件夹,以及一个相应的文件,其中每个文件都有epub文件的名称。问题是,这些文件夹仅位于我的外部硬盘上。我想要做的是让我的脚本解析这些文件夹中的epub列表,并在我的下载文件夹中创建最新的副......
  • 深入探索:使用Python进行网站数据加载逻辑分析与请求
    作为一名资深的Python程序员,我经常需要从网站中提取数据以供分析或进一步处理。这项任务涉及到对网站数据加载逻辑的深入分析,以及使用Python进行高效的网络请求。在本文中,我将分享如何分析网站的数据加载方式,并使用Python的requests库来模拟浏览器行为,获取所需的数据。网站......
  • 如何将 Python 列表添加到 Excel 中已有值的列的末尾?
    我目前正在尝试编写一个程序,将值附加到列表中,然后将这些值添加到Excel数据表中的列中。每次运行该程序时,我都希望在同一列的末尾添加更多值。所以我不确定如何解决这个问题,而且我在网上找到的其他答案也没有取得多大成功。以下是使用openpyxl库在Python中将......
  • 如何学习Python:糙快猛的大数据之路(学习地图)
    在这个AI和大数据主宰的时代,Python无疑是最炙手可热的编程语言之一。无论你是想转行还是提升技能,学习Python都是一个明智之选。但是,该如何开始呢?今天,让我们聊聊"糙快猛"的Python学习之道。什么是"糙快猛"学习法?"糙快猛"学习法,顾名思义,就是:糙:不追求完美,允许存......
  • 简单HTML网页源代码bootstrap网页设计模板成品网站作业
    原创旅游主题bootstrap框架网页设计原创了一个以旅游城市为主题,以哈尔滨为内容的bootstrap框架网页设计,网站具有响应式(电脑端,平板端,手机端都可适应)。鑫风格简约,代码少且简单,符合初学者的水平。六个页面,页面之间可相互跳转,不想要的页面删了即可。有首页,美食列表,详细介绍,登......
  • Python 中 __get__ 方法的内部原理
    我正在摆弄描述符,结果碰壁了。我以为我可以像使用任何其他方法一样直接调用它,但显然,它似乎不一致或者我遗漏了一些东西。假设我有一个用作描述符的坐标类:|||还有一个Point类,它有2个坐标属性:classCoordinate:def__set_name__(self,owner,name):self._na......
  • 使用带有私钥的云前端生成签名 URL 的问题..使用 Python 3.7 为带有空格的 S3 对象生
    我在使用Python3.7为S3对象生成签名URL时遇到问题。具体来说,键中带有空格的对象的URL会导致“访问被拒绝”错误,而没有空格的对象的URL通常工作正常。但是,并非所有不带空格的对象都能正常工作,带空格的对象始终会失败。fromdatetimeimportdatetime,timedeltaimpo......
  • 有没有更好的方法来在存储库中的一组 python 程序之间共享公共代码
    当我想要快速、轻松地做许多不同的事情时,我会选择Python-即我总是会得到许多Python“程序”-例如一组脚本-或者如果我正在玩一些东西,一堆测试程序等-即始终是许多不同程序的松散集合。但是,我会分享某些内容。例如,如果我正在使用AI-我可能有30个左右完全不相......