固件升级

Zivid 为其相机提供持续的更新。更新包括了在主机上运行的部分和相机本身。 Zivid SDK 会定期更新,以改进主机上的图像处理。 SDK 里还包括了最新的相机固件。相机固件的更新频率低于主机软件的频率。这些更新将提高稳定性、鲁棒性和采集速度。

To update camera firmware, use Zivid Studio, the CLI Tool, or the SDK API.

每个 SDK 版本都与相机固件相匹配,SDK 将确保相机运行兼容的固件,包括在必要时回滚到较旧的固件版本。

每个 Zivid SDK 版本都与特定的相机固件版本相匹配。每次升级 SDK 时,您都必须同时更新相机固件,以保持两者兼容。

新相机出厂时搭载的固件版本可能比您应用程序所使用的 SDK 版本更新,尤其是当应用程序被锁定在特定 SDK 版本时。在将新相机投入生产之前,请将其固件更新为与您应用程序所使用的 SDK 版本相匹配的版本。

Zivid Studio

当 Zivid Studio 连接到相机时,会检查相机的固件版本是否匹配。如果固件不匹配,您可以直接通过 Zivid Studio 进行更新。

CLI Tool
Windows

按下键盘上的 Win+R 键启动命令提示符,键入 cmd 后点击 Enter。

导航到您安装 Zivid 软件的文件夹:

cd C:/Program Files/Zivid/bin

运行 ZividFirmwareUpdater :

ZividFirmwareUpdater.exe
Ubuntu

ZividFirmwareUpdater 是 适用于 Ubuntu 系统的 Zivid Tools 软件包的一部分。如果您尚未安装,请按照 软件安装 中的步骤进行安装。

现在您可以运行 ZividFirmwareUpdater 了:

ZividFirmwareUpdater
Jetson Linux

ZividFirmwareUpdater 是 适用于 Ubuntu 系统的 Zivid Tools 软件包的一部分。如果您尚未安装,请按照 软件安装 中的步骤进行安装。

现在您可以运行 ZividFirmwareUpdater 了:

ZividFirmwareUpdater

将固件从 1.6.6 更新到 1.6.7

运行 ZividFirmwareUpdater 时的示例输出

可以从 here 找到 ZividFirmwareUpdater 的源码。

API

该 SDK 提供了用于更新相机固件的功能。

跳转到源码

源码

int main()
{
    try
    {
        Zivid::Application zivid;

        auto cameras = zivid.cameras();
        for(auto &camera : cameras)
        {
            if(!Zivid::Firmware::isUpToDate(camera))
            {
                std::cout << "Firmware update required" << std::endl;
                std::cout << "Updating firmware on camera " << camera.info().serialNumber()
                          << ", model name: " << camera.info().modelName()
                          << ", firmware version: " << camera.info().firmwareVersion() << std::endl;
                Zivid::Firmware::update(camera, [](double progressPercentage, const std::string &stageDescription) {
                    std::cout << std::round(progressPercentage) << " % : " << stageDescription
                              << (progressPercentage < 100 ? "..." : "") << std::endl;
                });
            }
            else
            {
                std::cout << "Skipping update of camera " << camera.info().serialNumber()
                          << ", model name: " << camera.info().modelName()
                          << ", firmware version: " << camera.info().firmwareVersion() << std::endl;
            }
        }
    }

    return EXIT_SUCCESS;
}
跳转到源码

源码

static int Main()
{
    try
    {
        var zivid = new Zivid.NET.Application();

        var cameras = zivid.Cameras;
        foreach (var camera in cameras)
        {
            if (!Updater.IsUpToDate(camera))
            {
                Console.WriteLine("Firmware update required");
                Console.WriteLine("Updating firmware on camera {0}, model name: {1}, firmware version: {2}",
                    camera.Info.SerialNumber, camera.Info.ModelName, camera.Info.FirmwareVersion);
                Updater.Update(camera, callback: (progressPercentage, stageDescription) =>
                {
                    Console.WriteLine("{0}% : {1}" + ((progressPercentage < 100) ? "..." : ""), progressPercentage, stageDescription);
                });
            }
            else
            {
                Console.WriteLine("Skipping update of camera {0}, model name: {1}, firmware version: {2}",
                    camera.Info.SerialNumber, camera.Info.ModelName, camera.Info.FirmwareVersion);
            }
        }
    }

    return 0;
}
跳转到源码

源码

def _main() -> None:
    app = zivid.Application()

    cameras = app.cameras()
    for camera in cameras:
        if not zivid.firmware.is_up_to_date(camera):
            print("Firmware update required")
            print(
                f"Updating firmware on camera {camera.info.serial_number}, model name: {camera.info.model_name}, firmware version: {camera.info.firmware_version}"
            )
            zivid.firmware.update(
                camera,
                progress_callback=lambda progress, description: print(
                    f'{progress}% : {description}{("","...")[progress < 100]}'
                ),
            )
        else:
            print(
                f"Skipping update of camera {camera.info.serial_number}, model name: {camera.info.model_name}, firmware version: {camera.info.firmware_version}"
            )


if __name__ == "__main__":
    _main()

有关相应的 API,请参见 Firmware (namespace)。