day 1
1.大部分时间花在尝试在wsl上先装ubuntu再搞docker最后失败了
2.学习了函数计算平台的一些基础操作,时间函数的入口等
2.把代码放到函数计算平台上,由于依赖库不够要自己传,自己传要用fun,fun的方法依赖docker,docker又必须要hyper-v支持(即使在wsl上装ubuntu里装docker也一样不能使用服务(daemon,systemctl命令等..))
3.了解接下来要改的功能摄像头实时截取视频图片来处理、去掉黑色背景,设置成透明
问题
1.配置docker镜像服务器不可避免用到systemctl绕不过的坑
2.仅支持window10专业版系统,或是已安装docker for window10,否则无法启动daemon守护进程,一样不可避免
3.算法还要重新改过...
day 2
1.把实时截取视频中的一帧+处理+后续输出抠图结果(无背景图片)整合到一起,jpg格式是不带透明度的,所以图片保存最后只能保存png格式,另外cvshow显示的图片也不带有透明度,所以看起来还是rgb的图片,实际上rgb的值随便输最后a设置成0(0-255)就是输出没有背景的抠图结果了,且在处理时要把rgb转换成bgra格式,也是opencv怪怪的要求...
2.图像分类算法,这里只要实现一个二分类,背景与待检测物品的分类,看了一些coco数据类型,pycococreator转coco数据类型,FRCNN、Mask-RCNN、YOLO、SSD等大概了解了一下,r-cnn看的比较全面的基础了解
问题
1.当前还是按键来截图从实时视频中,不是自动捕获物品,然后自动画框,实时显示物品尺寸信息的效果
2.二分类未找到合适的代码目前,试试看背景色提取把rgb值存进去进行分类
笔记
R-CNN
R-CNN的目的为接收图像,并正确识别图像中主要目标(通过边界框)的位置。
输入:图像
输出:边界框+图像中每个目标的标注 rcnn在图像中假设了一系列边界,看它们是否可以真的对应一个目标,通过多个尺度的窗口选择性搜索,并搜寻共享纹理、颜色或强度的相邻像素。这些边框被称为区域提案,通过尝试将相邻像素归类,以识别物体。 在创建一组区域提案(region proposal)后,R-CNN 简单地将该区域卷曲到一个标准的平方尺寸,并将图像传递给修改版的 AlexNet 以确定其是否为有效区域。
在 CNN 的最后一层,R-CNN 添加了一个支持向量机(SVM),它可以简单地界定物体是否为目标,以及是什么目标。
最后,R-CNN 在区域提案上运行简单的线性回归,以生成更紧密的边界框坐标从而获得最终结果。
概括:
- 为边界框生成一组提案
- 通过预训练的 AlexNet 运行边界框中的图像,最后通过 SVM 来查看框中图像的目标是什么
- 通过线性回归模型运行边框,一旦目标完成分类,输出边框的更紧密的坐标
Fast R-CNN
Rcnn运行速率慢由于:
- 它需要 CNN(AlexNet)针对每个单图像的每个区域提案进行前向传递(每个图像大约 2000 次向前传递)。
- 它必须分别训练三个不同的模型 - CNN 生成图像特征,预测类别的分类器和收紧边界框的回归模型。这使得传递(pipeline)难以训练
Fast rcnn的解决思路: - ROI(兴趣区域)池化
由于:对于每个图像,很多提出的图像区域总是相互重叠,使得一遍又一遍地重复进行 CNN 计算
所以:每个图像只运行一次 CNN,然后找到一种在 2000 个提案中共享计算的方法
在 ROIPool 中,创建了图像的完整前向传递,并从获得的前向传递中提取每个兴趣区域的转换特征。RoIPool 分享了 CNN 在图像子区域的前向传递,通过从 CNN 的特征映射选择相应的区域来获取每个区域的 CNN 特征,然后将每个区域的特征使用maxpooling,这样只需要原始图像的一次传递。
- 将所有模型并入一个网络
Fast R-CNN 将卷积神经网络(CNN),分类器和边界框回归器组合为一个简单的网络-rcnn使用不同的模型来提取图像特征(CNN),分类(SVM)和紧缩边界框(回归器),而 Fast R-CNN 使用单一网络计算上述三个模型,在单一模型中联合训练卷积神经网络、分类器和边界框回归器。Fast R-CNN在CNN顶部用简单的softmax层代替了支持向量机分类器(SVM classfier)以输出分类,并添加了与 softmax 层平行的线性回归层以输出边界框坐标,使得输入:带有区域提案的图像,输出:带有更紧密边界框的每个区域的目标分类
Faster R-CNN
仍存问题:区域提案器:检测目标位置的第一步是产生一系列的潜在边界框或者供测试的兴趣区域。在 Fast R-CNN,通过使用选择性搜索创建这些提案,这是一个相当缓慢的过程。
由于:区域提案取决于通过 CNN 的前向(forward pass)计算(分类的第一步)的图像特征
所以:重复使用区域提案的相同的 CNN 结果,以取代单独运行选择性搜索算法
在 Faster R-CNN,单个 CNN 用于区域提案和分类,这样只需要训练一个cnn,就可以得到区域提案,使得输入:图像(注意并不需要区域提案),输出:图像中目标的分类和边界框坐标
Faster R-CNN 在 CNN 特征的顶部添加了一个简单的完全卷积网络,创建了所谓的区域提案网络,区域提案网络在 CNN 的特征上滑动一个窗口。在每个窗口位置,网络在每个锚点输出一个分值和一个边界框(4k个框坐标,k=锚点数量),区域生成网络的工作是在 CNN 特征映射上传递滑动窗口,并在每个窗口中输出 k 个潜在边界框和分值,以便评估这些框有多好。
区域提案网络输入:cnn特征图,输出:每个锚点的边界框
分值表征边界框中的图像作为目标的可能性,并将每个可能成为目标的边界框传递到 Fast R-CNN,生成分类和收紧边界框
Mask R-CNN
扩展 Faster R-CNN 以用于像素级分割
图像实例分割的目的是在像素级场景中识别不同目标,在 Mask R-CNN 中,在 Faster R-CNN 的 CNN 特征的顶部添加了一个简单的完全卷积网络(FCN),以生成 mask(分割输出)。Mask R-CNN 通过简单地向 Faster R-CNN 添加一个分支来输出二进制 mask,以说明给定像素是否是目标的一部分。
由于像素级分割需要比边界框更细粒度的对齐,图像通过 RoIAlign 而不是 RoIPool 传递,使由 RoIPool 选择的特征图区域更精确地对应原始图像的区域。
day 3
1.py里通过opencv访问网络摄像头,获取实时图像,隔段时间就预览,然后来作为图片判断是否对该图片进行处理
2.更改为手机端,还是用网页的形式,但是要调整显示
问题
1.opencv获取的网络摄像头分辨率过低,在海康威视配置里调高码率的话程序跑起来会卡死时间长了
2.是否可以从网页端来控制按时截图然后在需要时候把图片拉取下来处理
笔记
opencv背景建模
背景建模通常分为以下三步:
- 背景初始化阶段-背景建模提取
- 前景检测阶段-视频分析,前景对象检测
- 背景维护与更新
算法:
实现对前景与背景像素级别的建模,最常见的是RGB像素的概率密度分布,当对象没有变化的时候,通过连续的n帧进行建模生成背景模型,高斯混合模型(GMM)正好满足这种方式,对高斯混合模型中的每个componet进行建模,在更新的时候,会考虑分布直接相似程度,当马氏距离相似度小于3的时候,肯能GMM的主成分维持不变,当大于3以后就会当成一个新的componet,丢弃前面最小的,维持模型,并用参数α来控制更新。
基于GMM的核密度估算需要考虑初始输入componet数目参数、OpenCV中实现的另外一种方法是基于简单的核密度估算方法,然后通过KNN对输出的每个像素进行前景与背景分类,实现了更加快速的背景分析。
具体流程:
- 初始化背景建模对象GMM
- 读取视频一帧
- 使用背景建模消除生成mask
- 对mask进行轮廓分析提取ROI
- 绘制ROI对象
Opencv中相关api:
Ptr<BackgroundSubtractorMOG2> cv::createBackgroundSubtractorMOG2(
int history = 500,
double varThreshold = 16,
bool detectShadows = true
)
history表示过往帧数,500帧,选择history = 1就变成两帧差 varThreshold表示像素与模型之间的马氏距离,值越大,只有那些最新的像素会被归到前景,值越小前景对光照越敏感。 detectShadows 是否保留阴影检测
从笔记本摄像头改到网络摄像头:
采用RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,RTSP是TCP/IP协议体系中的一个应用层协议实时流协议(RTSP)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。
网络摄像头的IP地址需要和电脑设置为在同一个网段,否则无法访问到设备。IP地址分为四段, 同一个网段指的是IP地址前三段一样,最后一段不一样。
day 4
forgot...