珊瑚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的过程中,我可以听到众所周知的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版的一些功能会丢失)。
使用 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 "条目。