L'inferenza USB Coral non funziona su Windows 10 (ValueError: Failed to load delegate from edgetpu.dll)

Aggiornamento: Sembra che l'errore sia stato risolto con la versione del programma di installazione del 24 ottobre 2022.

Seguendo le istruzioni per l'installazione di Windows sul sito Sito web del coralloHo ricevuto il seguente errore:

Max@Rhea MINGW64 /c/Business-2022/pi3g e.K/Marketing/2022 Presentazione per Ric/Coral su Windows/coral/pycoral (master)
$ pyenv exec python examples/classify_image.py \
> --modello 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 (ultima chiamata):
  File "C:\Users\Max\\code(0144).pyenv\pyenv-win\versions\3.9.13\libsite-packages\tflite_runtime\interpreter.py", riga 160, in load_delegate
    delegato = delegato(libreria, opzioni)
  File "C:\Users\Max\\code(0144).pyenv\pyenv-win\versions\3.9.13\libsite-packages\tflite_runtime\interpreter.py", riga 119, in __init__
    sollevare ValueError(capture.message)
ValoreErrore

Durante la gestione dell'eccezione precedente, si è verificata un'altra eccezione:

Traceback (ultima chiamata):
  File "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py", riga 121, in 
    main()
  File "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py", riga 71, in main
    interprete = make_interpreter(*args.model.split('@'))
  File "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", riga 87, in make_interpreter
    delegati = [load_edgetpu_delegate({'device': device} if device else {})]
  File "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\pycoral\utils\edgetpu.py", riga 52, in load_edgetpu_delegate
    return tflite.load_delegate(_EDGETPU_SHARED_LIB, options o {})
  File "C:\Users\Max\.pyenv\pyenv-win\versions\3.9.13\lib\site-packages\tflite_runtime\interpreter.py", riga 162, in load_delegate
    raise ValueError('Failed to load delegate from {}}n{}'.format(
ValueError: Fallito il caricamento del delegato da edgetpu.dll

L'ultima riga, "ValueError: Fallito il caricamento del delegato da edgetpu.dll" di solito significa che non è stato possibile riconoscere alcun dispositivo USB Coral. (Se si scollega il dispositivo USB Coral, si dovrebbe continuare a vedere lo stesso errore).

Sono riuscito a risalire a un bug (credo!) nello script di installazione per Windows.

Il bug è presente nella versione più recente due uscite di libedgetpu.

Lo script di installazione, che il team di Coral distribuisce e che io ho eseguito, si chiama installare.bat

La riga 52 di questo script (che si può aprire con un editor di testo, ad esempio Notepad++) afferma:

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

Questo dovrebbe installare UsbDk. E dovrebbe sembrano essere così:

Quindi, si apre un programma di installazione esterno per UsbDk e lo installa. Durante la schermata di sicurezza di Windows (UAC, User Account Control, Screen) viene visualizzato qualcosa su RedHat è menzionato.

Immagino che questa applicazione non si apra e non si installi mai sul computer, vero?

Ma è richiesto dallo stack applicativo Coral USB, un software speciale che consente alle applicazioni di accedere a dispositivi USB personalizzati.

Ho una notizia buona e una cattiva per voi.

Cominciamo con le buone notizie: sono riuscito a creare una soluzione per questo problema.

La soluzione per la mancata installazione di UsbDk / Non è riuscito a caricare il delegato da edgetpu.dll

Aggiornamento 5.11.2022:

Buone notizie! Abbiamo rilasciato un file ZIP del Runtime Installer patchatoche risolve due bug e consente di installare l'ultimo runtime Coral contenuti nel 20220308.

Questo opere con il runtime più recente, poiché passa anche libusb-1.0.dll a una versione funzionante (presa da un pacchetto precedente). Abbiamo testato questa soluzione su Windows 8.1 e Windows 10. Questo pacchetto patchato risolve l'errore "Failed to delegate" e anche i difetti di segmentazione.

Segnalate eventuali problemi nei commenti qui sotto!

contenuto storico che spiega il contesto

Prima di provare la soluzione, leggete anche le cattive notizie! (La soluzione funziona, ma il problema è un altro che probabilmente solo Google può risolvere! Consiglio: Vai alla terza soluzione "Le notizie migliori" per ora).

Per sicurezza, la prima esecuzione disinstallare.bat

Sovrascrivere questa riga (riga 52) con due nuove righe come segue:

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

I doppi due punti commenteranno la riga originale (preferisco lasciare le righe originali nel codice per queste correzioni, in modo da poter vedere cosa è stato modificato).

Ora, quando si esegue installare.bat facendo doppio clic su di esso, verrà installato UsbDk.

UsbDk in fase di installazione

Nota: durante l'installazione di UsbDk, si sente il noto suono di scollegamento/ricollegamento dell'USB di Windows!

Rimozione di UsbDk

Si noti che il disinstallare.bat ha lo stesso problema. Modificare la riga 51

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

In questo modo sarà possibile eseguire il programma di installazione di UsbDk per eseguire la disinstallazione.

In alternativa si può anche (probabilmente senza effetti collaterali) andare nella cartella third_party/usbdk all'interno della cartella edgetpu Runtime e fare clic con il pulsante destro del mouse su UsbDk per disinstallarlo:

Anche in questo caso, durante la disinstallazione si dovrebbe vedere il programma di installazione di UsbDk e si dovrebbe sentire il caratteristico suono di "scollegamento" dell'USB emesso da Windows!

La cattiva notizia: difetto di segmentazione

L'errore diventa ora un errore di segmentazione!

$ 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
Errore di segmentazione

Nota: durante l'esecuzione si sente anche un suono di scollegamento dell'USB di Windows. Questo è prevedibile: il dispositivo Coral viene prima acceduto in una modalità, a quanto ho capito per ottenere informazioni di inferenza, e poi dovrebbe essere scollegato.

Questo errore di segmentazione è un passo avanti, anche se a voi non sembra. È possibile che un ulteriore debug possa risolvere il problema o che il team di Google possa esaminarlo.

Ho aggiunto i miei approfondimenti a questo thread su GitHub, sperando che questo possa indirizzare gli sviluppatori di Google nella giusta direzione ...

Se avete provato questo metodo e funziona, lasciate un commento qui sotto!

La notizia migliore: una versione di Coral Runtime funzionante!

Esiste una versione di Coral Runtime che non presenta questo bug (bug dell'installazione di UsbDk descritto sopra) e che non presenta nemmeno il Segmentation fault.

L'unico inconveniente è che questa versione supporta solo la versione 13 del runtime (quindi alcune funzioni della versione 14 saranno assenti).

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

Utilizzo edgetpu_runtime_20210119 (Frogfish)

Il programma di installazione installerà UsbDk. Si noti che si tratta di una vecchia versione di UsbDk (versione UsbDk_1.0.21_x64.msi) che viene fornita in bundle con la versione 20210119; forse questo è uno dei motivi per cui funziona.

In questo modo si dovrebbe essere in grado di eseguire il programma Inferenza del pappagallo USB corallino esempio su 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 è deprecato e sarà rimosso in Pillow 10 (2023-07-01). Utilizzare invece Ricampionamento.LANCZOS.
  immagine = Image.open(args.input).convert('RGB').resize(size, Image.ANTIALIAS)
----INFERENZA TEMPO----
Nota: la prima inferenza su Edge TPU è lenta perché include il caricamento del modello nella memoria di Edge TPU.
12,5 ms
2,8 ms
2,8 ms
2,7 ms
2,7 ms
-------RESULTS--------
Ara macao (Ara scarlatta): 0.75781

Probabilmente aggiungerò presto un articolo su come installare Coral USB su Windows 10 passo dopo passo, o forse creerò un video per il nostro canale YouTube.

Acquisto di acceleratori USB Coral

Siamo uno dei distributori di Coral USB. Per favore contattate il nostro team di vendita per richieste di volumi di Coral USB o se volete diventare rivenditori.

Se volete acquistarne uno per voi, provate a contattare uno dei nostri rivenditori, oppure è possibile acquistate un acceleratore USB Coral presso il nostro negozio, buyzero.de

Consulenza USB Coral

Come avrete notato in questo post, siamo in grado di supportarvi con consulenze per i vostri progetti basati su Coral USB. Se desiderate discutere le possibilità di accelerazione di Coral EdgeTPU per la vostra piattaforma, se avete bisogno di qualcuno che implementi una soluzione per voi o se avete bisogno di un'altra forma di consulenza/supporto commerciale, vi preghiamo di contattarci. contattate il nostro team di vendita.

Altri errori

ImportError: Caricamento DLL fallito durante l'importazione di _pywrap_coral: Il modulo specificato non è stato trovato.

Questo errore indica che il file install.bat non è stato eseguito.

    raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError: Fallito il caricamento del delegato da edgetpu.dll

Dopo aver risolto il problema UsbDk, come descritto sopra, questo errore dovrebbe significare che il dispositivo USB Coral non è collegato al computer Windows 10.

Verificatelo utilizzando la Gestione dispositivi di Windows. Se è collegato, dovrebbe essere visualizzato:

Verificare anche che l'acceleratore USB Coral funzioni normalmente:

raise ValueError('Failed to load delegate from {}\n{}'.format(
ValueError: Fallito il caricamento del delegato da edgetpu.dll

Se si ottiene questo errore E l'acceleratore USB Coral viene visualizzato come "Funzionante" in Gestione periferiche, controllare se il software UsbDk è installato, come descritto sopra. Dovrebbe essere presente una voce "UsbDk Runtime Libraries" in Applicazioni e funzionalità: