zoukankan      html  css  js  c++  java
  • 人脸识别

    from flask import Flask,request
    import cv2,face_recognition,re,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)
    # 创建face表
    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'xffxd8xffxe0':
            return False
        elif data[6:] != b'JFIFx00':
            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("res_jpg.jpg", "wb") as w:
                w.write(file_data)
            with open("res_png.png", "wb") as w:
                w.write(file_data)
            if is_jpg("res_jpg.jpg")==True:
                # 读取图片
                image = face_recognition.load_image_file("res_jpg.jpg")
                # 检测图片中的人脸,([1,1,1],[2,2,2])
                face_locations = face_recognition.face_locations(image)
                print(face_locations)
                img = cv2.imread("res_jpg.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:UsersAdministratorDesktopimage\%s.jpg"%uuid_str
                cv2.imwrite(path, img)
                # 写入数据库
                face = Face(uuid_str,path)
                db.session.add(face)
                db.session.commit()
    
                data = {
                    "index":"success",
                    "jpg_path":path
                }
    
                return data
    
            else:
                image = face_recognition.load_image_file("res_png.png")
                face_locations = face_recognition.face_locations(image)
                print(face_locations)
                img = cv2.imread("res_png.png")
                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:UsersAdministratorDesktopimage\%s.png" % uuid_str
                cv2.imwrite(path, img)
    
                face = Face(uuid_str, path)
                db.session.add(face)
                db.session.commit()
    
                data = {
                    "index": "success",
                    "png_path": path
                }
    
                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)
  • 相关阅读:
    day11 函数的进阶
    day10 文件的补充以及函数
    day9 文件处理
    day8 字典的补充以及集合
    Vue学习下
    前端常用js方法集
    js实现千位符格式化
    Vue项目总结上
    VUE项目github
    http://www.jianshu.com/p/42e11515c10f#
  • 原文地址:https://www.cnblogs.com/xuezhihao/p/11394666.html
Copyright © 2011-2022 走看看