# 自动/固定焦距

## 概述

| 参数 | 固定焦距（FF） | 自动对焦（AF） |
| --- | --- | --- |
| [抗振性能](#Vibration%20Tolerance) | 高 | 低 |
| [对焦范围](#Focus%20Range) | 50厘米到无穷远 | 10厘米到无穷远 |
| [手动对焦](#Manual%20Focus) | 否 - 镜头被固定 | 是 - 可通过程序控制 |

总体而言，自动对焦摄像头更加通用，适用于更广泛的应用场景，而固定焦距摄像头在高振动环境中更为稳健。 请参阅[识别对焦类型](#Recognizing%20focus%20type)了解如何判断您拥有的摄像头模组类型。

## 抗振性能

固定焦距（FF）更适合处理高振动环境。

自动对焦使用音圈电机（VCM）来移动安装在自由移动镜头上的磁铁。在高振动下，这种电磁力会被压制，导致镜头随意振动，从而产生模糊/怪异/“果冻”效果的画面。

一些高振动应用场景包括：

 * 无人机
 * 割草机
 * 重型机械
 * 哈雷戴维森摩托车（以其强烈振动而闻名）等

## 对焦范围

自动对焦（AF）在这方面表现最佳。固定焦距可以清晰看到约50厘米（约20英寸）到无穷远的距离，而自动对焦可以清晰看到10厘米（约4英寸）到无穷远的距离。

自动对焦通过实际移动镜头到不同位置（约255个不同步进）来对特定距离聚焦，从而实现更宽的景深（DoF）。自动对焦模型也可以通过API手动控制（步进为1/256），参见下文。

## 手动对焦

自动对焦摄像头可以通过DepthAI API手动控制。您可以设置对焦值（0..255），方式如下：

 * 运行时，使用[此示例](https://docs.luxonis.com/software/depthai/examples/rgb_camera_control.md#rgb-camera-control)，您可以使用逗号和句点键来改变对焦
 * 在启动时，使用以下Python代码：

```python
pipeline = dai.Pipeline()
rgbCam = pipeline.create(dai.node.ColorCamera)
rgbCam.initialControl.setManualFocus(100) # 0..255
```

注意：在高振动环境中，即使您设置了手动对焦，AF线圈（用于固定镜头）也无法将镜头保持在原位，从而导致图像模糊。

## 识别对焦类型

如果您不确定面前的OAK设备是自动对焦还是固定对焦彩色摄像头，可以通过自动对焦机构上的银色金属环来识别，如下图所示。

另一种方法是通过DepthAI API库查询此信息：

```python
import depthai as dai
with dai.Device() as device:
    print(device.getConnectedCameraFeatures())
```

这将输出类似下面的内容。hasAutofocusIC字段对于AF摄像头为1，对于FF摄像头为0。因此，在此例中，我们的OAK-D摄像头是AF类型：

```python
[
    {socket: CAM_A, sensorName: IMX378, width: 4056, height: 3040, orientation: AUTO, supportedTypes: [COLOR], hasAutofocus: 0, hasAutofocusIC: 1, name: color},
    {socket: CAM_B, sensorName: OV9282, width: 1280, height: 800, orientation: AUTO, supportedTypes: [MONO], hasAutofocus: 0, hasAutofocusIC: 0, name: left},
    {socket: CAM_C, sensorName: OV9282, width: 1280, height: 800, orientation: AUTO, supportedTypes: [MONO], hasAutofocus: 0, hasAutofocusIC: 0, name: right}
]
```

注意：这里有两个字段：

 * hasAutofocus字段存储在EEPROM中（可能不正确），主要用于向后兼容。
 * hasAutofocusIC字段是从摄像头模组（VCM控制器）读取的实际值，是您应该依赖的字段。
