珊瑚USB推断在Windows 10上不工作(ValueError: Failed to load delegate from edgetpu.dll)。

更新。 看起来,2022年10月24日的安装程序版本已经修复了这个错误。

按照Windows的安装说明,在 珊瑚网站,我得到了以下错误。

Max@Rhea MINGW64 /c/Business-2022/pi3g e.K/Marketing/2022 Präsentation für Ric/Coral on Windows/coral/pycoral (master)
$ pyenv exec python examples/classify_image.py \
> --模型 test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite / --标签 test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
> --标签 test_data/inat_bird_labels.txt / --标签 test_data/inat_bird_labels.txt
> --input test_data/parrot.jpg
回溯(最近一次调用)。
  File "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", line 160, in load_delegate
    delegate = Delegate(library, options)
  文件 "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", 第119行, in __init__
    raise ValueError(capture.message)
ValueError

在处理上述异常的过程中,发生了另一个异常。

回溯(最近一次调用)。
  文件 "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py",第121行,在里
    main()
  文件 "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py", 行 71, in main
    interpreter = make_interpreter(*args.model.split('@'))
  文件 "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", 第87行, in make_interpreter
    delegates = [load_edgetpu_delegate({'device': device} if device else {}]]
  文件 "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", 第52行, in load_edgetpu_delegate
    return tflite.load_delegate(_EDGETPU_SHARED_LIB, options or {})
  文件 "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", 第162行, in load_delegate
    raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError:从edgetpu.dll加载委托失败

最后一行,"ValueError:从edgetpu.dll加载委托失败"通常意味着没有Coral USB设备被识别。(如果你拔掉你的Coral USB设备,你应该继续看到同样的错误)。

我能够追踪到这是Windows的安装脚本中的一个错误(我认为!)。

该错误存在于最新的 两个版本 的libedgetpu。

Coral团队提供的安装脚本和我执行的脚本叫做 安装.bat

这个脚本的第52行(你可以用文本编辑器打开它,例如Notepad++)指出。

start /wait msiexec /i "%ROOTDIR%\third_party\usbdk\UsbDk_*.msi" /quiet /qb!/norestart

这应该是为了安装UsbDk。而且它 看起来像这样。

所以--UsbDk的外部安装程序打开,并安装了它。在Windows安全屏幕(UAC,用户账户控制,屏幕)上,有一些关于 红帽(RedHat 被提及。

我猜这个应用程序从未在你的电脑上打开和安装过,是吗?

但是 它是必需的 由Coral USB应用堆栈,这是一个特殊的软件,允许应用程序访问自定义的USB设备。

在这里,我有一个好消息和一个坏消息要告诉你。

让我们先从好消息开始:我设法创建了一个修复方法。

UsbDk未被安装的修复方法/ 从edgetpu.dll加载委托失败

2022年11月5日更新。

好消息!我们已经发布了一个 打过补丁的Runtime Installer ZIP文件,解决了两个bug和 允许你安装最新的Coral运行时间 载于20220308号文件。

作品 用最新的运行时,因为它也将libusb-1.0.dll切换到一个工作版本(取自以前的软件包)。我们已经在Windows 8.1和Windows 10上进行了测试。这个补丁包解决了 "委托失败 "的错误,也解决了分段故障的问题。

在下面的评论中报告任何问题!

解释背景的历史内容

在你尝试修复之前,也请你看一下这个坏消息! (该修复方法有效,但 有一个不同的问题 可能只有谷歌能解决这个问题!我建议。转到第三个解决方案 "更好的消息" 暂时的!)

为了安全起见,首先运行 uninstall.bat

用两行新字覆盖这一行(第52行),如下所示。

:: start /wait msiexec /i "%ROOTDIR%\third_party\usbdk\UsbDk_*.msi" /quiet /qb!/norestart
start /wait msiexec /i "%ROOTDIR%\third_party\usbdk\UsbDk_1.0.22_x64.msi" /quiet /qb!/norestart

双冒号将对原始行进行注释(我更喜欢在这些修复的代码中留下原始行,这样我们就可以看到被修改的内容)。

现在,当你运行 安装.bat 通过双击它,它将安装UsbDk。

正在安装UsbDk

注意:在安装UsbDk的过程中,我可以听到众所周知的Windows USB拔插/重插的声音。

移除UsbDk

请注意, uninstall.bat 有同样的问题。编辑第51行

:: start /wait msiexec /x "%ROOTDIR%\third_party\usbdk\UsbDk_*.msi" /quiet /qb!/norestart
start /wait msiexec /x "%ROOTDIR%\third_party\usbdk\UsbDk_1.0.22_x64.msi" /quiet /qb!/norestart

这将允许你实际执行UsbDk安装程序来运行卸载。

你也可以选择(可能 没有副作用)到edgetpu Runtime文件夹下的third_party/usbdk目录,右键点击UsbDk卸载它。

同样,在卸载过程中,应该看到UsbDk的安装程序,也应该听到Windows发出的USB "拔插头 "的特有声音。

坏消息:细分的错误

现在的错误变成了 "分段故障"。

$ pyenv exec python examples/classify_image.py --model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels test_data/inat_bird_labels.txt --input test_data/parrot.jpg
分割故障

注意--在执行这个程序时,我还听到了Windows USB的拔插声。这是意料之中的事--首先以一种模式访问Coral设备,我的理解是在它身上推送推理信息,然后它应该被拔掉。

这个分段故障是一个进步,即使它在你看来不是这样的。可能一些进一步的调试可以解决这个问题,或者可能谷歌团队可以研究一下。

我已将我的见解加入到 这个GitHub主题希望这能为谷歌的开发人员指出正确的方向......。

如果你尝试了这个方法,并且对你有效,请在下面留言!

更好的消息是:一个可以工作的Coral Runtime版本!

有一个版本的Coral Runtime没有这个错误(如上所述的UsbDk安装错误),而且也没有Segmentation故障。

唯一的缺点是,这个版本 只支持第13版 的运行时间(所以第14版的一些功能会丢失)。

https://coral.ai/software/#edgetpu-runtime

使用 edgetpu_runtime_20210119 (Frogfish)

安装程序将安装UsbDk。注意,这是一个较早的UsbDk版本(UsbDk_1.0.21_x64.msi版本),它与20210119版本捆绑在一起,可能这也是这个工作的部分原因。

使用这个,你应该能够运行 珊瑚USB鹦鹉推断 在Windows 10上的例子。

$ pyenv exec python examples/classify_image.py --model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels test_data/inat_bird_labels.txt --input test_data/parrot.jpg
C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py:79:DeprecationWarning。ANTIALIAS已被废弃,并将在Pillow 10(2023-07-01)中被移除。使用Resampling.LANCZOS代替。
  image = Image.open(args.input).convert('RGB').resize(size, Image.ANTIALIAS)
----,推断时间----
注意:Edge TPU上的第一次推理很慢,因为它包括将模型加载到Edge TPU内存中。
12.5ms
2.8ms
2.8ms
2.7ms
2.7ms
-------RESULTS--------
Ara macao(猩红鹦鹉)。0.75781

我可能很快就会增加一篇关于如何在Windows 10上逐步安装Coral USB的文章,或者可能为我们的YouTube频道制作一个视频。

购买Coral USB加速器

我们是Coral USB分销商之一。请 请联系我们的销售团队,咨询Coral USB的数量,或者如果你想成为一个经销商.

如果你想为自己购买一个。 尝试我们的经销商之一,或者你可以 从我们自己的商店buyzero.de购买一个Coral USB加速器。

珊瑚USB咨询

正如你在这篇博文中注意到的,我们能够为你基于Coral USB的项目提供咨询支持。如果你想讨论Coral EdgeTPU为你的平台加速的可能性,需要有人为你实现一个解决方案,或需要其他形式的咨询/商业支持,请 联系我们的销售团队.

其他错误

ImportError。导入_pywrap_coral时DLL加载失败:无法找到指定的模块。

这个错误告诉你,install.bat没有被运行。

    raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError:从edgetpu.dll加载委托失败

在修复UsbDk问题后,如上所述,这个错误应该意味着你的珊瑚USB设备没有插入你的Windows 10电脑。

使用Windows设备管理器进行验证。如果它被插入,它应该显示出来。

还要验证Coral USB加速器是否显示工作正常。

raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError:从edgetpu.dll加载委托失败

如果你遇到这个错误,并且Coral USB加速器在设备管理器中显示为 "正常工作",那么请仔细检查是否安装了UsbDk软件,如我上面所述。你应该在你的应用程序和功能中看到一个 "UsbDk Runtime Libraries "条目。