工作日志-2020年03月

星期一 03月02日

1、解决问题Ubuntu18.04 人脸检测插件报错问题:
2、下午移植kmspointerdetector插件代码,编译通过,但是运行项目,插件找不到,明日继续。
3、部门周会,汇报上周工作,安排这周工作。

星期二 03月03日

1、移植kmspointerdetectecor插件,解决各种问题,最后编译通过,运行webapp 成功。
2、和部门员工讨论预约项目中的问题。会议室设备库存计算规则,预约审核通过扣除库存;会议结束退换库存;
会议状态:最近会议(当前)/下一个;
3、配合范总写技术方案文档。

星期三 03月04

1、移植kms-crowddetector插件,解决各种问题,最后编译通过,运行webapp 成功。
2、侧是kurento-player 是否支持RTSP,目前测试没成功;

星期四 03月05

1、编译移植kurento-platedetector,编译通过,但启动kms, 插件加载不成功,找到不相关库,解决问题中;

星期五 03月06

1、继续调试kurento-platedetector代码,查找为什么不能加载相关库,大概原因是C库中引用了C++中的库函数, 还没有好的解决办法;
2、完善相关会议预约项目相关模块的功能定义;

星期一 03月09

1、上午开周会,了解上周工作情况,布置这周工作任务;
2、编译 kms-chroma 插件,修改视频背景图片;图片URL不支持https,改为http URL 后o k;

在这里插入图片描述

星期二 03月10

1、继续查找kms-platedetector 插件加载不成功的原因,undefined symbol: TessBaseAPISetPageSegMode问题解决;


0:00:00.109822464 26548 0x559989d91cc0 WARN    KurentoModuleManager ModuleManager.cpp:65:loadModule:
 Module /home/sandra/kms/kms-omni-build/build-Debug/kms-platedetector/src/gst-plugins/platedetector/libplatedetector.so 
 cannot be loaded: /home/sandra/kms/kms-omni-build/build-Debug/kms-platedetector/src/gst-plugins/platedetector/
 libplatedetector.so: undefined symbol: TessBaseAPISetPageSegMode

解决办法:在 …/kms-omni-build# vi build-Debug/CMakeCache.txt 增加以下两行:

TESSERACT_INCLUDE_DIRS:INTERNAL=/usr/local/tesseract/include
TESSERACT_LIBRARIES:INTERNAL=tesseract

程序是能运行了,但是识别有问题,目前正在找原因,如图:

在这里插入图片描述

见KMS控制台输出:
在这里插入图片描述

星期三 03月11

1、调试Hi3559A, 编码图像RTSP输出,编码图像写入命名管道,代码完成;后台运行程序会阻塞;调试不方便;

星期三 03月12

1、考虑用固定大小内存缓冲实现线程间视频数据传输;完成测试模块代码;经测试,很容易容易互相等待;还需要完善策略;

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <malloc.h>

#define DATA_BUFFER_SIZE 100000
#define w2r (p_write_pos-p_read_pos)
#define r2w (p_read_pos-p_write_pos)
#define r2e (p_end_pos-p_read_pos)
#define w2e (p_end_pos-p_write_pos)

unsigned char psz_data_buf[DATA_BUFFER_SIZE];

unsigned char* p_write_pos;
unsigned char* p_read_pos;

unsigned char* p_start_pos = psz_data_buf;
unsigned char* p_end_pos = psz_data_buf+DATA_BUFFER_SIZE;

pthread_mutex_t lock;

int xwrite(unsigned char* p_buf, int length)
{

	int len = 0;
	int l0,l1;

	pthread_mutex_lock(&lock);

	if(p_write_pos>=p_read_pos)  // w > = r
	{
		if(w2e >=length)
		{
			memcpy(p_write_pos,p_buf,length);
			p_write_pos += length;
			len = length;
		}
		else
		{
			if( (DATA_BUFFER_SIZE-w2r ) >= length)
			{

				l0 = w2e;
				memcpy(p_write_pos,p_buf,l0);


				l1 = length-l0;
				p_write_pos = p_start_pos;
				memcpy(p_write_pos,p_buf,l1);
				p_write_pos += l1;

				len = length;

			}

		}
	}
	else  // w < r
	{

		   if( r2w >= length)
		   {

				memcpy(p_write_pos,p_buf,length);
				p_write_pos += length;
				len = length;
		   }
	}

	pthread_mutex_unlock(&lock);
	return len;
}
int xread(unsigned char* p_buf, int length)
{
	int len = 0;
	int l0,l1;

	pthread_mutex_lock(&lock);

	if(p_write_pos >= p_read_pos)   // w > r
	{
		if( w2r >= length )
		{
			memcpy(p_buf,p_read_pos,length);
			p_read_pos += length;
			len = length;
		}
	}
	else  // r > w
	{
		if( r2e > length)
		{
			memcpy(p_buf,p_read_pos,length);
			p_read_pos += length;
			len = length;
		}
		else
		{
			if(( DATA_BUFFER_SIZE - r2w ) >= length)
			{

				l0 = r2e;
				memcpy(p_buf,p_read_pos,l0);

				l1 = length-l0;
				p_read_pos = p_start_pos;
				memcpy(p_buf,p_read_pos,l1);
				p_read_pos += l1;
				len = length;
			}
		}
	}

	pthread_mutex_unlock(&lock);
	return len ;
}

void* do_write_func()
{

	unsigned char buf[256];
	int len = 0;
	for(int i = 0; i<256; i++)
	{
		buf[i] = i;
	}

	while(1)
	{
		len = xwrite(buf,256);
		if(len == 0)
		{
			printf("+++++++do_write_func usleep(100)+++++++++++\n");
			usleep(100);
		}
	}


}

void printx(unsigned char *buf,int len)
{
	for(int i = 0; i<len; i++)
	{
		printf("%6d",buf[i]);
		if(i%20==0)
		{
			printf("\n");
		}

	}
	printf("\n");
}

void* do_read_func()
{

	unsigned char buf[1024];
	int len = 0;
	memset(buf,0,1024);

	while(1)
	{
		len = xread(buf,1024);

		if( len == 0 )
		{
			printf("+++++++do_read_func usleep(100)+++++++++++\n");
			usleep(100);
		}
//		else
//			printx(buf,len);
//		else
//		{
//			printx(buf,len);
//		}

	}

}

int main() {

	memset(psz_data_buf,0,DATA_BUFFER_SIZE);
	pthread_t w_thread,r_thread;

	p_write_pos = p_start_pos;
	p_read_pos = p_start_pos;

	pthread_mutex_init(&lock,NULL);
	pthread_create(&w_thread,NULL,do_write_func,NULL);
	pthread_create(&r_thread,NULL,do_read_func,NULL);

	while(1)
	{
		printf("hello world!\n");
		sleep(5);
	}


	return 0;
}

星期五 03月13

1、申请百度人脸识别SDK延期;

2、下载百度人脸识别最新版4.0SDK ;在安卓5.0版SDK编译通过;安装到RK3288 屏, 终端授权出问题;

3、解决终端授权问题

注意事项:

终端的时钟一定要是当前时间;不然授权通不过;将终端的时钟设置为自动网络获取;

4、测试,摄像头不好用,打不开;下星期在测试; 设备有一个USB接口不好用。

星期一 03月16

1、部门周会,上周工作完成情况,下周工作任务安排;
2、申请购买,额温枪 1 只;
3、修改人脸识别app,响应遥控按键;部分页面修改完成。
4、app人脸识别加入口罩识别,测试OK;
5、做加油站项目软件开发预算,完成。
6、软著申请安排人员对接;
7、开机盖,换摄像头,测试OK。在这里插入图片描述

星期二 03月17

1、修改人脸识别+口罩应用中遥控上下键焦点响应问题,页面太多,后面继续;
2、下午热成像摄像头来;在RK3399板子上运行,系统闪退,重新更新image, 照样闪退;
3、换到3288主板,OK,编译热成像DEMO APP,解决启动APP加载库时找不到xxx.so问题;
在 build.gradle 文件中加入

android {

...

defaultConfig{
...

 ndk {
        // 设置支持的SO库架构  //'armeabi' ,'arm64-v8a' /*, 'x86'*///, 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        abiFilters 'armeabi-v7a','arm64-v8a'
    }
   sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDirs = ['libs']
    }

...
}

...

}

    defaultConfig {
        applicationId "com.avsgm.ixthermalimaging"
        minSdkVersion 22
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        ndk {
            // 设置支持的SO库架构  //'armeabi' ,'arm64-v8a' /*, 'x86'*///, 'armeabi-v7a', 'x86_64', 'arm64-v8a'
            abiFilters 'armeabi-v7a','arm64-v8a'
        }
        sourceSets.main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['libs']
        }
    }

在这里插入图片描述
检测温度偏低,明天更新最新版程序再进行测试;

4、下午1:30开项目申请会议;
5、和领导讨论加油项目预算和实现技术可行相关问题;

星期三 03月18

1、安卓热成像温度检测调试;

  更新最新版本,温度测试可纠正;测试基本满足需求;

在这里插入图片描述
2、仪电额温枪安卓蓝牙通讯调试,监听蓝牙扫描设备,回调函数实现数据通讯协议;发现问题,扫描一段时间后系统会自动停止扫描;需要程序再次启动扫描;

3、热成像相机今天送了一台;明天再调试相关程序;

相关代码:

初始化:

        BluetoothAdapter.getDefaultAdapter().startDiscovery();
        BluetoothAdapter.getDefaultAdapter().startLeScan(mLeScanCallback);

        mLEScanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
        //mLEScanner.

        ScanSettings settings = new ScanSettings.Builder()
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                .build();

回调函数:

    private String lastBluetoothMac = "GMT";
    private int lastBluetoothCode = 0x1FF;
    private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {

        @Override
        public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
                 //scanRecord存放广播和扫描应答数据,rssi存放扫描获取的rssi值

            int code;
            if(device.getName()!=null)
            {
                if (device.getName().contains("iEartYK")) {

                    final String deviceName = "设备名:" + device.getName();
                    final String deviceAddr = "Mac地址:" + device.getAddress();

                    final String broadcastPack = "广播包:" + byteToHex(scanRecord);
                    final String rssiString = "RSSI:" + String.valueOf(rssi) + "dB";

                    float temp =((scanRecord[6]^scanRecord[8])*256+(scanRecord[7]^scanRecord[8]))/10.0f;
                    code = scanRecord[8];

                    if(deviceAddr.equals(lastBluetoothMac)==false||lastBluetoothCode!=code) {


                        Log.i("Test", "++++++++++++deviceName    = " + deviceName);
                        Log.i("Test", "++++++++++++deviceAddr    = " + deviceAddr);
                        Log.i("Test", "++++++++++++broadcastPack = " + broadcastPack);
                        Log.i("Test", "++++++++++++rssiString    = " + rssiString);
                        Log.i("Test", "++++++++++++temp    = " + temp);
                    }

                    lastBluetoothMac = deviceAddr;
                    lastBluetoothCode = code;
                }
            }


        }

星期四 03月19

1、上午调试热成像相机,熟悉相关文档,和安装测试客户端软件;
2、编译和测试热成像相机sdk,视频有时无故停止;
3、继续修改人脸识别app,响应遥控按键,页面太多,明天继续。
4、下午收到深圳r k 3399主板一块。

星期五 03月20

1、上午部门开会,会议预约项目进度太慢,工作没有积极性,不主动。
2、沈总来电,有拼接屏项目需要提供技术支持;
3、和马总进行项目沟通,项目概况,3层楼需要进行信息化改造;由拼接屏,视频会议预约,信息发布需求;
需要提供产品功能简介;
4、下午继续修改人脸识别APP,未完待续;
5、公司其它部门人员无法提供,只能自己写产品功能简介;

星期一 03月23日

1、上午部门周会,项目进度任务安排;
2、讨论模版功能模块机页面设计;

星期二 03月24日

1、上午参加沈-夏普的客户会议;介绍公司相关产品;
2、下午寄来一台整机和双目摄像头,拆机,双目摄像头暂时用不了,需要相关线材;

星期三 03月25日

1、开始在人脸识别中集成热成像,代码修改完毕,测试热成像不出图。正在找原因。

星期四 03月26日

1、继续调试代码,热成像设备已经连接成功,温度也有数据,说明设备已经工作,代码日志输出surfaceview的width,height为0,修改后图像出来。
2,修改相关代码。集成工作完成;

星期五 03月27日

1、和同事出差杭州,早上8:55的高铁到杭州,张曙有和医院健康管理的相关需求;上午到对方公司介绍公司业务和进行展示;
2、下午进行向对方远程演示拼接屏功能,对方满意。
3、和张曙沟通,了解具体需求;
他们公司新建才3月,1、需要做网站,2、业务管理系统+行政管理,3、拼接屏展示
4、下午5:16的高铁返程。

星期一 03月31日

1、上午开部门周会,回顾上周工作,布置这周任务;
2、下午开始更换疫情防控平台终端设备UI,调整布局,部分完成;明天继续;
在这里插入图片描述

星期二 04日01日

1、继续完成疫情防控平台终端设备相关功能;实现RecyclerView 及相关功能,还要继续优化;

星期三 04日02日

1、继续完成疫情防控平台终端设备相关功能,优化陌生人检测和人脸截图刷新问题;
2、对接蓝牙额温枪检测功能基本完成;功能样机如图。
在这里插入图片描述

星期四 04日03日

1、将疫情检测设备带去上海工程技术大学演示,主要设备的系统时间问题。
2、下午讨论信息化项目疫情防控综合管理系统功能模块及实现,内容如下;

疫情安全防控综合管理系统
一、 系统软件
1、 疫情智能监测系统(场景-门口/宿舍楼/教室/食堂/图书馆)
功能描述:
(1) 人脸信息采集;
(2) 人脸识别;
(3) 口罩识别;
(4) 定位/定时/基于位置信息采集;
(5) 环境温/湿度
(6) 空气质量/烟雾
功能模块:用户权限管理、实时检测人数统计、异常统计、信息通知、检测报表、统计分析、监测设备管理、日志管理、系统设置
2、 疫情异常人员追踪系统
功能描述:
(1) 人脸特征采集;
(2) 异常人员发现;
(3) 异常人员追踪及行为轨迹;
(4) 区域闯入报警
(5) 相关区域预警信息通知到达;
(6) 邮件/短信/通知各级部门;
(7) 疫情分析数据报表
3、 疫情管控可视化管理系统(疫情大数据展示+监控视频平台+应急信息发布平台)
功能描述:
(1) 校园疫情安全防控综合管里系统、监控管理平台、信息发布平台展示;
(2) 实时监控视频展示;
(3) 视频会议接入;
二、系统设备组成
(1) 体温监测测\口罩\人脸识别\终端设备-测温(人脸+热成像+5G+蓝牙);
(2) 蓝牙额温枪
(3) 远距离热成像摄像机
(4) 视频拼接处理器;
(5) LED拼接屏;
(6) 高清/4K/8K摄像头(5G);
(7) 服务器集群;

4、完成网络拓扑图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值