鱼C论坛

 找回密码
 立即注册
查看: 2767|回复: 3

[技术交流] python神经网络:颜值打分器

[复制链接]
发表于 2020-2-22 10:25:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 苏绛雪 于 2020-2-22 10:26 编辑

导语:

前几天写了一个批量下载“小姐姐”图片的爬虫,阅读量还挺高的。本来想多写一些这种类型的文章。毕竟学程序的男生比较多,都喜欢看与妹子相关的文章,但想着,这是一个技术类的公众号,老搞这些花里胡哨的东西似乎不太好。
于是我想了一个新项目:《AI五子棋》。就是用python实现AI五子棋。然后我到处查论文,找相关代码。费了九牛二虎之力终于写好了一个。前几天刚刚发出去。
然后我松了口气,觉得小伙伴们都还不至于.....只喜欢看那些与妹子相关的推送,这篇文章阅读量应该不会太低。然而:第二天我就被你们的阅读量打脸了:
好了,今天我屈服了,还是写一个和妹子相关的程序比较好。这样大家也比较喜欢。于是我找到了我上半年原创的“颜值打分器”。和大家分享分享。


神经网络有点复杂,一次很难讲完。我将分两次讲完这个原理。
代码及相关资源获取:

关注python趣味爱好者”公众号,回复“颜值2获取源代码以及相关资源

开发工具:

python3.6.4

相关模块:pandas,scipy,matplotlib,numpy,cv2,dlib,os,math
效果演示:

提取人脸的特征点是第一步:我们提取特征点以后画出来,并用一个列表存储起来:


神经网络有点复杂,一次很难讲完。我将分两次讲完这个原理。
我特意给大家讲解一下这些文件是啥。

首先Images是我们的数据库,里面存储了5500张图片,有亚洲人,非洲人,欧洲人,男性女性都有。我们代码只读取了前面三百张亚洲女性的图片。用来训练我们的神经网络。
调试过程中的代码,里面存储的是我在调试程序过程中碰到的错误,都是错误代码。这些代码本来不想放上去,但是我觉得大家都是抱着学习的目的来的。我经历的一些错误对大家可能也有很大用处。
label.xlsx是对应数据库里面的颜值分数。这些分数5分是满分。0分是最低分。是找很多志愿者进行颜值打分。然后取平均值。这些分数相对来讲,还是很可以表示一个女性的颜值分数的。
get_feature3代表的是提取人脸特征点。这是我额外写的一个程序。
test3是我们要测试的女生的图片。我们如果要测试某个女生的图片颜值,可以把图片名改为test3.PNG。放在当前文件夹里测试。
基本原理:

基本原理就是先提取人脸64个特征点。一般人脸识别用的就是这些特征点。我们提取特征点,然后做一些平移,旋转处理。就可以输入到神经网络的输入层,然后利用label.xlsx的数据进行反馈调节,就可以优化这个神经网络的参数(也就是调整其权值和阈值)。
部分代码:
import numpy as np
import cv2
import dlib
import os
detector = dlib.get_frontal_face_detector()#创建一个容器
predictor = dlib.shape_predictor('landmarks.dat')#加载一个自带的分类器
#img_path = "C:\\Users\\MSI\\Desktop\\my_py_software\\img\" + str(1) + ".jpg"#我需要识别的图片位置
img = cv2.imread("test3.PNG")#使用python-opencv读取图片
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#使图片转化为灰度图片
rects = detector(img_grey, 0)#返回信息
for i in range(len(rects)):
    landmarks = np.matrix([[p.x, p.y] for p in predictor(img_grey,rects[i]).parts()])#获取点的坐标
    for idx, point in enumerate(landmarks):
        # 68点的坐标
        pos = (point[0, 0], point[0, 1])
        cv2.circle(img, pos, 2, (255, 0, 0), 1)#画圈圈,(255,0,0)是圈圈的颜色
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, str(idx + 1), pos, font, 0.1, (0, 0, 255), 1, cv2.LINE_AA)#为圈圈标上序号
cv2.namedWindow("img", 2)
cv2.imshow("img", img)#展示
cv2.waitKey(0)
捕获123.PNG
捕获34.PNG
捕获56.PNG

本帖被以下淘专辑推荐:

  • · python|主题: 62, 订阅: 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-22 10:43:03 | 显示全部楼层
数据集有点大,没法传到论坛上。所以只能放上去部分代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 10:45:09 | 显示全部楼层
good
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 06:30:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表