Власти австралийского штата Виктория в 2015 году работали над системой распознавания угнанных автомобилей по номерным знакам. По оценкам экспертов, реализация проекта обошлась бы штату в 86 млн австралийских долларов (70 млн долларов США или чуть более 4 млрд рублей). Местный программист Тэйт Браун решил сделать что-то подобное сам — и у него получилось!
В чём заключалась его идея?
Во-первых, знаки машин должны распознаваться локально — в противном случае счета за Интернет были бы астрономическими. Во-вторых, система должна распознавать изображения низкого качества, полученные с видеорегистратора. И в-третьих, всё используемое ПО должно быть открытым.
В своей системе Тэйт использовал библиотеку openalpr, запрос к которой укладывается в пару строк кода:
1
2
3
|
openalpr.IdentifyLicense(imagePath, function (error, output) {
// handle result
});
|
Несмотря на то, что изначально программа была рассчитана на американские номера, она отлично справилась с задачей.
Базу зарегистрированных номерных знаков программист получил, распарсив данные сервиса VicRoads. Он не предоставляет открытый API, поэтому пришлось пойти на хитрость:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
// Open form and submit enquire for `rego`
function getInfo(rego) {
horseman
.userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0')
.open(url)
.type('#registration-number-ctrl input[type=text]', rego)
.click('.btn-holder input')
.waitForSelector('.ctrl-holder.ctrl-readonly')
.html()
.then(function(body) {
console.log(processInfo(body, rego));
return horseman.close();
});
}
// Scrape the results for key info
function processInfo(html, rego) {
var $ = cheerio.load(html);
var vehicle = $('label.label').filter(function() {
return $(this).text().trim() === 'Vehicle:';
}).next().text().trim();
var stolen = $('label.label').filter(function() {
return $(this).text().trim() === 'Stolen status:';
}).next().text().trim();
var registration = $('label.label').filter(function() {
return $(this).text().trim() === 'Registration status & expiry date:';
}).next().text().trim();
return {
rego,
vehicle,
stolen,
registration
};
}
|
В конечном итоге система оказалась способна распознавать номера автомобилей с достаточно высокой точностью:
Тэйт Браун признаёт, что система, которую хотят создать власти, намного сложнее, чем придумал он. В частности, много денег придется потратить на хранение данных и обучение алгоритмов для повышения точности распознавания. Тем не менее, Браун полагает, что сумма в 70 миллионов сильно завышена.
Источник: Medium
Комментариев нет:
Отправить комментарий