Comments (45)
В последнем релизе была натренирована модель которая работает и с квадратными номерами.
Но, мы читаем номер как 2 линии, так что номер в формате
241VBZ10
будет читаться как
24110VBZ
Детальнее можете посмотреть в обновленном примере:
https://github.com/ria-com/nomeroff-net/blob/master/examples/demo3.ipynb
Подробнее о изменениях:
https://github.com/ria-com/nomeroff-net/blob/master/History.md
Новые натренированные модели можете взять тут:
https://nomeroff.net.ua/models/
from nomeroff-net.
from nomeroff-net.
from nomeroff-net.
Хорошо спасибо вам за помощь @ApelSYN
from nomeroff-net.
Сформировал новый датасет и натренировал модель для GPU, accuracy 94%, это еще не окончательный вариант, возможно еще +1% доберу, для CPU тоже натренирую позже т.к. это занимает много времени.
К фоткам есть следующие замечания -- много машин сфоткано в движении, это размазывает контуры, получается что картинка не четкая. Я постарался убрать сильно смазанные. Думаю что лучше искать фото с авто-сайтов, так как там машину фоткают в статичном состоянии и качество получается получше.
from nomeroff-net.
Сегодня обновил обе модели и для CPU и для GPU, accuracy 95%
from nomeroff-net.
Отлично, Размечать что-нибудь нужно или подкорректировать?
from nomeroff-net.
квадратные более 14 000 (2 line KZ)
from nomeroff-net.
У меня и у Дмитрия небольшой отпуск, мы займемся доработкой nomeroff net для умения работы с квадратными номерами, пока что своими украинскими, когда до ваших дело дойдет прогнозировать не могу следите за апдейтами
from nomeroff-net.
Можете скинуть ссылку квадратные kz номера?
from nomeroff-net.
Можете скинуть ссылку квадратные kz номера?
квадратные более 14 000 (2 line KZ)
from nomeroff-net.
from nomeroff-net.
Как можно использовать весы в режиме Real-Time?
Как показалось время detection-a "номерного знака" занимает много времени.
from nomeroff-net.
Спасибо за ответ
from nomeroff-net.
Здравствуйте уважаемые коллеги, не могли бы помочь.
Какие алгоритмы можно использовать для классифицикации типов транспортных средств?
Типы транспортных средств:
1. Легковые 2-осные
2. Автобусы до 16 мест и грузовые автомобили грузоподъемностью от 1 тонна (далее - т) до 2,5 т
2-осные
3. Автобусы до 32 мест и грузовые автомобили грузоподъемностью до 5,5 т 2-осные
4. Автобусы свыше 32 мест и грузовые автомобили грузоподъемностью автопоезда до 10 т 2-
осные
5. Грузовые автомобили грузоподъемностью от 10 т до 15 т 3-осные
6. Грузовые автомобили грузоподъемностью свыше 15 т многоосные, в том числе с прицепами,
седельные тягачи
from nomeroff-net.
Добрый вечер, Спасибо за проделанную работу, возникает вопрос при распознавании квадратных номеров. Для них используется другие веса? так как скачанные мной последние веса не распознают как вы указывали выше. Спасибо
from nomeroff-net.
Пока что наш код умеет только находить квадратные номера, дальнейшее распознавание не реализовано. Веса от однострочных номеров не подойдут (точнее не подойдут если просто подать "квадратное" изображение на вход сети OCR).
Для украинских номеров мы разработали у себя систему, которая умеет это делать, но она использует немного другие технологии и подходы, пока что код выглядит не очень презентабельно, возможно, через некоторое время мы его "причешем" и тоже виложим.
from nomeroff-net.
Спасибо за ответ. Не могли бы вы поделиться ранней версией TextDetector.py где она могла загружать веса квадратных номеров и распознавать их. Я скачал веса для квадратных номеров и хотел бы посмотреть. Спасибо
from nomeroff-net.
Спасибо за ответ. Не могли бы вы поделиться ранней версией TextDetector.py
Нету никаких других весов, идея заключается в том чтоб найти границы текстовых блоков и "склеить" все в одну линию, а потом подать на распознавание одну линию на уже имеющиеся веса.
from nomeroff-net.
Понятно, спасибо за ответ
from nomeroff-net.
Я поясню на примере:
Берем номер:
Определяем возможные зоны с текстом:
составляем хитмап (Heatmap) "потенциальных" участков с текстом
формируем потенциальные границы зон с текстом
Теперь можно склеить все в одну строку
Инструмент которым мы пользуемся для детекции текстовых зон называется CRAFT. Это не очень оптимальный способ решения поставленой задачи, CRAFT достаточно "тяжелый" фреймворк, возможно в будущем нам прийдется использовать что-то "полегче". Когда у нас будет более-мение стабильное и универсальное решение, которое можно применить к любым типам квадратных номеров мы его выложим в открытый доступ.
from nomeroff-net.
очень благодарен, что уделили время.
from nomeroff-net.
Добрый день! Спасибо за проделанную работу, ApelSYN. Не могли бы дать *.pbtxt файлов для соответствующих обученных весов. Заранее спасибо!
from nomeroff-net.
Здраствуйте, мы не сохраняли модели в формате *.pbtxt.
Однако вы можете сделать это самостоятельно.
Для этого посмотрите на этот скрипт.
from nomeroff-net.
Здраствуйте, мы не сохраняли модели в формате *.pbtxt.
Однако вы можете сделать это самостоятельно.
Для этого посмотрите на этот скрипт.
Огромное спасибо, за ответы! Но конвертированный *.pbtxt файл не идет!
Выдает следующую ошибку:
OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(4.1.1) Error: Assertion failed (const_layers.insert(std::make_pair(name, li)).second) in cv::dnn::dnn4_v20190621::`anonymous-namespace'::addConstNodes, file
from nomeroff-net.
Можете скинуть ссылку квадратные kz номера?
Здравствуйте! не могли бы поделится снова датасетом2 line KZ?
from nomeroff-net.
Под руками нет, я не помню как назывался файл, мы не занимались двухлинейными номерами для KZ спроси у владельца файла @Tolegen95 .
from nomeroff-net.
@ApelSYN да думал что коментированием его сообщения сработает) @Tolegen95 можете снова зашейрить файл?
from nomeroff-net.
@ApelSYN извините, а не подскажите в чем может быть проблема, RectDetector переворачивает рисунок квадратного номера не в ту сторону когда скармливаю ему свои номера, но при этом норм действует с номером из примера 3.
from nomeroff-net.
@cruigo93 высылайте примеры.
from nomeroff-net.
from nomeroff-net.
Думаю ошибка где-то в RectDetect, пришлите оригиналы на почту [email protected], у вас фото "поджатые", можно попробовать что-то с этим сделать.
from nomeroff-net.
@ApelSYN написал вам на почту
from nomeroff-net.
@cruigo93 Хочу обратить ваше внимание что номера в несколько строк для казахских номеров не читаются, даже если ориентация определена правильно.
Я немного подпатчил NomeroffNet/RectDetector.py и поместил его в новую ветку. С ним будет все работать, но теперь правильность определения точек ложится на ваш код, в examples/demo3.ipynb добавляем следующий кусок
import operator
def fix_rect(arrPoints):
newArrPoints = arrPoints[0].tolist()
(minXidx, minPoint) = min(enumerate(newArrPoints), key=operator.itemgetter(1))
res = newArrPoints[minXidx:4]+newArrPoints[0:minXidx]
dx1 = res[1][0]-res[0][0]
dx3 = res[3][0]-res[0][0]
if (dx1>dx3):
return np.array([[res[3]]+res[0:3]])
else:
return np.array([res])
и последнюю секцию из примера переписываем вот так
# Walking through the ./examples/images/ directory and checking each of the images for license plates.
rootDir = 'images2/'
max_img_w = 1600
for dirName, subdirList, fileList in os.walk(rootDir):
for fname in fileList:
img_path = os.path.join(dirName, fname)
print(img_path)
img = mpimg.imread(img_path)
plt.axis("off")
plt.imshow(img)
plt.show()
# corect size for better speed
img_w = img.shape[1]
img_h = img.shape[0]
img_w_r = 1
img_h_r = 1
if img_w > max_img_w:
resized_img = cv2.resize(img, (max_img_w, int(max_img_w/img_w*img_h)))
img_w_r = img_w/max_img_w
img_h_r = img_h/(max_img_w/img_w*img_h)
else:
resized_img = img
NP = nnet.detect([resized_img])
# Generate image mask.
cv_img_masks = await filters.cv_img_mask_async(NP)
# Detect points.
arrPoints = await rectDetector.detectAsync(cv_img_masks, outboundHeightOffset=0, fixGeometry=True, fixRectangleAngle=10)
arrPoints = fix_rect(arrPoints)
print(arrPoints)
arrPoints[..., 1:2] = arrPoints[..., 1:2]*img_h_r
arrPoints[..., 0:1] = arrPoints[..., 0:1]*img_w_r
# cut zones
zones = await rectDetector.get_cv_zonesBGR_async(img, arrPoints, auto_width_height=False)
toShowZones = await rectDetector.get_cv_zonesRGB_async(img, arrPoints, auto_width_height=False)
for zone, points in zip(toShowZones, arrPoints):
plt.axis("off")
plt.imshow(zone)
plt.show()
# find standart
regionIds, stateIds, countLines = optionsDetector.predict(zones)
regionNames = optionsDetector.getRegionLabels(regionIds)
print(regionNames)
print(countLines)
# find text with postprocessing by standart
textArr = textDetector.predict(zones, regionNames, countLines)
textArr = await textPostprocessingAsync(textArr, regionNames)
print(textArr)
теперь все будет определятся корректно, можно еще больше заморочится, с моделью которая будет определять правильность детекта направления надписи, но мне кажется что это существенно все усложнит.
from nomeroff-net.
@ApelSYN спасибо, recognition сейчас думаем обучать, у нас сцена ограничена, думаю будет лучше под нее переобучиться. Еще раз спасибо за либу!
from nomeroff-net.
не подскажите, пытаюсь дообучить модель на своих данных, загружаю latest модель, но выпадаю в такую ошибку, не могу понять что да как.
Unknown entry in loss dictionary: "ctc". Only expected the following keys: ['softmax_kz_box']
from nomeroff-net.
from nomeroff-net.
спасибо
from nomeroff-net.
теперь без ошибок, но после запуска
model = ocrTextDetector.train(mode=MODE, load = True, model_path = '../models/anpr_ocr_kz_4-gpu.h5')
просто выдает summary, и дальше обучение не происходит, попробовал убрать в train проверку load в конце, другая ошибка
No data provided for "softmax_kz". Need data for each key in: ['softmax_kz']
from nomeroff-net.
from nomeroff-net.
Здравствуйте. Хочу поблагодарить Вас за проделанную работу и задать один вопрос. При попытке тренировки(запуска вашего скрипта) OCR на номерах РФ столкнулся с такой проблемой:
Не знаете, в чем может быть проблема?
from nomeroff-net.
Похоже на то, что вы не выполнили функцию prepare, в которой инициализируются генераторы по вашему датасету или указали неверный путь к датасету
ocrTextDetector = ru()
ocrTextDetector.prepare(PATH_TO_DATASET)
Датасет должен выглядеть следующим образом:
PATH_TO_DATASET:
train:
ann:
1.json
2.json
...
img:
1.png
2.png
...
val:
ann:
1.json
2.json
...
img:
1.png
2.png
...
test:
ann:
1.json
2.json
...
img:
1.png
2.png
...
from nomeroff-net.
Доброго часу доби @ApelSYN. перш за все дякую вам за виконану роботу.
Все круто працює, але я зіткнувся з одним нюансом.
У 2018 році поліція Казахстану додала в асортимент автомобільних номерних знаків чотири нові літери: I, J, Q і G. У 2020 році зображення цих чотирьох букв змінили. На даний момент виявив проблему з розпізнаванням літери "I", вона змінилася на - 𝐈. тобто. з'явилися рисочки зверху та знизу. та розпізнається як буква "T". На жаль, у мене немає датасету з новими зразками номерів. Чи можливо вирішити цю проблему без датасету?
Дякую!
from nomeroff-net.
Доброго часу доби @ApelSYN. перш за все дякую вам за виконану роботу. Все круто працює, але я зіткнувся з одним нюансом. У 2018 році поліція Казахстану додала в асортимент автомобільних номерних знаків чотири нові літери: I, J, Q і G. У 2020 році зображення цих чотирьох букв змінили. На даний момент виявив проблему з розпізнаванням літери "I", вона змінилася на - 𝐈. тобто. з'явилися рисочки зверху та знизу. та розпізнається як буква "T". На жаль, у мене немає датасету з новими зразками номерів. Чи можливо вирішити цю проблему без датасету? Дякую!
Це не проста задача, можна спробувати згенерувати синтетичний датасет з використагням вказаних літер і додати його до основного датасету та перетренувати модель. Звичайно, краще використовувати реальні фото номерів. Ми запишемо собі в таски покращення датасету, але коли на це зможемо виділити час поки сказати не можу. Щоб прискорити процес вишліть приклади фото з неправильним розпізнаванням на email: [email protected]
from nomeroff-net.
@ApelSYN Спасибі за відповідь. Надіслав приклади на пошту.
from nomeroff-net.
Related Issues (20)
- Failed to run get-started-demo.py in docker container HOT 3
- обучать пользовательский набор данных HOT 7
- I have error about checkpoint HOT 5
- KeyError: 'pytorch-lightning_version' HOT 3
- How to train OCR model? HOT 3
- ImportError: cannot import name 'efficientnet_v2_s' from 'torchvision.models' HOT 1
- when change name of folder nomer_net code not work HOT 5
- Size of docker image HOT 1
- Multiline example doesn't return correct recognitions
- draw rectangle bbox on plate HOT 4
- Некорректное распознавание российских номер с регионом 799, 977 HOT 1
- Некорректное распознавание номеров в 3 строки
- Ошибка при установке пакета в req.txt HOT 1
- Columns and DataType Not Explicitly Set on line 157 of datasets_tools.py
- Error in nomeroff-net setup command: 'install_requires' HOT 1
- Label 'md' not in dict_keys && Label changed on default 'eu_ua_2015'
- Realtime Video performance / Benchmrk
- Getting OCR score
- Performance question
- Is it possible to run nomeroff in multiprocessing mode?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nomeroff-net.