tsingsee青犀视频开发人脸识别ai接口的实现(代码片段)

TSINGSEE TSINGSEE     2023-02-22     630

关键词:

大家知道我们的人脸识别已经在进行内测了,并会在不久的将来于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智能识别功能开发如何通过gpu实现加速识别?

大家知道我们最近在EasyCVR的AI智能技术方面下了比较大的功夫,近期一直在对智能识别做适配上的测试,待测试完毕即可上线,大家可以关注我们,获取我们最新的研发进度和测试进度。由于AI识别是一个消耗工... 查看详情

tsingsee青犀视频开发ai识别对接大华ai设备以通道或者库为对象布控的流程介绍(代码片段)

目前TSINGSEE青犀视频正在对不同AI设备的功能进行对接测试,本文分享一下大华AI设备以通道或者库为对象布控的流程。定义说明:以通道为对象进行布控,即一个通道可布控一个或者多个人脸库。以库为对象进行布控... 查看详情

tsingsee青犀视频调用ai人脸识别出现跨域问题如何解决?(代码片段)

人脸识别已经是智慧化发展的一个重要标志了,一般分为两个步骤:前端人脸图像采集系统通过抓拍采集人脸图像、实时视频流等,后端的智能平台可将前端采集的相关数据统一进行汇聚、处理、存储、应用、管理与... 查看详情

tsingsee青犀视频开发人脸识别技术实现过程中的的难点汇总

人脸识别发展到现在已经基本落地并实现了场景化的应用,现在的人脸考勤、打卡、门禁、人员跟踪、人员识别等也都相继发展成熟,青犀视频团员研发的人脸识别也已经投入使用,比如某景区人脸检测、智慧工地场... 查看详情

tsingsee青犀视频开发安全帽智能检测识别经验分享

...智能检测技术,但是在研发的过程中,我们(TSINGSEE青犀视频研发团队)经历的曲折与困难也 查看详情

tsingsee青犀视频开发大华sdk以图搜图功能简介(代码片段)

大家知道我们最近一直在开发EasyCVR的智能识别功能,为了能够将不同的格式及SDK都与我们EasyCVR进行适配,我们也开始对此进行了研究。本文主要是分享一下我们在开发智能识别功能时,涉及到大华SDK以图搜图功能的... 查看详情

tsingsee青犀视频开发ai识别dlib使用gpu如何激活?

...防行业新的生命力,促进安防行业的全面发展。目前TSINGSEE青犀视频团队也紧抓5G+AI技术的发展,为旗下产品升级和研发持续努力。现有的EasyCVR/EasyRTC等都相继加入了AI智能检测分析、5G大宽带实时音视频应用等。我们... 查看详情

tsingsee青犀视频开发webrtc项目如何实现windows视频采集?

...频都是通过平台系统提供的API来实现视频采集,对于TSINGSEE青犀视频正在开发的webrtc项目来说,也有一套标准。Webrtcwindows的视频采集有一套抽象函数:webrtc::VideoCaptureModule。函数在其中定义了启动采集和启动时设置的... 查看详情

ai人脸识别/车辆识别智能分析网关微信端告警消息推送的开发流程

智能分析网关是TSINGSEE青犀视频研发的AI边缘计算智能硬件设备,它具有AI智能检测与识别的能力,可对视频及图像中的人、车、物体、行为等进行检测识别与定位、追踪、统计,具体可包括人脸检测与识别、车辆检测... 查看详情

tsingsee青犀视频开发景区ai行人识别调用动态行人识别失败问题排查及解决(代码片段)

前段时间我们的景区行人检测功能一直在项目中进行测试,但是检测的AI算法没有达到我们的理想效果,因此我们考虑使用百度AI算法(动态行人识别)来进行调整。在使用GO调用百度AI接口的过程中出现调用失败... 查看详情

ai安全帽识别/人脸识别智能分析网关在easycvr配置告警信息推送

智能分析网关是TSINGSEE青犀视频研发的智能硬件设备,部署了全新嵌入式多算法框架软件,可支持AI视频智能分析功能,包括人脸识别、车辆检测及识别、烟火识别、物体识别、行为识别、轨迹跟踪等,在视频监控... 查看详情

tsingsee青犀视频智能分析网关平台首页为何取消四分屏展示?

随着人工智能及边缘计算技术的不断落地应用,TSINGSEE青犀视频也推出了基于AI计算机视觉技术的硬件设备——智能分析网关。该设备基于ARM的CPU,可同时支持4路1080P视频流实时分析,能实现毫秒级识别,设备提供... 查看详情

tsingsee青犀视频平台调用接口常见问题及注意事项汇总

TSINGSEE青犀视频平台均包含很多二次开发接口,很多功能都可以通过接口调用来实现。比如EasyGBS的接口文档如下:在使用过程中,很多客户是利用我们平台的接口集成到自己的视频平台,以此对外进行展示,... 查看详情

tsingsee青犀视频平台部署如何给软件包文件赋予对应的用户权限?(代码片段)

TSINGSEE青犀视频平台EasyGBS、EasyNVR、EasyDSS等都是可以解压直用的,如果是Linux系统,那么对文件的权限是有需求的,平台这边的软件包解压后出现的文件权限是管理员。那么如何使对应的软件获取到对应用户的权限呢&#... 查看详情

tsingsee青犀视频景区查看人流量统计开发过程

我们之前开发的景区行人检测系统已经再景区稳定运行了一段时间,近期需要在现有系统中增加查看人流统计的功能,需要设计接口,接口定义有登录接口、token的失效期、获取游玩的景点、获取一天的人流量统计报... 查看详情

tsingsee青犀视频编译行人识别系统写入sql(python)语句实现流程

近期我们接了一个关于视频分析行人识别的项目,这段时间也一直在对该项目做测试。该项目中,我们使用python进行行人识别,我们打算采用的识别流程是在行人识别的过程中,会有一个行人ID,相同的人也会... 查看详情

ai人脸识别/烟火检测/车牌识别智能分析网关新增mqtt服务(代码片段)

TSINGSEE青犀视频发布的基于AI边缘计算能力的硬件设备智能分析网关,可支持AI视频智能分析功能,通过对场景中的监控视频图像进行智能识别与分析,可提供人脸、人体、车辆、烟火、物体、行为等识别、抓拍、比对... 查看详情

tsingsee青犀视频智能分析开发中大华设备搜索和批量重置密码的代码实现(代码片段)

之前我们讲到了TSINGSEE青犀视频团队在开发大华SDK当中的一些流程,本文我们分享下大华设备搜索和批量重置密码的代码实现。主要流程图如下:分布介绍:1、调用CLIENT_Init完成SDK初始化流程。2、调用CLIENT_StartSearchDev... 查看详情