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),

這是最後的結果,打開頁面可以看到兩個人名,點擊鏈接就是對應庫裏的照片了:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章