Megosztás a következőn keresztül:


Oktatóanyag: Gépi tanulási modellek alkalmazása az Azure Functionsben a Python és a TensorFlow használatával

Ebből a cikkből megtudhatja, hogyan használható a Python, a TensorFlow és az Azure Functions gépi tanulási modellel egy kép tartalom alapján történő besorolására. Mivel minden munkát helyileg végez, és nem hoz létre Azure-erőforrásokat a felhőben, az oktatóanyag elvégzése nem jár költséggel.

  • Helyi környezet inicializálása az Azure Functions Pythonban való fejlesztéséhez.
  • Egyéni TensorFlow gépi tanulási modell importálása függvényalkalmazásba.
  • Kiszolgáló nélküli HTTP API-t hozhat létre a rendszerkép kutya vagy macska szerinti besorolásához.
  • Az API használata webalkalmazásból.

Előfeltételek

Előfeltételek ellenőrzése

  1. Egy terminál vagy parancsablakban futtassa func --version az Azure Functions Core Tools 2.7.1846-os vagy újabb verzióját.
  2. Futtassa python --version (Linux/macOS) vagy py --version (Windows) a Python 3.7.x-es verziójelentéseinek ellenőrzéséhez.

Az oktatóanyag-adattár klónozása

  1. Egy terminál vagy parancsablakban klónozza a következő adattárat a Git használatával:

    git clone https://github.com/Azure-Samples/functions-python-tensorflow-tutorial.git
    
  2. Lépjen a mappába, és vizsgálja meg annak tartalmát.

    cd functions-python-tensorflow-tutorial
    
    • A start az oktatóanyag munkamappája.
    • A befejezés a végső eredmény és a teljes megvalósítás a referencia számára.
    • az erőforrások tartalmazzák a gépi tanulási modellt és a segédkódtárakat.
    • A frontend egy olyan webhely, amely meghívja a függvényalkalmazást.

Python virtuális környezet létrehozása és aktiválása

Lépjen a kezdőmappára , és futtassa a következő parancsokat egy virtuális környezet .venvlétrehozásához és aktiválásához. Mindenképpen használja a Python 3.7-et, amelyet az Azure Functions támogat.

cd start
python -m venv .venv
source .venv/bin/activate

Ha a Python nem telepítette a venv-csomagot a Linux-disztribúcióra, futtassa a következő parancsot:

sudo apt-get install python3-venv

Ebben az aktivált virtuális környezetben minden további parancsot futtat. (A virtuális környezetből való kilépéshez futtassa deactivatea .)

Helyi függvényprojekt létrehozása

Az Azure Functionsben a függvényprojekt egy tároló egy vagy több egyedi függvény számára, amelyek mindegyike egy adott eseményindítóra válaszol. A projekt összes függvénye ugyanazokkal a helyi és üzemeltetési konfigurációkkal rendelkezik. Ebben a szakaszban egy olyan függvényprojektet hoz létre, amely egyetlen, HTTP-végpontot biztosító kazánplatétfüggvényt classify tartalmaz. Egy későbbi szakaszban konkrétabb kódot adhat hozzá.

  1. A kezdőmappában az Azure Functions Core Tools használatával inicializálhat egy Python-függvényalkalmazást:

    func init --worker-runtime python
    

    Az inicializálás után a start mappa különböző fájlokat tartalmaz a projekthez, beleértve a local.settings.json és host.json nevű konfigurációs fájlokat. Mivel local.settings.json tartalmazhat az Azure-ból letöltött titkos kulcsokat, a fájl alapértelmezés szerint ki van zárva a .gitignore fájlból a forrásvezérlőből.

    Tipp.

    Mivel egy függvényprojekt egy adott futtatókörnyezethez van kötve, a projekt összes függvényét ugyanazzal a nyelvvel kell írni.

  2. Adjon hozzá egy függvényt a projekthez az alábbi paranccsal, ahol az --name argumentum a függvény egyedi neve, az --template argumentum pedig a függvény eseményindítóját határozza meg. func newhozzon létre egy olyan almappát, amely megfelel a függvény nevének, amely a projekt választott nyelvének megfelelő kódfájlt és egy function.json nevű konfigurációs fájlt tartalmaz.

    func new --name classify --template "HTTP trigger"
    

    Ez a parancs létrehoz egy olyan mappát, amely megfelel a függvény nevének, osztályozza. Ebben a mappában két fájl található: __init__.py, amely tartalmazza a függvénykódot, és function.json, amely leírja a függvény eseményindítóját, valamint annak bemeneti és kimeneti kötéseit. A fájlok tartalmával kapcsolatos részletekért lásd a Python fejlesztői útmutatójának programozási modelljét .

Függvény helyi futtatása

  1. Indítsa el a függvényt úgy, hogy elindítja a helyi Azure Functions-futtatókörnyezet-gazdagépet a start mappában:

    func start
    
  2. Ha a végpont megjelenik classify a kimenetben, keresse meg az URL-címet. http://localhost:7071/api/classify?name=Azure A kimenetben a "Hello Azure!" üzenetnek kell megjelennie.

  3. Állítsa le a gazdagépet a Ctrl C billentyűkombinációval.-

A TensorFlow-modell importálása és segédkód hozzáadása

Ha módosítani szeretné a classify függvényt egy rendszerkép tartalom alapján történő besorolásához, egy előre elkészített TensorFlow-modellt használ, amelyet betanított és exportált az Azure Custom Vision Service-ből. A modell, amely a korábban klónozott minta erőforrásmappájában található, a rendszerképet annak alapján osztályozza, hogy kutya vagy macska található-e benne. Ezután hozzáadhat néhány segédkódot és függőséget a projekthez.

Ha saját modellt szeretne létrehozni a Custom Vision Service ingyenes rétegével, kövesse a mintaprojekt-adattár utasításait.

Tipp.

Ha a TensorFlow-modellt a függvényalkalmazástól függetlenül szeretné üzemeltetni, ehelyett csatlakoztathat egy, a modellt tartalmazó fájlmegosztást a Linux-függvényalkalmazáshoz. További információ: Fájlmegosztás csatlakoztatása Python-függvényalkalmazáshoz az Azure CLI használatával.

  1. A kezdőmappában futtassa a következő parancsot a modellfájlok besorolási mappába másolásához. Ügyeljen arra, hogy szerepeljen \* a parancsban.

    cp ../resources/model/* classify
    
  2. Ellenőrizze, hogy az osztályozási mappa tartalmaz-e model.pb és labels.txt nevű fájlokat. Ha nem, ellenőrizze, hogy futtatta-e a parancsot a kezdőmappában .

  3. A kezdőmappában futtassa a következő parancsot egy segédkóddal rendelkező fájl másolásához az osztályozásimappába:

    cp ../resources/predict.py classify
    
  4. Ellenőrizze, hogy az osztályozási mappa tartalmaz-e predict.py nevű fájlt.

  5. Nyissa meg a start/requirements.txt egy szövegszerkesztőben, és adja hozzá a segédkódhoz szükséges alábbi függőségeket:

    tensorflow==1.14
    Pillow
    requests
    
  6. Mentse requirements.txt.

  7. Telepítse a függőségeket a következő parancs futtatásával a kezdőmappában . A telepítés eltarthat néhány percig, amíg a függvényt a következő szakaszban módosíthatja.

    pip install --no-cache-dir -r requirements.txt
    

    Windows rendszeren a következő hibaüzenet jelenhet meg: "Nem telepíthet csomagokat egy EnvironmentError miatt: [Errno 2] Nincs ilyen fájl vagy könyvtár:", majd egy fájl hosszú elérési útja, például sharded_mutable_dense_hashtable.cpython-37.pyc. Ez a hiba általában azért fordul elő, mert a mappa elérési útja túl hosszú lesz. Ebben az esetben állítsa be a beállításkulcsot HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled1 a hosszú útvonalak engedélyezéséhez. Másik lehetőségként ellenőrizze, hogy a Python-értelmező hol van telepítve. Ha ez a hely hosszú elérési úttal rendelkezik, próbálkozzon újra egy rövidebb elérési úttal rendelkező mappában.

Tipp.

Amikor meghívja predict.py, hogy tegye meg az első előrejelzését, egy névvel ellátott _initialize függvény betölti a TensorFlow-modellt a lemezről, és globális változókban gyorsítótárazza. Ez a gyorsítótárazás felgyorsítja a későbbi előrejelzéseket. A globális változók használatával kapcsolatos további információkért tekintse meg az Azure Functions Python fejlesztői útmutatóját.

A függvény frissítése előrejelzések futtatásához

  1. Nyissa meg a classify/__init__.py egy szövegszerkesztőben, és adja hozzá a következő sorokat a meglévő import utasítások után a szabványos JSON-kódtár és a prediktív segédek importálásához:

    import logging
    import azure.functions as func
    import json
    
    # Import helper script
    from .predict import predict_image_from_url
    
  2. Cserélje le a main függvény teljes tartalmát a következő kódra:

    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)
    

    Ez a függvény egy kép URL-címét kapja meg egy lekérdezési imgsztring nevű paraméterben. Ezután a segédtárból kéri predict_image_from_url a rendszerkép letöltését és besorolását a TensorFlow-modellel. A függvény ezután egy HTTP-választ ad vissza az eredményekkel együtt.

    Fontos

    Mivel ezt a HTTP-végpontot egy másik tartományban üzemeltetett weblap hívja meg, a válasz tartalmaz egy Access-Control-Allow-Origin fejlécet, amely megfelel a böngésző forrásközi erőforrás-megosztási (CORS) követelményeinek.

    Egy éles alkalmazásban váltson * a weblap konkrét eredetére a hozzáadott biztonság érdekében.

  3. Mentse a módosításokat, majd feltételezve, hogy a függőségek telepítése befejeződött, indítsa újra a helyi függvény gazdagépét.func start Győződjön meg arról, hogy a gazdagépet a kezdőmappában futtatja, és a virtuális környezet aktiválva van. Ellenkező esetben a gazdagép elindul, de a függvény meghívásakor hibaüzenetek jelennek meg.

    func start
    
  4. A böngészőben nyissa meg a következő URL-címet, hogy meghívja a függvényt egy macskakép URL-címével, és ellenőrizze, hogy a visszaadott JSON macskaként sorolja-e be a képet.

    http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
    
  5. Futtassa a gazdagépet, mert a következő lépésben használja.

A függvény teszteléséhez futtassa a helyi webalkalmazás előtérét

A függvényvégpont egy másik webalkalmazásból való meghívásának teszteléséhez egy egyszerű alkalmazás található az adattár előtérmappájában.

  1. Nyisson meg egy új terminált vagy parancssort, és aktiválja a virtuális környezetet (a pythonos virtuális környezet létrehozása és aktiválása című cikkben leírtak szerint).

  2. Nyissa meg az adattár előtérmappáját.

  3. HTTP-kiszolgáló indítása a Pythonnal:

    python -m http.server
    
  4. Nyissa meg localhost:8000a böngészőben, majd írja be az alábbi fényképES URL-címek egyikét a szövegmezőbe, vagy használja a nyilvánosan elérhető képek URL-címét.

    • https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
    • https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat2.png
    • https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog1.png
    • https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog2.png
  5. Válassza a Küldés lehetőséget a függvényvégpont meghívásához a rendszerkép besorolásához.

    Képernyőkép a kész projektről

    Ha a böngésző hibát jelez a kép URL-címének elküldésekor, ellenőrizze azt a terminált, amelyen a függvényalkalmazást futtatja. Ha a "Nem található modul "PIL" hibaüzenet jelenik meg, előfordulhat, hogy a függvényalkalmazást a start mappában indította el anélkül, hogy először aktiválta volna a korábban létrehozott virtuális környezetet. Ha továbbra is hibákat lát, futtassa pip install -r requirements.txt újra a virtuális környezetet aktiválva, és keressen hibákat.

Feljegyzés

A modell mindig macskának vagy kutyának sorolja be a kép tartalmát, függetlenül attól, hogy a kép tartalmazza-e őket, alapértelmezés szerint kutyának. A tigrisek és párducok képei általában macskaként osztályozhatók, de az elefántok, sárgarépa vagy repülőgépek képei kutyaként osztályozhatók.

Az erőforrások eltávolítása

Mivel az oktatóanyag teljes egésze helyileg fut a gépen, nincs törölendő Azure-erőforrás vagy szolgáltatás.

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan hozhat létre és szabhat testre egy HTTP API-végpontot az Azure Functions használatával a képek TensorFlow-modellel való besorolásához. Azt is megtanulta, hogyan hívhatja meg az API-t egy webalkalmazásból. Az oktatóanyagban szereplő technikákkal bármilyen összetettségű API-kat hozhat létre, mindezt az Azure Functions által biztosított kiszolgáló nélküli számítási modellen való futtatás során.

Lásd még: