Django实战(9)——为人脸识别系统添加随机抽签功能

这一篇基于上一篇的人脸识别系统:https://blog.csdn.net/qq_41938259/article/details/104587091

这是这个学习项目的gitee地址:https://gitee.com/timtian139/WEBfaceRecognitionTest/tree/master/faceWeb

这次主要是按照老师的要求增加了抽签的功能,一次抽两个人,抽到签的人前往打卡页,主要功能是显示抽中人的姓名和图片。由于功能简单所以就不再另设APP了,直接放在名为faceRecognitionManagement的APP的views.py文件中。以下是全部新增的代码:

def chouqian(request):
    red = redis.StrictRedis(host='localhost', port=6379, db=1)
    facesName = red.keys()
    facesName = list(set(facesName))
    facesResult =random.sample(facesName, 2)
    facesResult2 = []
    for face in facesResult:
        facesResult2.append(str(face, 'utf-8'))

    routes = []
    for face in facesResult:
        routes.append(red.get(face).decode('utf-8'))

    result = dict(zip(facesResult2, routes))

    context = {
        'result': result,
    }
    return render(request, 'chouqian.html', context=context)

由于使用了Redis存放姓名和图片地址的键值对,所以得先链接上Redis数据库,并取出所有的key,即所有人的姓名。要考虑到有重复的姓名,因为一个人可能有多张图片在库中,所以还有一个去重的步骤,具体实现内容如下:

    # 打开数据库
    red = redis.StrictRedis(host='localhost', port=6379, db=1)
    # 取出所有的键/姓名
    facesName = red.keys()
    # 去重
    facesName = list(set(facesName))
    # 抽取两个人,数字可以改动
    facesResult =random.sample(facesName, 2)

    # 定义一个新的列表用于存放人名(键)
    # 由于Redis使用的字节流,所以要转化成utf-8编码
    facesResult2 = []
    for face in facesResult:
        facesResult2.append(str(face, 'utf-8'))

    # 定义一个routes列表,用于存放图片路径,使用utf-8解码
    routes = []
    for face in facesResult:
        routes.append(red.get(face).decode('utf-8'))

    # 结果用字典打包
    result = dict(zip(facesResult2, routes))

这是对应的html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% load static %}
    <title>抽签签到</title>
</head>
<body>
<li>抽签结果</li>
    {% for k, v in result.items %}
        <a href="{{ v }}">姓名:{{ k }}</a>
    {% endfor %}
</body>
</html>

要注意的是返回的图片路径是在原有的路径后面加上图片路径,所以在urls.py中要映射俩个url,一个是html页面的url,另一个是图片地址转化的url,如下所示:

    url(r'^chouqian/facePhoto/(?P<path>.*)$', serve, {'document_root': 'facePhoto'}),
    url(r'^chouqian/', chouqian),

这是最后的结果,打开页面可以看到两个人名,点击链接就是对应库里的照片了:

发布了162 篇原创文章 · 获赞 38 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41938259/article/details/105311270