在中期的某个时候,我想开始发展我的家庭自动化系统以获得视频功能。我已经开始对此进行一些研究,我是一个耐心和快速学习者,但它是一个非常密集的领域,在数学上比我以前更强烈。我从未以编程方式对视频做过任何事情,虽然我已经阅读过OpenCV的文档和一些非常激烈的内容,例如研究论文here,但令人沮丧的是对我来说是一种愚蠢的行为。我确实有多变量微积分和线性代数的背景,但那是很久以前的事了。现在,我用Java编写了几乎所有的Java编程。我还参加机器学习课程,我认为这将有助于对象分类。
这里的地面水平是多少?我需要学习什么样的数学,我应该写什么样的Hello World应用程序,我需要什么样的相机?这种工作的首选语言是什么?现在最先进的技术是什么,实际上是不可能的?
以下是我希望有一天能够完成的一些事情:
首先,我希望大部分时间都能保留一个简短的缓冲区"历史记录,并在识别出某些功能或系统的其他部分引发某些事件时开始记录到本地网络位置。
我想模仿Dropcam的"Activity Zones",用户可以在固定摄像机的视点中定义重要区域,并指定自定义事件与这些区域中的mostion相关联。
我希望能够识别人脸,并与已知训练样本的小型数据库进行比较,以便与其他占用传感器一起实时建立。
我希望能够使用多台摄像机根据提供的平面图实时跟踪物体的位置。
我一直在玩各种各样的微控制器,我希望在视频输入到我的中央服务器之前尽可能多地对相机进行预处理,以便尽可能多地并行化事物。
答案 0 :(得分:2)
以下是我的拙见。
对于背景知识,一般来说,熟悉计算机视觉领域可能会有所帮助(因为您所做的事情属于其经典领域)。有用的数学背景包括信号处理(即傅里叶变换理论),其经常用于机器人中的识别和一般的图像处理,"数学编程" (凸优化,线性/整数规划等),以及一些概率论/随机过程&矩阵演算(特别是如果你想用卡尔曼滤波器或粒子滤波器跟踪)。但是,如果您只是计划使用OpenCV等工具,则无需了解所有这些背景知识。
对于文献,请访问谷歌学者并输入"运动跟踪"或者"视频识别",例如。
老实说,对于实时,我不认为C ++有太多的竞争。你已经看过OpenCV,但也看看Boost。 Matlab还有一些快速而神奇的工具箱,但显然灵活性较差。又贵又贵。我也听说过最新的计算机视觉数学知识,但是它与matlab有类似的问题。
但是,由于你刚刚开始在现场,我的建议是从Python开始。 numpy,scipy,scikit-learn组合很棒,而且它有opencv绑定。还可以查看PyStruct的结构化学习,这对于这种事情非常好,而Theano用于深度学习。这些工具很慢但几乎非常容易使用;非常适合原型设计。
答案 1 :(得分:1)
由于您希望做的大多数事情都属于计算机视觉,因此最好学习最先进的技术。截至目前,它是深度学习(使用sota导致视频活动识别,对象检测和跟踪等等)。
对于学习深度学习的数学背景,您需要线性代数,概率和统计,多元微积分和一些优化技术。您可以开始阅读this book。它假定背景最少。
在编程方面,知道python就足够了。
有关计算机视觉的深度学习资源的精选列表,请查看this website。它还包含有关视频分析的信息。