网站建设各模块功能简述,个人网站如何被百度收录,怎么仿制网站,深圳网站建设_请到中投网络!前言#xff1a;前年替公司实现了一个在线检疫App#xff0c;接下来一年时不时收到该App的需求功能迭代#xff0c;部分线下问题跟进。随着新冠疫情防控政策放开#xff0c;该项目也是下线了。 从技术角度来看#xff0c;有自己的独特技术处理特点。下面我想记录一下该App… 前言前年替公司实现了一个在线检疫App接下来一年时不时收到该App的需求功能迭代部分线下问题跟进。随着新冠疫情防控政策放开该项目也是下线了。 从技术角度来看有自己的独特技术处理特点。下面我想记录一下该App的性能优化点。 项目结构简介 整个项目由摄像头采集帧。交给算法该算法是一个跑在linux上面的应用程序对图像实现人脸识别是否佩戴口罩体温是否异常红外线测温。将识别后的帧与结果通过GRPC通信推送给App针对这一系列需求展开 该APP主要涉及到的是毫秒级的图像帧就之前打日志初步观察到1s大概能接收到算法推送10~15帧图像。优化也是围绕图像来处理。 针对该流程的优化点1压缩图片大小提高图像下载速度2根据绘制Bitmap的SurfaceView的长宽对原图进行尺寸压缩3解码Bitmap格式采用RGB_5654Bitmap内存复用. 关于如上第二点与第三点优化大致代码如下值得一提的是采用尺寸压缩解码Bitmap还会减少解码时间10ms左右对于毫秒级反复解码图像效果提升是非常显著的 另外对于毫秒级Bitmap反复创建内存复用是必不可少的它会让App避免内存抖动的情况内存抖动时间长了还真会导致App卡顿最后OOM崩溃了。
另功能点“温度图”对于温度图算法推送过来的是一个关于温度值的浮点数组。对于这类反复推送我们任然还得需要内存复用当初根据该需求写的一个数组缓存池
/*** 温度图对应的数据缓存池* 内存复用 避免内存抖动*/
abstract class AllocAnyArrayPoolT(cacheSize: Int 4) {companion object {const val TAG TempDataPool}private val arrayPool: LruCacheInt, SoftReferenceT LruCache(cacheSize)fun getAllocData(arraySize: Int): T arrayPool.get(arraySize).let {if (it null) {returnlet createObjSpace(arraySize).apply {Timber.i($TAG from create)arrayPool.put(arraySize, SoftReference(this))}}returnlet it.get().let { allocData -if (allocData null) {createObjSpace(arraySize).apply {Timber.i($TAGfrom create)arrayPool.put(arraySize, SoftReference(this))}} else {Timber.i($TAGfrom cache)allocData}}}protected abstract fun createObjSpace(arraySize: Int): T} 主要记录这么多。当然该App的优化远不止这么多比如场景抓拍图像压缩上传人脸识别到人脸库获取信息涉及到本地数据库减少访问网络次数提升获取数据效率等等