2024-07-30 ParkExpert Task

 

REST API, kur var nosūtīt attēlu un saņemt atpakaļ numura zīmes tekstu un mašīnas virziena informāciju. Vēlāk var pievienot arī citas īpašības kā piemēram automašīnas marku, krāsu, utt. Atpazīšanas uzlabošanai tiek izmantoti ParkExpert dati, nepieciešamības gadījumā dati būtu jāievāc 1-2 mēnešus, bet visticamāk pietiks ar publiskajām datu kopām

 

Plāns:

  1. Savākt visus marķētos piemērus (kuri nav unknown) no FTP uz asya_5 datu glabātuvi (sagatavot, lai Reinis uzliek) asya_5:/media/storage/data/raw/photo_cars/2024-08-02 (datums, kad savākts)

    Klienta FTP (active mode tikai strādā):

  2. Atlasīt validācijas kopu, kur vismaz 100 paraugiem ir manuāli pārbaudīts numurs un virziens

  3. Github repo

    1. https://github.com/asya-ai/parkexpert-model-photo

  4. Izveidot tīras pyhton funkcijas, kuras var izmantot, lai validācijas kopai aprēķinātu

    1. cer_plate uz numura zīmju burtu kļūdu. Input: filename, predicted_plate_str, Output: CER (character error rate) Bez atstarpēm

    2. accuracy_plate uz kopējo pareizi atpazīto numuru skaitu: Tas pats, kas CER, tikai output ir 1 vai 0

    3. accuracy_direction priekš Front/Back classification (pēc paneļiem), input filename, prediction_enum_str (“front”, “back”), output 1 vai 0

    4. mean_cer_plate, mean_accuracy_plate, mean_accuracy_direction. Aprēķina izmantojot iepriekšējās funkcijas uz visu validation set

  5. Metode:

    1. Vispirms segmentējam mašīnu un/vai license plate

    2. Tad atpazīstam numura zīmi no segmentēta apgabala

    3. Segmentēto apgabalu ap mašīnu padodam klasifikatoram front/back vai arī paneļu modelim pēc kura izsecināt vai redzama priekša vai aizmugure mašīnai

  6. Uz dotajiem marķētājiem piemēriem notestēt visas pieejamās metodes

    1. License Plate Recognition LRRNet https://docs.nvidia.com/tao/tao-toolkit/text/character_recognition/lprnet.html

      1. Jāpārbauda uz pretrained Japanese

      2. Un jāatrod arī pretrained USA

    2. https://github.com/dbpprt/pytorch-licenseplate-segmentation

    3. Paneļu segmentation vai virziena noteikšanas modeļi - https://datasetninja.com/semantics-car-segmentation (lampas, grill, bonnet, widshield)

      1. Atrast vēl citus modeļus un datu kopas

    4. Open API izveidot funkciju, kas ar 2 atsevišķiem pormpt + bildi nosaka virzienu un plate number:

      1. https://www.perplexity.ai/search/give-python-example-openai-api-QyBaseTqSq.gL2X113T8kA

      2. Prompt: Classify which part car is visible: Front, Back (varbūt arī Unknown) - apstrādāt output ar regex

      3. Prompt: Extract License Plate Number - apstrādāt output ar regex

  7. Atrast visas pieejamās numura zīmju datu kopas

    1. Varētu iegūt no SS.LV un ar GPT4 marķēt un pēc tam ar cilvēku pārbaudīt (gan front/back bildes, gan numura zīmes)

  8. Izveidot sintētisko datu ģeneratoru numura zīmēm (segmentētajam apgabalm)

  9. Atrast, kru modeli mēs varētu apmācīt

 

Iepriekšējā pieredze

Līdz galam kāds rezultāts neatceros, bet uz ne crazy sliktām bildēm, standarta numuri bija diezgan ok. izmantoju ctc loss un fiksēta izmēra output. man bija datu ģenerātors priekš fake datiem, tas daudz ko deva. slikti strādāja uz custom un ārvalstu numuriem, bet tas bija datu trūkums

 

nu nosacīti realistiskas, pēc specenes rāmi, fontu un izmērus sataisīja un random numurus ģenerēja, viss bez ai. pēctam vareja augmentēt uz random foniem un to jau likt modelī. Modelim nāca output no yolo izgriezti numuri. IMG to seq jā, bet uz jau izgriestu numuru

 

Mēs lietojām 3 detekcijas ssd tīklus - 1:detektē mašinas, 2: detektw numurzimes uz masinu kropiem, 3: detekte burtus uz numurzimem. Tad jau tas burtu kastites var vnk salikt rindina un sanak numurs. Kadus 10k man liekas vismaz vajadzetu.