我们控制网络摄像头的焦点或少量C#和STM32

一切开始都很有趣。 我的计算机连接了制造商Logitech(型号C525)的两个网络摄像头。 相当不错的相机,但后来证明,驾驶员的质量非常可疑。 实际上,这不仅是该制造商的问题。 他们的配置实用程序替代了系统,但甚至不怀疑计算机可能装有多个该型号的相机。 结果,当您从OBS Studio打开不同摄像机的设置窗口时,焦点始终更改为一个。 一团糟。


一次,他在VLC中拍摄和广播摄像机方面发挥了很多作用。 从他的界面中,我了解了DirectShow 。 尽管经验不足,但我还是决定用C#进行开发(我们不会考虑大学的实验室)。 从字面上看,晚上,我为发现的所有摄像机绘制了TrackBars,幸运的是没有限制。 我将该实用程序交给了几个熟悉的视频博客作者,以供在流中使用。



接下来,他们收到了扩展功能的请求。 添加白平衡调整。 那么为什么不让用户选择他需要的参数呢? 对于每个摄像机分别。 从这一刻开始出现选项卡。 第一个是常规的,具有选定的参数,以及每个检测到的网络摄像头的选项卡。



是的,相机并非支持所有参数。 仅3种状态:不可用,仅手动调整,手动和自动调整。 也只有自动功能,但我不记得要从任何设备上获得它。 因此,一些线被关闭。 例如,对于便携式相机,与捕获设置关联的列表的一半不可用。 但是更正已经在那里。


在“标签式界面”的实现过程中,我想到了一个想法:安装编码器。 在单反相机中,转动对焦环非常方便。 但是他们没有将其交付给网络摄像头。 因此,STM32F070婴儿已连接到该项目。 这些是支持USB 2.0的最小芯片。 在Habr上已经有一篇关于Custom HID的好文章 ,因此您可以跳过此项目的详细描述。 设备布局非常简单。 该微控制器不需要管道。 只是现在他不知道如何启动PLL上的内置发生器,因此需要石英。 在控制元件中,除编码器外,还有4个按钮。 其中之一内置在编码器中。 这些现在很常见。 关于每个人的任命将稍晚一些。



为了调试软件,焊接了两个HID设备实例。 但是它们几乎组装在面包板上。 这些实际上是Pinboard II的围巾。 徒劳地接线时,我没有立即添加USB端口和线性稳定器。 看起来集体农场较少(否)。 在完成的设备中,计划将围巾放在三脚架上的相机支架中。 当然,可以在3D打印机上打印。 为了只将一根电线引到相机,您还可以将USB集线器放在同一位置。 例如,FE1.1s不会比STM32大很多。 但是诚实的480兆位。 总的来说,铁的实施仍是一个悬而未决的问题。


希望重复的人可以从资源库下载源。 一块铁的零件成本有条件地为100卢布,微控制器“吃掉”其中的55卢布。 就我而言,石英的成本为20兆赫,但这就是“垃圾箱中的物质”。 更改面额,但重新配置时钟系统,以使USB模块适合所有情况。



现在介绍硬件按钮的任命。 如果可能,内置编码器会将参数返回到自动模式。 旋转转换为手动。 由于用户可以调整几个参数,因此需要在它们之间切换。 按钮S1负责循环遍历参数,在S2和S3上,您可以分配特定的参数,以免检查所选参数而被程序窗口分散注意力。


指示用于识别设备。 在摄像机选项卡上,您可以将HID设备绑定到特定的摄像机。 在下拉列表中选择时,LED点亮。 该图提供了一个LED,该LED在一个外壳中具有两个晶体,但并未使用其所有功能。 留给未来。


每个HID设备都有自己的唯一序列号,该序列号通过USB传输。 列表中显示的是他。 数字的唯一性由微控制器本身的标识符来确保。 这是生产日期及其在盘子上的位置。 一种非常有趣的形成方法。 虽然不是序列号存储在INI文件中,但是设备的路径(包含VID,PID和GUID)。 所有设置都是可读的,因此可以使用记事本编辑文件。 但是为什么。


相机刀片是个讨厌的东西。 例如,OBS Studio离开最后一帧。 有时您不会立即注意到故障。 所以要注意头盔。 通常,连接新设备和重新连接现有设备的过程是最困难的任务。 网络摄像头和HID。 基本上是第一个。 受缺乏C#编程经验的影响。 有必要阅读某种书籍...在它仍然有效的同时流了多少流...该过程在YouTube上进行了广播,在该过程中,观众定期通过代码和应用功能提示。 非常方便。 集体意识。


因此,由于倾斜的驱动器,这种工艺出现了。 当然,随着时间的流逝,它将进行更新,调试,因此有一个到存储库的链接。

Source: https://habr.com/ru/post/zh-CN463595/


All Articles