Inferência Coral USB não funciona no Windows 10 (ValueError: Failed to load deleggate from edgetpu.dll)

Actualização: Parece que o erro foi corrigido com a versão instaladora de Octobre 24th 2022.

Seguindo as instruções de instalação para Windows no Sítio Web coralrecebi o seguinte erro:

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 {\i1}
> --model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
> --labels test_data/inat_bird_labels.txt {\i1}
> --input test_data/parrot.jpg
Traceback (última chamada mais recente):
  Ficheiro "C:{\i1}Users{\i}Max.pyenv{\i}pyenv-win{\i}versions{\i1}3.9.13lib{\i}site-packages{\i}tflite_runtime{\i}interpreter.py", linha 160, em load_delegate
    delegado = Delegado(biblioteca, opções)
  Ficheiro "C:{\i1}Users{\i}Max.pyenv{\i}pyenv-win{\i3.9.13}lib{\i1}site-packages{\i}tflite_runtime{\i}interpreter.py", linha 119, em __init__
    aumentar ValueError(capture.message)
ValueError

Durante o tratamento da excepção acima referida, ocorreu outra excepção:

Traceback (última chamada mais recente):
  Ficheiro "C:\Business-2022\pi3g e.K\Marketing2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py", linha 121, em 
    principal()
  Ficheiro "C:\Business-2022\pi3g e.K\Marketing\2022 Präsentation für Ric\Coral on Windows\coral\pycoral\examples\classify_image.py", linha 71, na sua maioria
    intérprete = make_interpreter(*args.model.split('@'))
  Ficheiro "C:{\i1}Users\i}Max.pyenv-pyenv-win{\i}versions{\i}3.9.13lib-pacotes-pacote de sites-pycoral.py", linha 87, em make_interpreter
    delegados = [load_edgetpu_delegate({'device': device} if device else {})]
  Ficheiro "C:{\i1}Users{\i}Max.pyenv{\i}pyenv-win{\i}versions{\i}3.9.13lib{\i1}site-packages{\i}pycoral.py", linha 52, em load_edgetpu_delegate
    return tflite.load_delegate(_EDGETPU_SHARED_LIB, opções ou {})
  Ficheiro "C:{\i1}Users{\i}Max.pyenv{\i}pyenv-win{\i}versions{\i3.9.13\lib}site-packages{\i}tflite_runtime{\i}interpreter.py", linha 162, em load_delegate
    raise ValueError('Falha no carregamento do delegado de {}n{}'.format(
ValueError: Falha no carregamento do delegado da edgetpu.dll

A última linha, "ValueError: Falha no carregamento do delegado da edgetpu.dll" geralmente significa que nenhum dispositivo USB Coral poderia ser reconhecido. (Se desligar o seu dispositivo Coral USB, deverá continuar a ver o mesmo erro).

Consegui localizar isto até um bug (penso eu!) no script de instalação para Windows.

O insecto está presente no mais recente duas versões de libedgetpu.

O script de instalação, que a equipa da Coral envia e que eu executei, chama-se install.bat

A linha 52 deste script (pode abri-lo utilizando um editor de texto, por exemplo Notepad++) indica:

start /wait msiexec /i "%ROOTDIR%TTTT/3.msi" /quiet /qb! /norestart

Isto é suposto instalar o UsbDk. E ele deve parecer-se com isto:

Assim - um instalador externo para UsbDk abre, e instala-a. Durante o ecrã de Segurança do Windows (UAC, Controlo de Conta de Utilizador, Ecrã), algo sobre RedHat é mencionado.

Acho que esta aplicação nunca se abre e instala no seu computador, pois não?

Mas é necessário pela pilha de aplicações Coral USB, este é um software especial que permite às aplicações aceder a dispositivos USB personalizados.

Aqui tenho boas e más notícias para si.

Comecemos pelas boas notícias primeiro: consegui criar uma solução para isso.

A correcção para o UsbDk não ser instalado / Falha no carregamento do delegado da edgetpu.dll

Actualização 5.11.2022:

Boas notícias! Lançámos uma ficheiro ZIP do instalador de tempo de execução corrigidoo que resolve dois bugs e permite instalar o último Coral runtime contida em 20220308.

Este obras com o mais recente runtime, pois também muda a libusb-1.0.dll para uma versão funcional (retirada de um pacote anterior). Testámos isto no Windows 8.1 e no Windows 10. Este pacote corrigido resolve o erro "Failed to delegar", e também as falhas de segmentação.

Relate quaisquer questões nos comentários abaixo!

conteúdo histórico explicando os antecedentes

Antes de tentar a reparação, por favor leia também as más notícias! (A reparação funciona, mas há um problema diferente que provavelmente só o Google pode resolver! Recomendo: Ir para a terceira solução "As melhores notícias" por agora!)

Só para estar no lado seguro, primeira corrida uninstall.bat

Sobrescrever esta linha (linha 52) com duas novas linhas, como se segue:

:: start /wait msiexec /i "%ROOTDIR%TTT/3_party\usbdk\UsbDk_*.msi" /quiet /qb! /norestart
start /wait msiexec /i "%ROOTDIR%TTTT/3_party=usbdk=UsbDk_1.0.22_x64.msi" /quiet /qb! /norestart

Os dois pontos irão comentar a linha original (prefiro deixar as linhas originais no código para estas correcções, para que possamos ver o que foi modificado)

Agora quando corre install.bat ao fazer duplo clique, instalará o UsbDk.

UsbDk a ser instalado

Nota: enquanto o UsbDk está a ser instalado, consigo ouvir o bem conhecido som de desconectar/replugar do Windows USB!

Remoção da UsbDk

Note-se que o uninstall.bat tem o mesmo problema. Editar a linha 51

:: start /wait msiexec /x "%ROOTDIR%TTT/3_party\usbdk\UsbDk_*.msi" /quiet /qb! /norestart
start /wait msiexec /x "%ROOTDIR%TTTT/3.0.22_x64.msi" /quiet /qb! /norestart

Isto permitir-lhe-á executar efectivamente o instalador UsbDk para executar a desinstalação.

Pode também, alternativamente (provavelmente sem efeitos secundários) ir para o directório third_party/usbdk dentro da pasta edgetpu Runtime, e clicar com o botão direito do rato em UsbDk para o desinstalar:

Mais uma vez, durante a desinstalação, o instalador UsbDk deve ser visto e também o característico som USB "unplug" que o Windows faz deve ser ouvido!

A má notícia: falha de segmentação

O erro muda agora para um erro de segmentação!

$ 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
Falha de segmentação

Nota - Também ouço um som de desligamento da ficha USB do Windows quando isto é executado. Isto é de esperar - O dispositivo Coral é acedido primeiro num modo, como eu entendo para empurrar a informação de inferência sobre ele, e depois é suposto ser desligado da tomada.

Esta falha de segmentação é um passo em frente, mesmo que não lhe pareça que assim seja. Possivelmente alguma depuração adicional poderia resolver este problema, ou possivelmente a equipa do Google pode investigar o assunto.

Acrescentei os meus conhecimentos a este fio GitHubque, esperemos, possa indicar aos programadores do Google a direcção certa ...

Se tentou isto e funciona para si, por favor deixe um comentário abaixo!

A melhor notícia: uma versão funcional do Coral Runtime!

Existe uma versão do Coral Runtime que não tem este bug (UsbDk instalar bug como descrito acima), e que também não tem a falha de Segmentação.

A única desvantagem é que esta versão apenas suporta a Versão 13 do tempo de execução (por isso faltarão algumas características da versão 14).

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

Utilização edgetpu_runtime_20210119 (Frogfish)

O instalador irá instalar o UsbDk. Nota, esta é uma versão mais antiga do UsbDk (versão UsbDk_1.0.21_x64.msi) que está empacotada com a versão 20210119, possivelmente esta é parte das razões pelas quais isto funciona.

Usando isto, deverá ser capaz de executar o Dedução de papagaio coral USB exemplo no 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 é depreciada e será removida na almofada 10 (2023-07-01). Usar Resampling.LANCZOS em vez disso.
  image = Image.open(args.input).convert('RGB').resize(size, Image.ANTIALIAS)
----INFERENCE TIME----
Nota: A primeira inferência sobre a TPU Edge é lenta porque inclui o carregamento do modelo na memória da TPU Edge.
12,5ms
2.8ms
2.8ms
2.7ms
2.7ms
-------RESULTS--------
Ara macao (Arara Escarlate): 0.75781

Provavelmente acrescentarei em breve uma descrição de como instalar o Coral USB no Windows 10 passo a passo, ou possivelmente criar um vídeo para o nosso Canal YouTube.

Compra de aceleradores Coral USB

Somos um dos distribuidores da Coral USB. Por favor contacte a nossa equipa de vendas com questões de volume do USB Coral, ou se quiser tornar-se revendedor.

Se quiser comprar um para si, experimente um dos nossos revendedoresou pode comprar um acelerador USB Coral na nossa própria loja, buyzero.de

Consultoria Coral USB

Como deve ter notado neste post do blogue, podemos apoiá-lo com consultoria para o seu projecto baseado em Coral USB. Se quiser discutir as possibilidades de aceleração da Coral EdgeTPU para a sua plataforma, precisar de alguém para implementar uma solução para si, ou precisar de outra forma de consultoria / apoio comercial, por favor contactar a nossa equipa de vendas.

Outros erros

ImportError: Carga DLL falhou durante a importação _pywrap_coral: O módulo especificado não pôde ser encontrado.

Este erro diz-lhe que o install.bat não foi executado.

    raise ValueError('Falha no carregamento do delegado de {}n{}'.format(
ValueError: Falha no carregamento do delegado da edgetpu.dll

Depois de corrigir o problema UsbDk, como descrito acima, este erro deve significar que o seu dispositivo USB Coral não está ligado ao seu computador Windows 10.

Verificar isto utilizando o Gestor de Dispositivos Windows. Se estiver ligado à corrente, deve aparecer:

Verificar também se o acelerador USB Coral aparece como funcionando normalmente:

raise ValueError('Falha no carregamento do delegado de {}n{}'.format(
ValueError: Falha no carregamento do delegado da edgetpu.dll

Se obtiver este erro E o Acelerador USB Coral aparecer como "funcionando correctamente" no gestor de dispositivos, então verifique novamente se o software UsbDk está instalado, como descrevi acima. Deverá ver uma entrada "UsbDk Runtime Libraries" nas suas Apps & features: