TSINGSEE青犀视频开发人脸识别AI接口的实现

Posted TSINGSEE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSINGSEE青犀视频开发人脸识别AI接口的实现相关的知识,希望对你有一定的参考价值。

大家知道我们的人脸识别已经在进行内测了,并会在不久的将来于EasyCVR及EasyGBS中进行测试。目前人脸识别AI是基于Python实现,在输入RTSP流的时候会直接开始识别人脸,并进行对比人脸的相似度,来判断是不是同一个人。大致实现如下:

face = my_face_recognition.my_face()
root_path = root + '/image/test_images'
known_people_list = os.listdir(root_path)

index = 1
for i in known_people_list:
    image_path = os.path.join(root_path, i)
    image = face_recognition.load_image_file(image_path)
    face.add_user(image, index, i.replace('.jpg', ''))
    index = index + 1


# path = root + '/image/test.mp4'
path = 'rtsp://admin:a1234567@192.168.99.114:554/cam/realmonitor?channel=1&subtype=0'
face.face_search_from_video(path)

def face_search_from_video(self, video_path, model='hog'):
    '''
    从一段视频中逐帧进行人脸识别,并且保存,
    :param video_path: 视频的路径
    :param model:人脸检测的模型,默认为hog,可选为cnn
    :return:
    '''

    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    input_video = cv2.VideoCapture(video_path)

    ret, frame = input_video.read()
    print("frame")
    print(ret)
    # 帧数为每秒20帧
    out_video = cv2.VideoWriter(('RTSP' if video_path.find('rtsp') >= 0 else video_path.replace('.mp4', '')) + '_result.avi', fourcc, 5,
                                (frame.shape[1], frame.shape[0]), True)

    while ret:
        timestamp = int(round(time.time() * 1000))
        print("timestamp:%d", timestamp)
        frame = self.face_serch_from_picture(frame, model=model, show_result=False)
        cv2.imshow('frame', frame)
        cv2.waitKey(1)
        # out_video.write(frame)
        ret, frame = input_video.read()

以上方法是直接使用RTSP流来进行人脸识别,如果想要进行所有的语言都要识别人脸,最快的方法就是将人脸识别做成http接口用来调用,所以就要分离各个识别的方法。

具体思路先安装Python的http库:flask。安装方法:pip install flask。

下面是实现的http post接口及代码的实现:

1、先实现http接口

from flask import Flask, request, make_response, redirect, render_template
app = Flask(__name__)
if __name__ == "__main__":
    app.run('0.0.0.0', port=PORT, threaded=False, debug=False)

2、http实现人脸的录入,接口是以json的格式传入

@app.route('/add_user', methods=['POST'])  # application/json
def add_user():
    global idx
    data = request.get_data()
    body = "success": False, "message": "no data or no json data"
    if not data:
        return json.dumps(body, ensure_ascii=False)
    data_json = json.loads(data)
    if "image" not in data_json:
        body["message"] = "empty image"
        return json.dumps(body, ensure_ascii=False)
    if "name" not in data_json:
        body["message"] = "empty name"
        return json.dumps(body, ensure_ascii=False)

    im = face.base64_cv2(str(data_json["image"]))
    if im is None:
        body["message"] = "image format error"
        return json.dumps(body, ensure_ascii=False)
    isFace = face.add_user(im, idx, data_json["name"], model='hog')
    if not isFace:
        body["message"] = "entry failed"
        return json.dumps(body, ensure_ascii=False)
    idx += 1
    body["success"] = True
    body["message"] = ""
    return json.dumps(body, ensure_ascii=False)

3、http实现人脸对比,json的格式

@app.route('/search_user', methods=['POST'])
def search_user():
    body = "success": False, "message": "no search user", "data": []
    data = request.get_data()
    if idx <= 1:
        return json.dumps(body, ensure_ascii=False)
    if not data:
        body["message"] = "empty data"
        return json.dumps(body, ensure_ascii=False)
    data_json = json.loads(data)
    if "image" not in data_json:
        body["message"] = "empty image"
        return json.dumps(body, ensure_ascii=False)
    im = face.base64_cv2(str(data_json["image"]))
    if im is None:
        body["message"] = "image format error"
        return json.dumps(body, ensure_ascii=False)
    show = False
    if "show" in data_json:
        show = data_json["show"]
    result_json, images = face.face_search_from_image(im, show, model='hog')
    body["success"] = len(result_json) > 0
    body["data"] = result_json
    if images is not None:
        body["image"] = images
    body["message"] = "" if len(result_json) > 0 else "empty person"
    return json.dumps(body, ensure_ascii=False)

4、最后就是验证http是否可以,采用的是直接写html+js实现接口测试,代码如下:

// 注册人脸
AddUser(params) 
    this.isLoading = true
    let URL = `http://$this.HOST:$this.PORT`
    return axios.post(`$URL/add_user`, params)
,
// 查找录入的人脸
SearchUser(params) 
    this.isLoading = true
    let URL = `http://$this.HOST:$this.PORT`
    return axios.post(`$URL/search_user`, params)
,

以上是关于TSINGSEE青犀视频开发人脸识别AI接口的实现的主要内容,如果未能解决你的问题,请参考以下文章

TSINGSEE青犀视频调用AI人脸识别出现跨域问题如何解决?

TSINGSEE青犀视频人脸识别项目框架新增service层实现高耦合

TSINGSEE青犀视频平台AI人脸识别Python服务一直加载,该如何处理?

TSINGSEE青犀视频平台人脸识别比对控制比对时间间隔的代码设计

TSINGSEE青犀视频开发AI人脸对比如何输出多个对比相似度的人脸?

TSINGSEE青犀视频开发AI识别对接大华AI设备以通道或者库为对象布控的流程介绍