diff --git a/README.md b/README.md index 60ada24..123b0ba 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ # aiphoto 最近要去办事情,很多地方都需要证件照,最近刚好在看AI,人脸识别,图形识别相关的知识,就打算利用这些技术开发一个证件照功能 +# 效果图 + # 文档 通过文档可以快速上手和了解项目。 diff --git a/m_web/bj.png b/m_web/bj.png new file mode 100644 index 0000000..e493312 Binary files /dev/null and b/m_web/bj.png differ diff --git a/m_web/cs.jpg b/m_web/cs.jpg new file mode 100644 index 0000000..614c52a Binary files /dev/null and b/m_web/cs.jpg differ diff --git a/m_web/upload.py b/m_web/upload.py new file mode 100644 index 0000000..bc5ef32 --- /dev/null +++ b/m_web/upload.py @@ -0,0 +1,73 @@ +import os +import tornado.web +import shortuuid +from u_2_net import my_u2net_test +from to_background import to_background +from to_background import to_standard_trimap +from m_dlib import ai_crop + +# import PILImageMy as mypil + + +class UploadHandler(tornado.web.RequestHandler): + + def post(self, *args, **kwargs): + + filename=shortuuid.uuid() + print(os.path.dirname(__file__)) + parent_path = os.path.dirname(os.path.dirname(__file__)) + filePath ="" + # 查看上传文件的完整格式,files以字典形式返回 + print(self.request.files) + # {'file1': + # [{'filename': '新建文本文档.txt', 'body': b'61 60 -83\r\n-445 64 -259', 'content_type': 'text/plain'}], + # 'file2': + filesDict = self.request.files + for inputname in filesDict: + # 第一层循环取出最外层信息,即input标签传回的name值 + # 用过filename键值对对应,取出对应的上传文件的真实属性 + http_file = filesDict[inputname] + for fileObj in http_file: + + # 第二层循环取出完整的对象 + # 取得当前路径下的 upfiles 文件夹+上fileObj.filename属性(即真实文件名) + filePath = os.path.join(parent_path, "static", filename+".jpg") + print(filePath) + with open(filePath, 'wb') as f: + f.write(fileObj.body) + + + + org_img = filePath + + id_image = os.path.join(parent_path, "static", filename+"_meinv_id.png") + # 20200719 + # 通过识别人脸关键点,裁剪图像 + ai_crop.crop_photo(org_img,id_image ) + + + print(org_img) + alpha_img = os.path.join(parent_path, "static", filename+"_alpha.png") + print(alpha_img) + alpha_resize_img = os.path.join(parent_path, "static", filename+"_alpha_resize.png") + print(alpha_resize_img) + # + # 通过u_2_net 获取 alpha + my_u2net_test.test_seg_trimap(id_image, alpha_img, alpha_resize_img) + # + # # 通过alpha 获取 trimap + trimap = os.path.join(parent_path, "static", filename+"_trimap_resize.png") + to_standard_trimap.to_standard_trimap(alpha_resize_img, trimap) + print(trimap) + + id_image_org = os.path.join(parent_path, "static", filename+"_meinv_id_2in.png") + + # + # 证件照添加蓝底纯色背景//"..\\aiphoto\\img\\meinv_trimap_resize.png" + # to_standard_trimap.to_standard_trimap(alpha_resize_img, trimap) + to_background.to_background(id_image, trimap, id_image_org, "blue") + print(id_image_org) + self.write( "static/"+filename+"_meinv_id_2in.png") + + + diff --git a/m_web/web.py b/m_web/web.py new file mode 100644 index 0000000..7d59826 --- /dev/null +++ b/m_web/web.py @@ -0,0 +1,26 @@ +import tornado.ioloop +import tornado.web +import m_web.upload as upload +import os + + +class MainHandler(tornado.web.RequestHandler): + def get(self): + self.write("Hello, world") + + +def make_app(): + return tornado.web.Application([ + (r"/", MainHandler), + (r"/eam/fileLocal/upload", upload.UploadHandler), + (r"/eam/fileLocal/static", tornado.web.StaticFileHandler, {"path": "/static"}) + ], + static_path=os.path.dirname(os.path.dirname(__file__))+"/static" + ) + + +if __name__ == "__main__": + current_path = os.path.dirname(__file__) + app = make_app() + app.listen(8013) + tornado.ioloop.IOLoop.current().start() diff --git a/u_2_net/my_u2net_test.py b/u_2_net/my_u2net_test.py index e2b7015..f87a678 100644 --- a/u_2_net/my_u2net_test.py +++ b/u_2_net/my_u2net_test.py @@ -7,7 +7,7 @@ from u_2_net.data_loader import RescaleT from u_2_net.data_loader import ToTensorLab from u_2_net.model import U2NET # full size version 173.6 MB from PIL import Image - +import os # normalize the predicted SOD probability map def normPRED(d): @@ -44,7 +44,10 @@ def preprocess(image): def pre_net(): # 采用n2net 模型数据 model_name = 'u2net' - model_dir = '..\\aiphoto\\u_2_net\\saved_models/'+ model_name + '/' + model_name + '.pth' + path = os.path.dirname(__file__) + print(path) + model_dir = path+'/saved_models/'+ model_name + '/' + model_name + '.pth' + print(model_dir) print("...load U2NET---173.6 MB") net = U2NET(3,1) # 指定cpu