lsq blog

嘿,朋友! 如果是你,请打招呼!

YUV图像数据的格式转换(YV12toNV21)及base64编解码

在使用行车记录仪检测行人和车辆项目中,遇到了这样一个,相机回调返回的数据格式不是默认的NV21,而是YV12,这个硬件上的问题困扰了我好久,最终通过咨询厂商解决了这个问题。此外还有一个需求,要求将图像数据通过网络发送到指定的服务器,为了保证数据不被截取,我采用了Base64对图像数据进行了加密。下面详细介绍这两个问题。 1 YV12转NV21 YUV数据格式相关的介绍在我的这篇博文中已经...

MobileNetSSD模型量化及转换NCNN模型

最近在安卓移动端开发一个可以实时检测车辆行人的app,计算框架采用tencent的ncnn,深度神经网络模型采用MobileNetSSD,这也是现在网上流传比较广的一个例子。受限于移动端计算资源,几乎不可能完成网络模型的实时推断,模型量化的技术也就应运而生。本文将介绍:将一个预训练好的MobileNetSSD(caffe)模型进行量化、量化caffe模型转换成ncnn模型以及MobileNe...

在Android环境使用原生OpenCV

安卓手机端的CPU性能越来越强大,有些手机已经搭配了专用的图像处理芯片,这给在移动端图像处理提供了有利的硬件基础。Android的原本开发语言是Java,(不过现在好像要被Kotlin取代?),Java的性能一般来说不如C/C++,所以直接使用Java进行图像处理不是一个明智的选择。好在现在已经有很多开源的图像处理算法库,其中最常用的OpenCV就是用C/C++进行的底层实现,其中一些算法还...

安卓相机YUV格式解析

我们在开发安卓相机相关应用的时候,最基本的操作是在屏幕上实时预览相机捕获的图像。但更多时候需要对捕获到的图像或者视频进行处理,例如人脸检测,图像增强等等。在处理图像时,不可避免地会遇到图像格式的问题,常见的格式有:RGB,YUV和灰度图等。 安卓开发中,我们处理的实时图像数据来自相机的回调函数 onPreviewFrame(final byte[] bytes, final Camera ...

使用U盘安装Ubuntu16.04LTS系统

前两天拿到一台新电脑,抬手我就想装一个Ubuntu,那成想装了一下午才装好。现在回顾一下装机过程和遇到的一些问题,算是给自己做个记录。这次安装Ubuntu是在裸机上进行安装,不涉及到双系统问题。目前为止,Ubuntu16.04LTS版本是比较常用且较为稳定的版本,对很多开发环境支持的都很好,所以选择该版本进行安装。安装Ubuntu16.04LTS分为两个步骤:制作U盘启动盘和安装Ubuntu...

Ubuntu16.04LTS环境配置

不管是虚拟机还是双系统还是单系统,每次装完系统后都不可避免的一顿配置环境,这个过程中又是一顿谷歌。所以,是时候把一些经常用到的软件和工具总结一下。 1 装机必备 首先是装完Ubuntu系统后,必须(墙裂建议)进行的安装操作。 1.1 软件源设置 软件软设置的目的在于以后装软件的时候可以速度快一点,设置方法是:setting->software & updates->...

OS 7死锁

在多到程序环境下,多个进程可能竞争一定数量的资源。如果某个进程申请的资源不可用,那么该进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态,称为死锁(deadlock)。在正常操作模式下,进程只能按如下顺序使用资源:申请->使用->释放。多个线程可能因为竞争共享资源而容易出现死锁。如果在一个系统中下面4个条件同时满足,那么会引起死锁: ...

OS 6同步

协作进程是可以与在系统内执行的其他进程互相影响的进程,他们可以直接共享逻辑地址空间(代码和数据),或者只通过文件或消息来共享数据。多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件。为了避免竞争条件,需要确保一段时间内只有一个进程能操作变量。为了实现这种保证,要求进行一定形式的进程同步。 1 临界区问题 每个进程有一个代码段称为临界区(criticalsecti...

OS 5处理器调度

1 处理器调度概念 CPU调度是多道程序操作系统的基础,通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率。CPU的成功调度依赖于进程的如下属性:进程执行由CPU执行和I/O等待周期组成,进程在这两个状态之间切换。CPU在两个状态区间的频率如下图所示,通常为指数或超指数形式,具有大量短CPU区间和少量长CPU区间。 CPU调度决策可在如下4中情况下发生: 当一个程程从运行...

OS 4进程和线程

1 进程 进程是现代分时操作系统的工作单元,系统由一组进程组成,操作系统进程执行系统代码而用户系统执行用户代码。粗略地说,进程是执行中的程序,进程不只是程序代码,有时也成为文本段(代码段)。进程还包括当前活动,通过程序计数器和处理器寄存器的内容表示。另外,进程通常还包括进程堆栈段和数据段。如下图所示。 进程在执行时会改变状态,每个进程可能会处于下列状态之一。一次只能有一个进程可以在一个...