L'inférence Coral USB ne fonctionne pas sous Windows 10 (ValueError : Failed to load delegate from edgetpu.dll)

Mise à jour : Il semble que l'erreur ait été corrigée avec la version de l'installateur du 24 octobre 2022.

En suivant les instructions d'installation de Windows sur le Site web du corailJ'ai obtenu l'erreur suivante :

Max@Rhea MINGW64 /c/Business-2022/pi3g e.K/Marketing/2022 Präsentation für Ric/Coral sur Windows/coral/pycoral (master)
$ 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
Traceback (dernier appel le plus récent) :
  Fichier "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", ligne 160, in load_delegate
    delegate = Delegate(library, options)
  Fichier "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", ligne 119, dans __init__
    raise ValueError(capture.message)
Erreur de valeur

Pendant le traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (dernier appel le plus récent) :
  File "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\\pycoral\\examples\classify_image.py", line 121, in 
    main()
  Fichier "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\\\pycoral\examples\classify_image.py", ligne 71, in main
    interpreter = make_interpreter(*args.model.split('@'))
  Fichier "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", ligne 87, dans make_interpreter
    delegates = [load_edgetpu_delegate({'device' : device} if device else {})]
  Fichier "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", ligne 52, dans load_edgetpu_delegate
    return tflite.load_delegate(_EDGETPU_SHARED_LIB, options or {})
  Fichier "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", ligne 162, dans load_delegate
    raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError : Échec du chargement du délégué de edgetpu.dll

La dernière ligne, "ValueError : Échec du chargement du délégué de edgetpu.dll"signifie généralement qu'aucun périphérique USB Coral n'a pu être reconnu. (Si vous débranchez votre périphérique USB Coral, vous devriez continuer à voir la même erreur).

J'ai pu remonter à un bug (je pense !) dans le script d'installation pour Windows.

Le bogue est présent dans la plus récente deux communiqués de la libedgetpu.

Le script d'installation, que l'équipe de Coral fournit et que j'ai exécuté, s'appelle install.bat

La ligne 52 de ce script (vous pouvez l'ouvrir en utilisant un éditeur de texte, par exemple Notepad++) indique :

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

C'est censé installer UsbDk. Et il devrait ressemble à ça :

Donc - un installateur externe pour UsbDk s'ouvre, et l'installe. Pendant l'écran de sécurité de Windows (UAC, User Account Control, Screen) quelque chose à propos de RedHat est mentionné.

Je suppose que cette application ne s'ouvre et ne s'installe jamais sur votre ordinateur, n'est-ce pas ?

Mais il est nécessaire par la pile d'applications Coral USB, il s'agit d'un logiciel spécial qui permet aux applications d'accéder aux périphériques USB personnalisés.

J'ai une bonne et une mauvaise nouvelle pour vous.

Commençons par la bonne nouvelle : j'ai réussi à créer un correctif pour cela.

Le correctif pour UsbDk n'étant pas installé / Échec du chargement du délégué de edgetpu.dll

Mise à jour 5.11.2022 :

Bonne nouvelle ! Nous avons publié une fichier ZIP de l'installateur Runtime corrigéqui résout deux bogues et vous permet d'installer la dernière version du runtime Coral contenu dans 20220308.

Ce site travaux avec le runtime le plus récent, car il fait également passer libusb-1.0.dll à une version fonctionnelle (provenant d'un paquet précédent). Nous l'avons testé sous Windows 8.1 et Windows 10. Ce paquet corrigé résout l'erreur "Failed to delegate", ainsi que les défauts de segmentation.

Signalez tout problème dans les commentaires ci-dessous !

un contenu historique expliquant le contexte

Avant d'essayer la solution, lisez aussi les mauvaises nouvelles ! (La correction fonctionne, mais il y a un autre problème que seul Google peut probablement résoudre ! Je recommande : Allez à la troisième solution "Les meilleures nouvelles" pour l'instant !)

Juste pour être sur, la première fois. désinstaller.bat

Remplacez cette ligne (ligne 52) par deux nouvelles lignes comme suit :

: : 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

Le double point commentera la ligne originale (je préfère laisser les lignes originales dans le code pour ces corrections, afin que nous puissions voir ce qui a été modifié).

Maintenant, quand vous exécutez install.bat en double-cliquant dessus, cela installera UsbDk.

UsbDk en cours d'installation

Note : pendant l'installation de UsbDk, je peux entendre le son bien connu de Windows USB unplug / replug !

Suppression de UsbDk

Notez que le désinstaller.bat a le même problème. Modifiez la ligne 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

Cela vous permettra d'exécuter réellement le programme d'installation d'UsbDk pour exécuter la désinstallation.

Vous pouvez également (probablement sans effets secondaires) allez dans le répertoire third_party/usbdk à l'intérieur du dossier edgetpu Runtime, et faites un clic droit sur UsbDk pour le désinstaller :

Encore une fois, pendant la désinstallation, l'installateur UsbDk devrait être vu et le son caractéristique de "débranchement" USB que Windows fait devrait être entendu !

La mauvaise nouvelle : le défaut de segmentation

L'erreur se transforme maintenant en un défaut de segmentation !

$ 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
Défaut de segmentation

Remarque : j'entends également un son de débranchement de l'USB de Windows lors de l'exécution. Il faut s'y attendre - Le périphérique Coral est d'abord accédé dans un mode, comme je le comprends pour pousser les informations d'inférence sur lui, et ensuite il est censé être débranché.

Ce défaut de segmentation est un pas en avant, même si cela ne vous semble pas être le cas. Il est possible qu'un débogage plus poussé puisse résoudre ce problème, ou que l'équipe de Google puisse l'examiner.

J'ai ajouté mon point de vue à ce fil de discussion GitHubJ'espère que cela pourra orienter les développeurs de Google dans la bonne direction...

Si vous avez essayé cette méthode et qu'elle fonctionne pour vous, laissez un commentaire ci-dessous !

La meilleure nouvelle : une version fonctionnelle de Coral Runtime !

Il existe une version du Runtime Coral qui ne présente pas ce bogue (bogue d'installation de UsbDk tel que décrit ci-dessus), et qui ne présente pas non plus le défaut de segmentation.

Le seul inconvénient est que cette version ne supporte que la version 13 du runtime (donc certaines fonctionnalités de la version 14 seront manquantes).

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

Utilisez edgetpu_runtime_20210119 (Poisson-grenouille)

L'installateur va installer UsbDk. Remarque, il s'agit d'une ancienne version de UsbDk (version UsbDk_1.0.21_x64.msi) qui est fournie avec la version 20210119, ce qui explique peut-être en partie pourquoi cela fonctionne.

En utilisant ceci, vous devriez être capable d'exécuter le L'inférence du perroquet USB corallien exemple sur 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 est obsolète et sera supprimé dans Pillow 10 (2023-07-01). Utilisez Resampling.LANCZOS à la place.
  image = Image.open(args.input).convert('RGB').resize(size, Image.ANTIALIAS)
----INFERENCE TIME----
Remarque : la première inférence sur Edge TPU est lente car elle inclut le chargement du modèle dans la mémoire de Edge TPU.
12,5 ms
2,8 ms
2,8 ms
2,7 ms
2,7 ms
-------RESULTS--------
Ara macao (Ara rouge) : 0.75781

J'ajouterai probablement bientôt un article sur l'installation de la clé USB Coral sous Windows 10, étape par étape, ou je créerai peut-être une vidéo pour notre chaîne YouTube.

Acheter des accélérateurs USB Coral

Nous sommes l'un des distributeurs Coral USB. Veuillez consulter contactez notre équipe de vente pour toute demande de volume de la clé USB Coral, ou si vous souhaitez devenir revendeur..

Si vous voulez en acheter un pour vous-même, essayez l'un de nos revendeursou vous pouvez acheter un accélérateur USB Coral dans notre propre boutique, buyzero.de

Coral USB Consulting

Comme vous l'avez peut-être remarqué dans cet article de blog, nous sommes en mesure de vous aider en vous conseillant pour votre projet Coral USB. Si vous souhaitez discuter des possibilités d'accélération de Coral EdgeTPU pour votre plateforme, si vous avez besoin de quelqu'un pour mettre en œuvre une solution pour vous, ou si vous avez besoin d'une autre forme de conseil ou de soutien commercial, veuillez nous contacter. contactez notre équipe de vente.

Autres erreurs

ImportError : Le chargement de la DLL a échoué lors de l'importation de _pywrap_coral : Le module spécifié n'a pas pu être trouvé.

Cette erreur vous indique que le fichier install.bat n'a pas été exécuté.

    raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError : Échec du chargement du délégué de edgetpu.dll

Après avoir résolu le problème UsbDk, comme décrit ci-dessus, cette erreur devrait signifier que votre périphérique USB Coral n'est pas branché à votre ordinateur Windows 10.

Vérifiez-le en utilisant le gestionnaire de périphériques de Windows. S'il est branché, il devrait s'afficher :

Vérifiez également que l'accélérateur Coral USB fonctionne normalement :

raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError : Échec du chargement du délégué de edgetpu.dll

Si vous obtenez cette erreur ET que l'accélérateur USB de Coral apparaît comme "fonctionnant correctement" dans le gestionnaire de périphériques, vérifiez à nouveau si le logiciel UsbDk est installé, comme je l'ai décrit ci-dessus. Vous devriez voir une entrée "UsbDk Runtime Libraries" dans vos applications et fonctionnalités :