Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se naučíte používat Python, TensorFlow a Azure Functions s modelem strojového učení ke klasifikaci obrázku na základě jeho obsahu. Vzhledem k tomu, že všechny úlohy provádíte místně a nevytváříte žádné Azure prostředky v cloudu, není nutné tento kurz dokončit.
- Inicializace místního prostředí pro vývoj Azure Functions v Python
- Naimportujte vlastní model strojového učení TensorFlow do aplikace funkcí.
- Vytvořte HTTP API bez serveru pro určení, zda obrázek obsahuje psa nebo kočku.
- Využijte rozhraní API z webové aplikace.
Požadavky
- Účet Azure s aktivním předplatným. Vytvořte si bezplatný účet.
- Python 3.7.4. (Python 3.7.4 a Python 3.6.x jsou ověřeny pomocí Azure Functions; Python verze 3.8 a novější se zatím nepodporují.)
- Azure Functions Core Tools
- Editor kódu, například Visual Studio Code
Kontrola předpokladů
- V terminálu nebo příkazovém okně spusťte příkaz
func --versiona zkontrolujte, jestli jsou nástroje Azure Functions Core Tools verze 2.7.1846 nebo novější. - Zkontrolujte, zda vaše sestava verze Pythonu ukazuje 3.7.x, spuštěním příkazu
python --version(Linux/macOS) nebopy --version(Windows).
Naklonujte úložiště tutoriálu
V terminálu nebo příkazovém okně naklonujte pomocí Gitu následující úložiště:
git clone https://github.com/Azure-Samples/functions-python-tensorflow-tutorial.gitPřejděte do složky a prozkoumejte její obsah.
cd functions-python-tensorflow-tutorial- start je váš pracovní adresář pro výukový program.
- end je konečný výsledek a úplná implementace pro vaši informaci.
- prostředky obsahují model strojového učení a pomocné knihovny.
- frontend je webová stránka, která volá funkční aplikaci.
Vytvoření a aktivace virtuálního prostředí Python
Přejděte do spouštěcí složky a spuštěním následujících příkazů vytvořte a aktivujte virtuální prostředí s názvem .venv. Nezapomeňte použít Python 3.7, který podporuje Azure Functions.
cd start
python -m venv .venv
source .venv/bin/activate
Pokud Python balíček venv nenainstaloval do distribuce Linuxu, spusťte následující příkaz:
sudo apt-get install python3-venv
V tomto aktivovaném virtuálním prostředí spustíte všechny následující příkazy. (Spuštěním příkazu .) ukončete deactivatevirtuální prostředí.
Vytvoření projektu místních funkcí
V Azure Functions je projekt funkce kontejnerem pro jednu nebo více jednotlivých funkcí, které každý reaguje na konkrétní aktivační událost. Všechny funkce v projektu sdílejí stejné místní a hostitelské konfigurace. V této části vytvoříte projekt funkce, který obsahuje jedinou častou funkci s názvem classify , která poskytuje koncový bod HTTP. Do další části přidáte konkrétnější kód.
Ve složce start použijte Azure Functions Core Tools k inicializaci aplikace funkcí Python:
func init --worker-runtime pythonPo inicializaci obsahuje spouštěcí složka různé soubory projektu, včetně konfiguračních souborů pojmenovaných local.settings.json a host.json. Protože local.settings.json může obsahovat tajné kódy stažené z Azure, soubor je ve výchozím nastavení vyloučen ze správy zdrojového kódu v souboru .gitignore.
Tip
Vzhledem k tomu, že projekt funkce je svázaný s konkrétním modulem runtime, musí být všechny funkce v projektu zapsány ve stejném jazyce.
Přidejte do projektu funkci pomocí následujícího příkazu, kde
--nameargument je jedinečný název funkce a--templateargument určuje aktivační událost funkce.func newvytvořte podsložku odpovídající názvu funkce, která obsahuje soubor kódu odpovídající zvolenému jazyku projektu a konfiguračnímu souboru s názvem function.json.func new --name classify --template "HTTP trigger"Tento příkaz vytvoří složku odpovídající názvu funkce, klasifikovat. V této složce jsou dva soubory: __init__.py, který obsahuje kód funkce, a function.json, který popisuje aktivační událost funkce a její vstupní a výstupní vazby. Podrobnosti o obsahu těchto souborů najdete v Programming model v příručce pro vývojáře Python.
Místní spuštění funkce
Spusťte funkci spuštěním místního hostitele modulu runtime Azure Functions ve složce start:
func startJakmile se ve výstupu zobrazí koncový bod
classify, přejděte na adresu URLhttp://localhost:7071/api/classify?name=Azure. Ve výstupu by se měla zobrazit zpráva "Hello Azure!".K zastavení hostitele použijte klávesu Ctrl-C.
Import modelu TensorFlow a přidání pomocného kódu
Pokud chcete upravit funkci classify tak, aby klasifikovala obrázek na základě jejího obsahu, použijte předem vytvořený model TensorFlow, který byl vytrénován a exportován ze služby Azure Custom Vision Service. Model, který je obsažen ve složce prostředků ukázky, kterou jste naklonovali dříve, klasifikuje obrázek na základě toho, jestli obsahuje psa nebo kočku. Potom do projektu přidáte nějaký pomocný kód a závislosti.
Pokud chcete vytvořit vlastní model pomocí úrovně Free služby Custom Vision, postupujte podle pokynů v úložišti projektu sample.
Tip
Pokud chcete hostovat model TensorFlow nezávisle na aplikaci funkcí, můžete místo toho připojit sdílenou složku obsahující váš model k aplikaci funkcí pro Linux. Další informace najdete v tématu Připojení sdílených složek.
Ve složce Start spusťte následující příkaz, který zkopíruje soubory modelu do klasifikovat složky. Nezapomeňte do příkazu zahrnout
\*.cp ../resources/model/* classifyOvěřte, že složka klasifikace obsahuje soubory s názvem model.pb a labels.txt. Pokud ne, zkontrolujte, že jste příkaz spustili ve složce Start .
Spuštěním následujícího příkazu ve složce Start zkopírujte soubor s pomocným kódem do složky klasifikace:
cp ../resources/predict.py classifyOvěřte, že složka klasifikace teď obsahuje soubor s názvem predict.py.
Otevřete start/requirements.txt v textovém editoru a přidejte následující závislosti vyžadované pomocným kódem:
tensorflow==1.14 Pillow requestsUložte requirements.txt.
Nainstalujte závislosti spuštěním následujícího příkazu ve složce Start . Instalace může trvat několik minut, během které můžete pokračovat v úpravě funkce v další části.
pip install --no-cache-dir -r requirements.txtNa Windows se může zobrazit chyba "Nepodařilo se nainstalovat balíčky kvůli chybě EnvironmentError: [Errno 2] Žádný takový soubor nebo adresář:" následovaný dlouhým názvem cesty k souboru, jako je sharded_mutable_dense_hashtable.cpython-37.pyc. K této chybě obvykle dochází, protože hloubka cesty ke složce je příliš dlouhá. V tomto případě nastavte klíč registru
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabledna1pro povolení dlouhých cest. Případně zkontrolujte, kde je nainstalovaný interpret Python. Pokud má toto umístění dlouhou cestu, zkuste přeinstalovat do složky s kratší cestou.
Tip
Při volání predict.py k vytvoření první předpovědi načte funkce s názvem _initialize TensorFlow model z disku a uloží ho do mezipaměti v globálních proměnných. Toto ukládání do mezipaměti urychlí následné předpovědi.
Aktualizace funkce pro spouštění předpovědí
Otevřete klasifikovat/__init__.py v textovém editoru a přidejte následující řádky za existující
importpříkazy pro import standardní knihovny JSON a pomocných rutin predikce :import logging import azure.functions as func import json # Import helper script from .predict import predict_image_from_urlCelý obsah
mainfunkce nahraďte následujícím kódem:def main(req: func.HttpRequest) -> func.HttpResponse: image_url = req.params.get('img') logging.info('Image URL received: ' + image_url) results = predict_image_from_url(image_url) headers = { "Content-type": "application/json", "Access-Control-Allow-Origin": "*" } return func.HttpResponse(json.dumps(results), headers = headers)Tato funkce obdrží adresu URL obrázku v parametru řetězce dotazu s názvem
img. Potom volápredict_image_from_urlz pomocné knihovny ke stažení a klasifikaci obrázku pomocí modelu TensorFlow. Funkce pak vrátí odpověď HTTP s výsledky.Důležité
Vzhledem k tomu, že tento koncový bod HTTP je volán webovou stránkou hostovaným v jiné doméně, obsahuje odpověď hlavičku
Access-Control-Allow-Origin, která splňuje požadavky prohlížeče na sdílení prostředků mezi zdroji (CORS).V produkční aplikaci změňte
*na specifický zdroj webové stránky pro zvýšení zabezpečení.Uložte změny a za předpokladu, že instalace závislostí skončila, spusťte hostitele místní funkce znovu pomocí
func start. Nezapomeňte spustit hostitele ve složce Start s aktivovaným virtuálním prostředím. Jinak se hostitel spustí, ale při vyvolání funkce se zobrazí chyby.func startV prohlížeči otevřete následující adresu URL pro vyvolání funkce s adresou URL obrázku kočky a potvrďte, že vrácený json klasifikuje obrázek jako kočku.
http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.pngNechte host spuštěný, protože jej použijete v dalším kroku.
Spuštěním front-endu místní webové aplikace otestujte funkci.
K otestování volání koncového bodu funkce z jiné webové aplikace je v front-endové složce úložiště jednoduchá aplikace.
Otevřete nový terminál nebo příkazový řádek a aktivujte virtuální prostředí (jak je popsáno výše v části Vytvoření a aktivaci virtuálního prostředí Python).
Přejděte do front-endové složky úložiště.
Spusťte server HTTP s Python:
python -m http.serverV prohlížeči přejděte do
localhost:8000textového pole a zadejte jednu z následujících adres URL fotek nebo použijte adresu URL libovolného veřejně přístupného obrázku.https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat2.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog1.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog2.png
Výběrem možnosti Odeslat vyvoláte koncový bod funkce pro klasifikaci obrázku.
Pokud prohlížeč hlásí chybu při odeslání adresy URL obrázku, zkontrolujte terminál, ve kterém spouštíte aplikaci funkcí. Pokud se zobrazí chyba typu Žádný modul nenalezl PIL, možná jste spustili aplikaci funkcí ve složce Start bez první aktivace virtuálního prostředí, které jste vytvořili dříve. Pokud se vám stále zobrazují chyby, spusťte
pip install -r requirements.txtznovu virtuální prostředí aktivované a vyhledejte chyby.
Poznámka:
Model vždy klasifikuje obsah obrázku jako kočku nebo psa, bez ohledu na to, zda obrázek obsahuje některého z nich, s tím, že výchozí klasifikace je pes. Obrázky tygrů a pantherů, například, obvykle klasifikují jako kočky, ale obrázky slonů, mrkve nebo letadla klasifikují jako pes.
Vyčištění prostředků
Vzhledem k tomu, že celý tento kurz běží místně na vašem počítači, nejsou k dispozici žádné Azure prostředky ani služby, které by bylo potřeba vyčistit.
Další kroky
V tomto kurzu jste zjistili, jak sestavit a přizpůsobit koncový bod rozhraní HTTP API s Azure Functions ke klasifikaci obrázků pomocí modelu TensorFlow. Dozvěděli jste se také, jak volat rozhraní API z webové aplikace. Techniky v tomto kurzu můžete použít k sestavení rozhraní API jakékoli složitosti, a to vše při spouštění na bezserverovém výpočetním modelu poskytovaném Azure Functions.
Viz také: