python 调用海康linux下psdatacall_demo,实现获视频取码流并返回到python,以及上传信息到人脸库的方法

首先要注意的是库必须要更新,在开发的时候,发现5.2的库没有上传人脸库的一个结构体,因此有必要更新库到5.3

其他 我这里是由海康原来的demo,生成一个动态库,然后再由python调用这个动态库实现人脸上传和视频码流返回

,码流返回我采用的是在c++里面传入python的函数,然后将函数全局化,然后在回调函数里面调用python的函数将码流信息通过参数形式返回到python

首先要修改的是makefile,修改之后的makefile如下:

CC       = gcc
CXX      = g++
CFLAGS   = -g
CXXFLAGS = $(CFLAGS)


LIBPATH = ./
LIBS = -Wl,-rpath=./:./HCNetSDKCom -lhcnetsdk 
SRC = ./main.cpp
TARGET = ./getpsdata.so


all: 
$(CXX) $(OPTI) $(CXXFLAGS) -shared -fPIC $(SRC) -o $(TARGET) -L$(LIBPATH) $(LIBS)


.PHONY: clean
clean:

rm -f $(TARGET)

makefile 主要修改的是生成的目标,以及编译的时候多带了编译共享库的选项

修改后的main文件如下:

 /*
* Copyright(C) 2011,Hikvision Digital Technology Co., Ltd 

* File   name��main.cpp
* Discription��demo for muti thread get stream
* Version    ��1.0
* Author     ��luoyuhua
* Create Date��2011-12-10
* Modification History��
*/


#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include "HCNetSDK.h"
#include "iniFile.h"
// ȡ�������Ϣ�������̴߳���
typedef struct tagREAL_PLAY_INFO
{
char szIP[16];
int iUserID;
int iChannel;
}REAL_PLAY_INFO, *LPREAL_PLAY_INFO;
//导入人脸数据条件
FILE *g_pFile = NULL;
typedef void (*Func)(BYTE*);
Func rePyGetData = NULL;
void g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser)
{
//LPREAL_PLAY_INFO pPlayInfo = (LPREAL_PLAY_INFO)dwUser;
    //printf("[g_RealDataCallBack_V30]Get data, ip=%s, channel=%d, handle=%d, data size is %d, thread=%d\n", 
//pPlayInfo->szIP, pPlayInfo->iChannel, lRealHandle, dwBufSize, pthread_self());


//printf("[g_RealDataCallBack_V30]Get data, handle=%d, data size is %d, thread=%d\n", 
//lRealHandle, dwBufSize, pthread_self());
//NET_DVR_SaveRealData(lRealHandle, cFilename);
}




void PsDataCallBack(LONG lRealHandle, DWORD dwDataType,BYTE *pPacketBuffer,DWORD nPacketSize, void* pUser)
{
if (dwDataType  == NET_DVR_SYSHEAD)
{
//д��ͷ����
g_pFile = fopen("./record/ps.dat", "wb");

if (g_pFile == NULL)
{
printf("CreateFileHead fail\n");
return;
}


//д��ͷ����
fwrite(pPacketBuffer, sizeof(unsigned char), nPacketSize, g_pFile);


printf("write head len=%d\n", nPacketSize);
}
else
{
if(g_pFile != NULL)
{


fwrite(pPacketBuffer, sizeof(unsigned char), nPacketSize, g_pFile);
printf("write data len=%d\n", nPacketSize);
rePyGetData(pPacketBuffer);
}
}
}




extern "C"{
void GetStream(Func getData)
{
rePyGetData = getData;
printf("GetSteam+++++++++++++++++++++++++++++++++++++++++++\n");
    NET_

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值