人脸识别

こ雲淡風輕ζ 提交于 2019-11-28 05:39:25
from flask import Flask,request,render_template,redirect,url_for
import cv2,face_recognition,re,json,uuid,pymysql
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.debug = True # 调试模式
pymysql.install_as_MySQLdb()
app.config["SQLALCHEMY_DATABASE_URI"]="mysql://root:123@127.0.0.1:3306/face"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)

class Face(db.Model):
    __tablename__ = "face"
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32),doc="文件名",unique=True)
    path = db.Column(db.VARCHAR(255),doc="路径",unique=True)

    def __init__(self,name,path):
        self.name = name
        self.path = path

    def __repr__(self):
        return "face: %s %s %s " % (self.id,self.name,self.path)


def is_jpg(filename):
    data = open(filename,'rb').read(11)
    # print(data)
    # print(data[:4])
    # print(data[6:])
    if data[:4] != b'\xff\xd8\xff\xe0':
        return False
    elif data[6:] != b'JFIF\x00':
        return False
    else:
        return True


# 配置路由,flask路由基于装饰器

@app.route('/',methods=['GET','POST'])
# 既要响应get和post请求
def index():
    if request.method == 'POST':
        res = request.get_data()
        # 去除多余的图片字段
        pattern1 = re.compile(b"-+\w+\s{2}(.*?\s{2}){2}\s{2}")
        pattern2 = re.compile(b"\s{2}-+\w+-+\s{2}")
        res1 = re.match(pattern1, res)
        res2 = re.search(pattern2, res)
        file_data = res[res1.end():res2.start()]
        # 生成一个随机字符串
        uuid_str = uuid.uuid4().hex
        print(file_data)
        with open("qqq.jpg", "wb") as w:
            w.write(file_data)
        if is_jpg("qqq.jpg")==True:
            image = face_recognition.load_image_file("qqq.jpg")
            face_locations = face_recognition.face_locations(image)
            print(face_locations)
            img = cv2.imread("qqq.jpg")
            for i in range(0, len(face_locations)):
                if i < len(face_locations):
                    cv2.rectangle(img, (face_locations[i][3], face_locations[i][0]),
                                  (face_locations[i][1], face_locations[i][2]),
                                  (0, 0, 255), 3)
                else:
                    break

            # cv2.namedWindow("sss")
            # cv2.imshow("sss", img)
            # cv2.waitKey(0)
            path = r"C:\Users\Administrator\Desktop\image\%s.jpg"%uuid_str
            cv2.imwrite(path, img)

            face = Face(uuid_str,path)
            db.session.add(face)
            db.session.commit()

            data = {
                "index":"success",
                "img_name":uuid_str
            }

            return data

        else:
            data = {
                "index":"error"
            }
            return data


    if request.method == 'GET':
        return "hello"

app.config['DEBUG'] = True





if __name__ == '__main__':
    # db.create_all()
    app.run(host="127.0.0.2",port=2333)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!