Uz šī API nepieciešams uzlikt FastAPI Python projektu:
https://github.com/asya-ai/parkexpert-licenseplate-api/
Prasības API:
HTTP REST API ar JSON requests
Visi JSONS ir dataclass_json pārmantoti un dokumentēti
Sadalīd kodu models, controllers, views (api interface)
ControllerDatabase izmanto psycopg2
Datubāzes pieeja:
host: 80.232.224.165
port: 10354
u: park_expert
d: park_expert
p: d03H10wz8NgEVhxlUlpT
Nepieciešams izveidot datubāzē PostgreSQL tabulu tasks (katrai tabulai pretī model class)
task_id PK
client_id FK
task_uuid (uuid v4)
task_status (varchar)
task_tag (varchar)
task_car_direction (varchar FRONT/BACK/OTHER Python Enum(str))
task_license_plate (str)
task_callback_url
created
modified
Nepieciešams izveidot datubāzē PostgreSQL tabulu clients
client_id
client_uuid
client_api_key varchar (uuid v4)
is_active
created
modified
Nekad uz ārpasauli nerādam nevienu id, tikai uuid
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.
client_api_key
task_tag: varchar (lietotājs pats uzstāda)
task_callback_url
photo_file (augšupielādē direktorijā, ar task_uuid.png, kuru apstrādā pēc tam worker)
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
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
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
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
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
Uz konkrēta GPU var palaist ar CUDA_VISIBLE_DEVICES=0 worker.py
vaiCUDA_VISIBLE_DEVICES=1 worker.py
uz katru GPU atsevišķi modeļus, jāpārbauda, ka modeļi ir palaisti uz GPU ar nvidia-smi
Gala rezultātu vajadzēs uzlikt uz asya-3 API un workerus kā linux screens
pe_api uz port 8080 (publiski pieejams 80.232.224.165:8080)
pe_car_detection
pe_license_plate_detection
pe_car_direction_detection
pe_car_license_plate
Piemērs no master_api github, kur skatīties piemēru
Nepieciešams paņemt labākos modeļus no https://github.com/asya-ai/parkexpert-model-photo