python神经网络:女生颜值打分器(一)

python讨论qq群:996113038


导语

前几天写了一个批量下载“小姐姐”图片的爬虫,阅读量还挺高的。本来想多写一些这种类型的文章。毕竟学程序的男生比较多,都喜欢看与妹子相关的文章,但想着,这是一个技术类的公众号,老搞这些花里胡哨的东西似乎不太好。

于是我想了一个新项目:《AI五子棋》。就是用python实现AI五子棋。然后我到处查论文,找相关代码。费了九牛二虎之力终于写好了一个。前几天刚刚发出去。

然后我松了口气,觉得小伙伴们都还不至于.....只喜欢看那些与妹子相关的推送,这篇文章阅读量应该不会太低。然而:第二天我就被你们的阅读量打脸了:

python神经网络:女生颜值打分器(一)_第1张图片

好了,今天我屈服了,还是写一个和妹子相关的程序比较好。这样大家也比较喜欢。于是我找到了我上半年原创的“颜值打分器”。和大家分享分享。

神经网络有点复杂,一次很难讲完。我将分两次讲完这个原理。


代码及相关资源获取

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



开发工具

python3.6.4

相关模块:pandas,scipy,matplotlib,numpy,cv2,dlib,os,math


效果演示

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

python神经网络:女生颜值打分器(一)_第2张图片


简单介绍

大家得到代码和相关文件后,看到的是这个效果。

python神经网络:女生颜值打分器(一)_第3张图片

我特意给大家讲解一下这些文件是啥。

首先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)


一次篇幅有限,不能完全讲完。敬请期待下一期。


              感谢大家观看,有钱的老板可以打赏一下小编哦!

扫描下方二维码,关注公众号

参考资料

图片来源:https://www.pexels.com/photo/smiling-woman-holding-red-lantern-1372134/

你可能感兴趣的:(python神经网络:女生颜值打分器(一))