Неделю назад мы опубликовали статью про открытый сервере для распознавания изображений автомобильных номеров. Теперь, как и обещали, статья про то, как отправлять на него свои фотографии с номерами. Наша цель была, как вы помните, вовсе не ругаться друг на друга неприличными словами, а именно сделать функционирующий сервер в интернете, который справляется с фотографиями и отправляет назад результат распознавания.
(часть фотографий, присланных в течение недели)
Хочется рассказать еще и о том, как мы — программисты, ворочающие нос от интернет технологий и Linux, — решали проблему с сервером.
Все мысли по поводу настоящего шумного компьютера под ухом, протягивание кабеля на кухню и переговоров с провайдером про реальный IP, были отброшены, как не соответствующие новым реалиям (со всех сторон только и говорят про облачные сервисы и прочие новинки). Но еще хотелось удобства, привычного Windows, dotNET, да и вообще возможности по-живому отлаживаться на сервере. Посему было решено: виртуальный сервер с Windows Server и удаленный рабочий стол.
Хочу передать огромное спасибо терпеливым и вежливым парням в техподдержке! Так что справились. 
Да-да, вот так все просто выглядит. Это принтскрин с удаленного доступа к виртуальному серверу (да не сочтите это рекламой Windows Server 2012 R2).
Затем надо было написать http ответчик. Хотелось как можно проще и не связываться с IIS, нужно было уложиться в пару дней на разработку. Но оказалось очень просто скачать пример SimpleHttpServer и в функцию:
public override void handlePOSTRequest(HttpProcessor p, StreamReader inputData) { Console.WriteLine("POST request: {0}", p.http_url); string data = inputData.ReadToEnd(); p.outputStream.WriteLine("<html><body><h1>test server</h1>"); p.outputStream.WriteLine("<a href=/test>return</a><p>"); p.outputStream.WriteLine("postbody: <pre>{0}</pre>", data); }
вписывать нужную обработку. Надеюсь, мы не нарушили никакой лицензии.
А тем специалистам Web безопасности, у которых сейчас на спине зашевелились волосы от такой реализации… огромный привет и приглашение сделать нам все по умному!
Доступ к серверу
Сервер распознавания работает, как очень простой http сайт. Пользователь отправляет на страницу post-сообщение в формате http, в котором содержится лишь один параметр — изображение. В ответ получает результат распознавания.
Для запроса из БД, если в этом есть необходимость, нужно отправить 2 строки: автомобильный номер в текстовом виде и уникальный ID.
В Android программе было 3 запроса, их код выглядит следующим образом:
1) отправка предварительно выделенного номера серверу:
HttpClient httpclient = new DefaultHttpClient(); final HttpParams httpParameters = httpclient.getParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, 10 * 1000); HttpConnectionParams.setSoTimeout (httpParameters, 10 * 1000); //Создаём Http запрос и прилагаем к нему файл изображения HttpPost httppost = new HttpPost("http://193.138.232.71:10000/result"); InputStreamEntity reqEntity; httppost.setEntity(new FileEntity(new File(FileName), "application/octet-stream")); //Получаем ответ от сервера try { HttpResponse response = httpclient.execute(httppost); HttpEntity responseEntity = response.getEntity(); ans = EntityUtils.toString(responseEntity); String[] strs=ans.split("rn"); if(strs.length>2) { ans=strs[0]; //Получаемый от сервера распознанный номер timesWas=Integer.parseInt(strs[1]); //Сколько раз он встречался в базе ID=strs[2]; //Унакальный ID текущей операции } } catch (ClientProtocolException e) { e.printStackTrace(); ans = "NOT CONNECT"; } catch (IOException e) { e.printStackTrace(); ans = "NOT CONNECT"; }
2) отправка запроса по номеру:
HttpClient httpclient = new DefaultHttpClient();
final HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 10 * 1000);
HttpConnectionParams.setSoTimeout (httpParameters, 10 * 1000);
HttpPost httppost = new HttpPost("http://193.138.232.71:10000/checkplate");
InputStreamEntity reqEntity;
try {
httppost.setEntity(new StringEntity( editText1.getText().toString()+"rn"+ID));
HttpResponse resp = httpclient.execute(httppost);
HttpEntity ent = resp.getEntity();
String ans = EntityUtils.toString(ent);
timesWas=Integer.parseInt(ans);
textView.setText("Уже обозвали раз: "+Integer.toString(timesWas));
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
e.printStackTrace();
}
3) «ругань» на номер:
HttpClient httpclient = new DefaultHttpClient();
final HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 10 * 1000);
HttpConnectionParams.setSoTimeout (httpParameters, 10 * 1000);
HttpPost httppost = new HttpPost("http://193.138.232.71:10000/swear");
InputStreamEntity reqEntity;
try {
httppost.setEntity(new StringEntity( editText1.getText().toString()));
HttpResponse resp = httpclient.execute(httppost);
HttpEntity ent = resp.getEntity();
String ans = EntityUtils.toString(ent);
textView.setText("Обозван");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
e.printStackTrace();
}
По-моему, комментировать тут особенно нечего. HttpPost файла и HttpPost двух текстовых строк.
Не забывайте, что в условиях использования мобильного интернета, приходится отправлять область с предварительно обнаружнным номером с помощью каскадного детектора Хаара.
Пример кода выделения Хааром с помощью OpenCV на Android Java:
//Детектирование каскадом Хаара номера
if (mJavaDetector != null)
mJavaDetector.detectMultiScale(temp, faces, 1.1, 10, 5,
new Size(70, 21), new Size(500,150));
//Если нашлось
Rect[] facesArray = faces.toArray();
for (int i = 0; i < facesArray.length; i++)
{
DetectedNum = new Mat();
IsNumDetected=true;
//Новая рамка с чуть большими границами
int dW=facesArra[i].width/5; // расширяем рамку по X на 20%
int dH=facesArray[i].height*3/10; //по Y на 30%
int left = Math.max(facesArray[i].x-dW/2,0);
int top = Math.max(facesArray[i].y-dH/2,0);
int right = facesArray[i].x+facesArray[i].width+dW/2; if(right>temp.width())right=temp.width()-1;
int bottom = facesArray[i].y+facesArray[i].height+dH/2; if(bottom>temp.height())bottom=temp.height()-1;
//Отправка на сервер данного куска
DetectedNum = temp.submat(BiggerRect).clone();
}
Здесь заметьте важную мелочь: после детектирования прямоугольника номера его границы несколько расширяются, т. к. детектор с некоторой вероятностью может ошибаться с масштабом.
И по просьбе трудящихся добавили http заход на функцию поиска и распознавания номера в целом кадре: 193.138.232.71:10000/uploadimage
В ответ получите список найденных номеров и некий критерий качества распознавания по каждому (больше — лучше):
x000xx99 90%
a111aa197 75%
строки разделены "rn"
Найдено 2 номера, первый более качественный (90%), второй менее (75%).
Теперь можно не выделять хааром изображение, а сразу все изображение отправлять целиком. Так проще организовать автоматическое тестирование алгоритмов.
На других платформах код должен получаться не намного сложнее.
Несколько слов о трех днях полета сервера распознавания номеров
Программу на Android для ругани на автомобили Recognitor мы выложили 13 мая. У меня чувства смешанные: от гордости от того, что оно работает, до сжигающего стыда за случающиеся ошибки в алгоритме распознавания, когда прямо на глазах приходит чистый четкий номер, но пользователю возвращается абракадабра.
Количество отправленных на сервер изображений: 1700
Из них оказалось номерами РФ: 1370
Количество распознанных: 830
(с точностью до 10ти указано)
Вот тут стоит отдельно пояснить «из них оказалось номерами РФ». Мы не учли, что хабр хорошо читают на территории СНГ и нигде не указали, что номера должны быть РФ. Естественно, сюда же относятся и ошибки не идеально обученного каскадного детектора, который часто ошибался в непривычной ситуации съемки с монитора. И было несколько десятков зеркально отраженных номеров, т. е. пользователь не выбрал в меню “Flip”. Также ну очень сильно размазанные (не читаемые глазами) я тоже отнес сюда.
В промежуточном итоге результат не фантастический, мы сделали выводы, уже выпустили 2 обновления Android программы, поправив косяки и дав пользователю новую волшебную функцию выделения области номера пальцем. Изменили алгоритмы на сервере. О том, что интересного мы поменяли в самих алгоритмах, в моей следующей статье (воспользовались парой альтернативных методов из предыдущей моей статьи).
Но, не смотря на не идеальную работу, пользователям приложение пришлось по душе! Оценки в GooglePlay радовали.
И да, конечно, поощрим бесспорных победителей:
P494KE_197 — обозван 226 раз (конечно, это ZlodeiBaal)
X777XX_77 – обозван 21 раз (в топе запроса яндекса на запрос «номера»)
Даже поймали A362MP_97, А231МР_97 и А869МР_97 (возможно, тоже из интернета).
Удачи
Вообще, алгоритм обучался на очень грязных зимних номерах (и парадоксально не всегда устойчиво работает на чистых), поэтому тут то его преимущества и стоит поискать. И да, действительно, часто размытые и весьма грязные номера удавалось распознать:


Ссылки:
Часть 1
Часть 2
Обновленные исходники Android-проекта
Update:
1) Оказывается, обученный каскад нами на российские автомобильные номера был замержин в основную версию OpenCV
2) при предварительном выделении номера ожидали картинки довольно больших размеров в uploadimage, сейчас поправил, все приводится к одному масштабу. Должно заработать и на мелких картинках из интернета.
Источник: http://habrahabr.ru/post/223441/
Видео обзор Acer Android
Другие новости по теме:
Новости по теме
Фитнес-браслет и SmartWatch Vibe Band VB10 с E-Ink дисплеем19 января 2015 г., 22:09:03
Китайский производитель мобильной электроники Lenovo анонсировал Vibe Band VB10 – защищенный браслет с функциями фитнес-трекера и SmartWatch (компаньона смартфона). Модель получила экономичный дисплей E-Ink, изогнутый «по руке» и, вопреки обычной... |
В марте HTC представит смартфон M9 и собственные умные часы19 января 2015 г., 21:51:35
Как ожидается, уже в скором времени компания HTC представит свой новый флагманский смартфон. Устройство получило кодовое название M9, а его официальный релиз должен состояться 1 марта в рамках проведения выставки Mobile World Congress 2015. Пока... |
Объем поставок Lumia 535 в Индию превысил полмиллиона единиц19 января 2015 г., 21:47:58
Агрессивная, но продуманная политика продвижения данной модели на индийском рынке начала приносить первые ощутимые плоды. За месяц с хвостиком, прошедший с момента начала продаж новинки в данном регионе, с заводов в Китае было отгружено порядка... |
Connected Cree LED Bulb. Смарт-лампа, управляемая при помощи iPhone19 января 2015 г., 21:46:37
Ассортимент осветительного оборудования, которым можно управлять при помощи мобильных устройств, пополнился еще одним продуктом. На этот раз это лампа Connected Cree LED Bulb от компании Cree, способная взаимодействовать со смартфонами посредством... |
Google, возможно, хочет купить еще один сервис мобильных платежей19 января 2015 г., 21:46:15
Представленный в прошлом году сервис Apple Pay продолжает набирать пользователей. К примеру, Bank of America сообщает об 1,1 миллиона его карт, которые уже подключены к «яблочному» сервису мобильных платежей. К тому же эта цифра якобы быстро растет.... |
МТС планирует создать аналог Skype и Viber19 января 2015 г., 18:52:08
Согласно газете “Ведомости”, российский оператор сотовой связи МТС готовит мобильный мессенджер RSC. По замыслу создателей, программа станет альтернативой Skype и Viber. Согласно словам пресс-секретаря российского оператора Дмитрий Солодовникова,... |
30 лучших игр для Android и iOS, которые вышли в 2014 году19 января 2015 г., 18:50:26
Настало время еще раз вспомнить обо всех самых крутых мобильных играх прошлого года. На этот раз мы собрали их аж три десятка. В подборке содержатся игры самых разных жанров, есть как платные, так и бесплатные приложения, а порядок их не имеет... |
Google приписывают намерение купить сервис мобильных платежей Softcard19 января 2015 г., 18:36:28
Можно с большой долей уверенности сказать, что конкуренция на рынке мобильных платежей продолжает расти, и, похоже, компания Google ищет все возможные варианты усиления своих позиций в этом сегменте. Как сообщает ресурс TechCrunch в настоящее время... |
Опыт эксплуатации Samsung Galaxy Note 419 января 2015 г., 18:32:22
Уже несколько месяцев я использую Samsung Galaxy Note 4 в качестве основного смартфона в паре с iPhone 5s. Двумя смартфонами я пользуюсь давно (один — на Android, другой — на iOS), потому что у каждого есть свои плюсы и минусы, для каждого выходит... |
Android не сдаст лидерских позиций еще как минимум два года19 января 2015 г., 18:27:50
Однако из самых авторитетных исследовательских компаний Gartner, представила свой двухлетний прогноз относительно развития рынка компьютеров, планшетов и смартфонов. Специалисты компании убеждены, что 2014 год стал последним годом, демонстрирующим... |
HTC покажет смартфон M9 и смарт-часы на MWC 201519 января 2015 г., 18:24:10
Компания HTC уже вовсю ведет подготовку к мартовской выставке MWC 2015. Тайваньский производитель замысловато пригласил журналистов на мероприятие, на котором, по информации ведущих зарубежных СМИ, HTC может представить новый флагман и «умные»... |
15-летняя история доминирования Apple на CES и в индустрии19 января 2015 г., 18:23:21
На ai появилась очень интересная статья об истории успеха Apple и том, как она в течение последних 15 лет умудрялась перетащить на себя львиную долю внимания даже во время выставки потребительской электроники CES, в которой при этом не принимала... |
HTC разослала приглашения на пресс-конференцию MWC 2015, где может представить HTC One (M9)19 января 2015 г., 18:22:17
В последнее время мы многое слышим о будущем флагманском смартфоне от HTC. И вот компания разослала приглашения (картинка выше кликабельна) на мероприятие для прессы, которое пройдет в рамках выставки MWC 2015 1 марта. Ожидается, что там как раз... |
Pipo W3F: Windows-планшет 2-в-1 с чипом Bay Trail за $19019 января 2015 г., 18:22:05
Китайский производитель планшетов, компания Pipo, которая известна своими неплохими бюджетными «таблетками», представила новый Windows-планшет с Full HD дисплеем, процессором Intel Atom Bay Trail и подключаемой клавиатурной частью, которая превращает... |
МТС запускает собственный интернет-мессенджер19 января 2015 г., 18:19:58До конца июня 2015 года компания МТС обещает запустить собственный аналог мессенджера для смартфонов, который будет работать на основе технологии Rich Communication Services (RCS). Сначала он будет доступен только москвичам. Сообщения, голосовые... |
Обзоры по теме
Google Nexus 6. Обзор28 января 2015 г., 1:04:10
9 User Rating: Be the first one! ... |
Обзор Huawei Ascend G627 января 2015 г., 23:04:56
3.5 User Rating: Be the first one!... |
Google Nexus 5. Обзор27 января 2015 г., 22:53:4110 User Rating: Be the first one!... |
Обзор Meizu MX4 — смартфон для тех, кто любит смартфоны27 января 2015 г., 22:25:07
Meizu долгое время ассоциировалось с подражателем техники Apple. Первые модели ее смартфонов были очевидно скопированы с iPhone, однако чем дольше компания присутствует на рынке, тем менее солидно становится заимствовать чужие идеи. Теперь, вместо бездумного копирования, инженеры и программисты Meizu... |
3Q Surf QS1023H : Обзор планшета 3Q Surf QS1023H. Фото планшета, примеры фото камер планшета, а также видео звука.24 января 2015 г., 20:41:38Достоинства: *удобный в использовании, доступная цена, красивый дизайн, наличие всех необходимых функций Недостатки: возможны зависания, камера низкого качества Кому не известна ситуация борьбы за трон у компьютера? Да уж, наверно мало кому. Наша семья нашла выход в этой ситуации, купив планшет 3Q Surf QS1023H. Данная... |
Microsoft выпустила новую версию Windows 10 Technical Preview с обновленным интерфейсом и поддержкой Cortana24 января 2015 г., 17:51:51
Microsoft раньше обещанного срока выложила на сайте обновленную тестовую версию Windows 10 (January Technical Preview). Предполагалось, что релиз сборки состоится на следующей неделе. Новая Windows 10 Technical Preview доступна на 25 языках (включая русский) в 32-битной и 64-битной конфигурациях. Windows... |
Дорогой снаружи, скромный изнутри: обзор фаблета Huawei Ascend G724 января 2015 г., 10:16:57
7 Дорогой снаружи, скромный изнутри: обзор фаблета Huawei Ascend G7 Осенью 2014-го на берлинской выставке IFA был анонсирован интересный аппарат, на фоне Ascend Mate7 не привлекший большого внимания. Выполненный по флагманским канонам, «планшетофон»... |
Microsoft выложила новую версию Windows 10 Technical Preview с обновленным интерфейсом и Cortana24 января 2015 г., 0:54:09
Раньше, чем ожидалось, компания Microsoft выложила новый тестовый билд операционной системы Windows 10, который включает в себя ряд нововведений, анонсированных ранее на этой неделе. К сожалению, в этой версии Technical Preview пока нет нового браузер Spartan, а также приложения Xbox One. Тем не менее,... |
Обзоры / Обзор ZTE Star 1: тонкий стеклянный смартфон23 января 2015 г., 18:30:56
В последнее время производители смартфонов из Китая стали уделять больше внимания своей продукции, работая не только над улучшением начинки, но и стараясь порадовать пользователя дизайном. ZTE Star 1 в конце прошлого года был представлен на суд российской аудитории. Успех среди операторской продукции,... |
Новый средний класс: обзор смартфона Lenovo Vibe Z223 января 2015 г., 13:18:20Смартфоны Lenovo серии Vibe Z2 - 5,5-дюймовая модель и 6-дюймовая Z2 Pro - представляют собой продолжение флагманской линейки Z. Оба наследуют дизайн некогда успешного K900: угловатый корпус, качественный металл, акцент на камере в оформлении задней панели. И конечно же, высокая производительность и... |
Инструкции по теме
Обновляемая прошивка для HTC HD2. Windows Phone 72 февраля 2015 г., 12:51:14
Да, до этого уже неоднократно собирали прошивки на базе WP7 для HTC HD2… но тут другое! Теперь, появилась возможность прошить базовую версию прошивки (7004) и удобно обновляться через Zune! Правда, разработчики советуют предварительно сверяться с форумом о совместимости нового обновления с HTC HD2. Во-первых,... |
[recovery mode] Home Connect — одно приложение для всех брендов2 февраля 2015 г., 0:03:43
В прошлую пятницу BSH Bosch und Siemens Hausgerate объявили о создании приложения, которое сможет контролировать все бытовые приборы в доме. Его название Home Connect, а отличительной особенностью станет то, что оно сможет контролировать приборы разных брендов и компаний. Bosch сказали, что данное приложение... |
Официальная прошивка Android 2.3.4 для Texet TM-70251 февраля 2015 г., 22:33:17
Вышла новая официальная прошивка для планшета Texet TM-7025 с Android 2.3.4. Установка стандартная, ничего особенного. Можете в комментариях не писать почему я выкладываю такое старье, если есть официальная с Андроидом на 4.0.3, дело в том что у нее куча багов, вроде тормозов и зависаний. Поэтому рекомендую... |
Модем YOTA - lu150/lu156,Swift (WLTUBA-107). Характеристики, установка, настройка, особенности работы1 февраля 2015 г., 19:41:50
Модем YOTA на сегодняшний день самое популярное и доступное устройство, работающее в сети LTE компании YOTA. Модем достаточно прост в использовании, но имеет некоторые особенности работы. Прежде всего информация будет полезна владельцам Модема YOTA. Технические характеристики Модема YOTA (lu150, lu156,Swift... |
Ещё 2 прошивки для Jiayu G21 февраля 2015 г., 15:27:21
Со времени написания прошлого обзора прошивок для Jiayu G2 ("Прошивка Jiayu G2 (обзор прошивок, инструкция по прошивке Jiayu G2)") прошло много времени.. И за это время появилось 2 отличных прошивки - посмотрим, что они из себя представляют. Android 4.2.2 для Jiayu G2 Долгожданный порт Android 2.2... |
FAQ по Huawei Ascend P1 LTE (root, прошивка, настройка LTE)1 февраля 2015 г., 15:26:13
Совсем недавно был опубликован обзор на смартфон Huawei Ascend P1 LTE. В этой статье будут описаны моменты, больше интересные для владельцев данного устройства. Будет описано, как поменять местами внутреннюю и внешнюю память, как получить root доступ, выполнить прошивку и многое другое. Прошивка Huawei... |
FAQ для владельцев Мини-PC на Android на примере MK809 III1 февраля 2015 г., 15:24:51
Я являюсь счастливым обладателем Мини-PC MK809 III, и поначалу вопросов по его эксплуатации возникало огромное количество: как обновить прошивку, чем управлять, как подключать периферийные устройства, какие приложения поставить и т.д. В данной статье я постараюсь описать наколенный опыт, чтобы им могли... |
FAQ для пользователей Yota Many (инструкция, прошивка, решение проблем)1 февраля 2015 г., 15:23:40
С появления в продаже Yota Many прошло уже много времени, у устройства появилось множество поклонников, которые ежедневно используют Yota Many для доступа к сети Интернет. Но вместе с ростом количества пользователей растёт и количество вопросов, связанных с эксплуатацией устройства. В этой статье я постараюсь... |
Прошивка, Root, разблокировка загрузчика Asus Eee Pad Transformer TF3001 февраля 2015 г., 0:45:00
Asus Eee Pad Transformer TF300 Инструкция о том как прошить планшет трансформер Asus Eee Pad Transformer TF300 на новую прошивку. Установка официального обновления на Asus Eee Pad Transformer TF300 1. Узнайте территориальную принадлежность Вашего планшета (SKU). Зайдите в «Настройки» > «О планшетном... |
OnePlus собирается представить прошивку OxygenOS31 января 2015 г., 23:42:53На днях OnePlus опубликовала тизер с изображением периодической таблицы, который многие приняли за намек на выпуск металлической крышки для флагмана компании. Эта версия действительно казалась вполне правдоподобной, однако, судя по следующему изображению, размещенному представителями бренда, речь идет... |
-
Ключевые слова:
- Обработка изображений,
- Облачные вычисления,
- Open source,
- номера,
- распознавание номеров,
- обработка изображений,
- сервер,
- облачные вычисления,
- облачные технологии,
- информационные технологии,
- блог,
- Windows,
- Android
