webjson curl xpost f fileobama2 jpg http 127 0 0 1 5001 facefoundinimage true ispictureofobama true flask http flask pocoo orgdocs0 12patternsfileuploads flaskflask pip3 install flask you can change this to any folder on your system html def detectfacesinimagefilestream facerecognition faceencodingsimg knownfaceencoding 0 09634063 0 12095481 0 00436332 0 07643753 0 0080383 0 01902981 0 07184699 0 09383309 0 18518871 0 09588896 0 23951106 0 0986533 0 22114635 0 1363683 0 04405268 0 11574756 0 19899382 0 09597053 0 11969153 0 12277931 0 03416885 0 00267565 0 09203379 0 04713435 0 12731361 0 35371891 0 0503444 0 17841317 0 00310897 0 09844551 0 06910533 0 00503746 0 18466514 0 09851682 0 02903969 0 02174894 0 02261871 0 0032102 0 20312519 0 02999607 0 11646006 0 09432904 0 02774341 0 22102901 0 26725179 0 06896867 0 00490024 0 09441824 0 11115381 0 22592428 0 06230862 0 16559327 0 06232892 0 03458837 0 09459756 0 18777156 0 00654241 0 08582542 0 13578284 0 0150229 0 00670836 0 08195844 0 04346499 0 03347827 0 20310158 0 09987706 0 12370517 0 06683611 0 12704916 0 02160804 0 00984683 0 00766284 0 18980607 0 19641446 0 22800779 0 09010898 0 39178532 0 18818057 0 20875394 0 03097027 0 21300618 0 02532415 0 07938635 0 01000703 0 07719778 0 12651891 0 04318593 0 06219772 0 09163868 0 05039065 0 04922386 0 21839413 0 02394437 0 06173781 0 0292527 0 06160797 0 15553983 0 02440624 0 17509389 0 0630486 0 01428208 0 03637431 0 03971229 0 13983178 0 23006812 0 04999552 0 0108454 0 03970895 0 02501768 0 08157793 0 03224047 0 04502571 0 0556995 0 24374914 0 25514284 0 24795187 0 04060191 0 17597422 0 07966681 0 01920104 0 01194376 0 02300822 0 17204897 0 0596558 0 05307484 0 07417042 0 07126575 0 00209804 img facerecognition loadimagefilefilestream unknownfaceencodings facerecognition faceencodingsimg facefound false isobama false if lenunknownfaceencodings 0 facefound true matchresults facerecognition comparefacesknownfaceencoding unknownfaceencodings0 if matchresults0 isobama true json result facefoundinimage facefound ispictureofobama isobama return jsonifyresult if name main app runhost 0 0 0 0 port5001 debugtrue 这是一个非常简单的使用web服务上传图片运行人脸识别的案例 后端服务器会识别这张图片是不是奥巴马 并把识别结果以json键值对输出 比如 运行以下代码 curl xpost f file obama2 jpg http 127 0 0 1 5001 会返回 face_found_in_image true is_picture_of_obama true 本项目基于flask框架的案例 http flask pocoo org docs 0 12 patterns fileuploads 提示 运行本案例需要安装flask 你可以用下面的代码安装flask pip3 install flask you can change this to any folder on your system 检测图片是否上传成功 图片上传成功 检测图片中的人脸 图片上传失败 输出以下html代码 doctype html title is this a picture of obama title h1 upload a picture and see if it s a picture of obama h1 form method post enctype multipart form data input type file name file input type submit value upload form 用face_recognition face_encodings img 接口提前把奥巴马人脸的编码录入 载入用户上传的图片 为用户上传的图片中的人脸编码 看看图片中的第一张脸是不是奥巴马 讲识别结果以json键值对的数据结构输出
import face_recognition
from flask import Flask, jsonify, request, redirect


ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

app = Flask(__name__)


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS


@app.route('/', methods=['GET', 'POST'])
def upload_image():
    
    if request.method == 'POST':
        if 'file' not in request.files:
            return redirect(request.url)

        file = request.files['file']

        if file.filename == '':
            return redirect(request.url)

        if file and allowed_file(file.filename):
            
            return detect_faces_in_image(file)

    
    return 


def detect_faces_in_image(file_stream):
    
    known_face_encoding = [-0.09634063,  0.12095481, -0.00436332, -0.07643753,  0.0080383,
                            0.01902981, -0.07184699, -0.09383309,  0.18518871, -0.09588896,
                            0.23951106,  0.0986533 , -0.22114635, -0.1363683 ,  0.04405268,
                            0.11574756, -0.19899382, -0.09597053, -0.11969153, -0.12277931,
                            0.03416885, -0.00267565,  0.09203379,  0.04713435, -0.12731361,
                           -0.35371891, -0.0503444 , -0.17841317, -0.00310897, -0.09844551,
                           -0.06910533, -0.00503746, -0.18466514, -0.09851682,  0.02903969,
                           -0.02174894,  0.02261871,  0.0032102 ,  0.20312519,  0.02999607,
                           -0.11646006,  0.09432904,  0.02774341,  0.22102901,  0.26725179,
                            0.06896867, -0.00490024, -0.09441824,  0.11115381, -0.22592428,
                            0.06230862,  0.16559327,  0.06232892,  0.03458837,  0.09459756,
                           -0.18777156,  0.00654241,  0.08582542, -0.13578284,  0.0150229 ,
                            0.00670836, -0.08195844, -0.04346499,  0.03347827,  0.20310158,
                            0.09987706, -0.12370517, -0.06683611,  0.12704916, -0.02160804,
                            0.00984683,  0.00766284, -0.18980607, -0.19641446, -0.22800779,
                            0.09010898,  0.39178532,  0.18818057, -0.20875394,  0.03097027,
                           -0.21300618,  0.02532415,  0.07938635,  0.01000703, -0.07719778,
                           -0.12651891, -0.04318593,  0.06219772,  0.09163868,  0.05039065,
                           -0.04922386,  0.21839413, -0.02394437,  0.06173781,  0.0292527 ,
                            0.06160797, -0.15553983, -0.02440624, -0.17509389, -0.0630486 ,
                            0.01428208, -0.03637431,  0.03971229,  0.13983178, -0.23006812,
                            0.04999552,  0.0108454 , -0.03970895,  0.02501768,  0.08157793,
                           -0.03224047, -0.04502571,  0.0556995 , -0.24374914,  0.25514284,
                            0.24795187,  0.04060191,  0.17597422,  0.07966681,  0.01920104,
                           -0.01194376, -0.02300822, -0.17204897, -0.0596558 ,  0.05307484,
                            0.07417042,  0.07126575,  0.00209804]

    
    img = face_recognition.load_image_file(file_stream)
    
    unknown_face_encodings = face_recognition.face_encodings(img)

    face_found = False
    is_obama = False

    if len(unknown_face_encodings) > 0:
        face_found = True
        
        match_results = face_recognition.compare_faces([known_face_encoding], unknown_face_encodings[0])
        if match_results[0]:
            is_obama = True

    
    result = {
        "face_found_in_image": face_found,
        "is_picture_of_obama": is_obama
    }
    return jsonify(result)


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5001, debug=True)