2024-08-14 ParkExpert API

 

Uz šī API nepieciešams uzlikt FastAPI Python projektu:

https://github.com/asya-ai/parkexpert-licenseplate-api/

 

Prasības API:

  1. HTTP REST API ar JSON requests

  2. Visi JSONS ir dataclass_json pārmantoti un dokumentēti

  3. Sadalīd kodu models, controllers, views (api interface)

  4. ControllerDatabase izmanto psycopg2

  5. Datubāzes pieeja:

    1. host: 80.232.224.165

    2. port: 10354

    3. u: park_expert

    4. d: park_expert

    5. p: d03H10wz8NgEVhxlUlpT

  6. Nepieciešams izveidot datubāzē PostgreSQL tabulu tasks (katrai tabulai pretī model class)

    1. task_id PK

    2. client_id FK

    3. task_uuid (uuid v4)

    4. task_status (varchar)

    5. task_tag (varchar)

    6. task_car_direction (varchar FRONT/BACK/OTHER Python Enum(str))

    7. task_license_plate (str)

    8. task_callback_url

    9. created

    10. modified

  7. Nepieciešams izveidot datubāzē PostgreSQL tabulu clients

    1. client_id

    2. client_uuid

    3. client_api_key varchar (uuid v4)

    4. is_active

    5. created

    6. modified

  8. Nekad uz ārpasauli nerādam nevienu id, tikai uuid

  9. Nepieciešams izveidot api.py FastAPI app vienu @post endpoint task_submit (response message pretī model class). Lai strādātu file upload ar multi-part post neizmantot JSON kā request, bet tikai kā response. Var testēt API ar Swagger UI, kas ir iebūvēts FastAPI.

    1. client_api_key

    2. task_tag: varchar (lietotājs pats uzstāda)

    3. task_callback_url

    4. photo_file (augšupielādē direktorijā, ar task_uuid.png, kuru apstrādā pēc tam worker)

  10. Nepieciešams izveidot workerus, kurš no datu bāzes savāc uzdevumus kur task_status = WAITING un veic uzdevuma apstādi, katram posmam savs status

    1. worker_car_detection.py (šeit no model repo https://github.com/asya-ai/parkexpert-licenseplate-api/ jāpaņem localization code un no Artūra Ulda jādabon apmācītie modeļa svari) rezultats cars/task_uuid_#.png - var teorētiski būt situācijas, ka ir vairāki auto un numura zīmes

    2. Nākmais worker_license_plate_detection.py (šeit no model repo https://github.com/asya-ai/parkexpert-licenseplate-api/ jāpaņem localization code un no Artūra Ulda jādabon apmācītie modeļa svari) - rezultāts PNG ar license_plates/task_uuid_#.png

    3. Nākmais worker_car_direction_detection.py, kas iet paralēli iepriekšējam (šeit no model repo https://github.com/asya-ai/parkexpert-licenseplate-api/ jāpaņem code un no Gustava Evalds jādabon apmācītie modeļa svari) , šis sagalabā datubāzē tasks task_car_direction

    4. Visbeidzot worker_car_license_plate.py (no Artūra Ulda svari un lprnet), šis sagalabā datubāzē tasks task_license_plate. Kad šis pabeidz procesing tas nosūta uz task_callback_url JSON ar noprocesētu atbildi kurā ir task_tag, task_car_direction, task_license_plate

    5. Uz konkrēta GPU var palaist ar CUDA_VISIBLE_DEVICES=0 worker.py vaiCUDA_VISIBLE_DEVICES=1 worker.pyuz katru GPU atsevišķi modeļus, jāpārbauda, ka modeļi ir palaisti uz GPU ar nvidia-smi

    6. Gala rezultātu vajadzēs uzlikt uz asya-3 API un workerus kā linux screens

      1. pe_api uz port 8080 (publiski pieejams 80.232.224.165:8080)

      2. pe_car_detection

      3. pe_license_plate_detection

      4. pe_car_direction_detection

      5. pe_car_license_plate

     

     

 

 

Piemērs no master_api github, kur skatīties piemēru image-20240814104959885

 

Nepieciešams paņemt labākos modeļus no https://github.com/asya-ai/parkexpert-model-photo