RicardoM.Lu1 2022-12-22 16:11 采纳率: 82.1%
浏览 434
已结题

在编写flask接口封装人脸识别能力的时候,出现了一些问题

在写一个flask的接口时,我调用post的图片为我实现功能(两张图片的相似度比对),但是我有点想不到我应该怎么写才能调用到
import json
import cv2
from PIL import Image
import numpy as np
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys
from flask import request
from flask import jsonify
from flask import Flask,make_response
import base64
face_recognition = pipeline(Tasks.face_recognition, model='damo/cv_ir101_facerecognition_cfglint')
def face_recognition(get_img1,get_img2):
    get_img1 = image1
    get_img2 = image2
    emb1 = face_recognition(get_img1)[OutputKeys.IMG_EMBEDDING]
    emb2 = face_recognition(get_img2)[OutputKeys.IMG_EMBEDDING]
    sim = np.dot(emb1[0], emb2[0])
    return (f'Face cosine similarity={sim:.3f}, get_img1:{get_img1}  get_img2:{get_img2}')
app = Flask(__name__)
@app.route("/",methods=["POST"])
def first_post():
    my_json = {"msg": None
                }
    data = request.get_data()
    if not data:
        my_json["msg"] = "No data obtained!"
        return jsonify(msg="缺少参数")
    try:
        data=json.loads(data)
        image1=data["image1"].encode()
        image2=data["image2"].encode()
    except Exception as e:
        print(e)
        return jsonify(msg="出错了,请查看是否正确访问")
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=6000, debug=True, use_reloader=False)

api文件
import os
import sys
import time
import json
import base64
import requests
url = "http://0.0.0.0:6000"
base64_data=None
base64_data = base64.b64encode(base64_data,encoding="utf-8")
base64_data = base64_data.decode()
data={
    'image1':None,
    'image2':None
}
start_time = time.time()
response = requests.post(url, data=json.dumps(data))
end_time = time.time()
print("time:", end_time-start_time)
print(response.text)
face_recognition中的两个image爆红 但是程序可以跑,只是就算给它post了两张图片,最后依然会显示“出错了,请查看是否正确访问"
暂时没什么思路 可以做成全局变量的方式吗?
给它post的两张图片能够正确接受并且给我返回我需要的相似度的值
  • 写回答

8条回答 默认 最新

  • 一切因为有你 2022-12-22 21:08
    关注

    ##你的函数中参数传错了,而且你并没有返回计算相似度的结果。我没有你的模型,用的自己的计算可以正常返回

    img

    修改后的你试一下。有问题再看下

    
    # -*- coding: utf-8 -*-
    
    
    import json
    import cv2
    from PIL import Image
    import numpy as np
    from modelscope.pipelines import pipeline
    from modelscope.utils.constant import Tasks
    from modelscope.outputs import OutputKeys
    from flask import request
    from flask import jsonify
    from flask import Flask,make_response
    import base64
    face_recognition = pipeline(Tasks.face_recognition, model='damo/cv_ir101_facerecognition_cfglint')
    def face_recognition(image1,image2):
        get_img1 = image1
        get_img2 = image2
        emb1 = face_recognition(get_img1)[OutputKeys.IMG_EMBEDDING]
        emb2 = face_recognition(get_img2)[OutputKeys.IMG_EMBEDDING]
        sim = np.dot(emb1[0], emb2[0])
        return (f'Face cosine similarity={sim:.3f}, get_img1:{get_img1}  get_img2:{get_img2}')
    app = Flask(__name__)
    @app.route("/",methods=["POST"])
    def first_post():
        my_json = {"msg": None
                    }
        data = request.get_data()
        if not data:
            my_json["msg"] = "No data obtained!"
            return jsonify(msg="缺少参数")
        try:
            data=json.loads(data)
            image1=data["image1"].encode()
            image2=data["image2"].encode()
            return face_recognition(image1,image2)
        except Exception as e:
            print(e)
            return jsonify(msg="出错了,请查看是否正确访问")
    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=6000, debug=True, use_reloader=False)
    api文件
    import os
    import sys
    import time
    import json
    import base64
    import requests
    url = "http://0.0.0.0:6000"
    base64_data=None
    base64_data = base64.b64encode(base64_data,encoding="utf-8")
    base64_data = base64_data.decode()
    data={
        'image1':None,
        'image2':None
    }
    start_time = time.time()
    response = requests.post(url, data=json.dumps(data))
    end_time = time.time()
    print("time:", end_time-start_time)
    print(response.text)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 赞助了问题酬金100元 12月22日
  • 修改了问题 12月22日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效