avatar habrahabr_full

Хабрахабр без ката



подробнее...

Следить за персональным блогом

Автоматизированная система Промышленная безопасность и охрана труда

Обновления главной ленты блогов
Вконтакте Facebook Twitter RSS Почта Livejournal
Внимание

На нашем портале можно бесплатно публиковать информацию о своей компании, размещать товары и услуги и цены на них.
Ведите свой личный или корпоративный блог и его ежедневно увидят 30 тысяч посетителей нашего сайта.

21 мая 2014, 03:10

Распознавание номеров: от А до 9. Часть 3


Неделю назад мы опубликовали статью про открытый сервере для распознавания изображений автомобильных номеров. Теперь, как и обещали, статья про то, как отправлять на него свои фотографии с номерами. Наша цель была, как вы помните, вовсе не ругаться друг на друга неприличными словами, а именно сделать функционирующий сервер в интернете, который справляется с фотографиями и отправляет назад результат распознавания.

Распознавание номеров: от А до 9. Часть 3
(часть фотографий, присланных в течение недели)


Хочется рассказать еще и о том, как мы — программисты, ворочающие нос от интернет технологий и Linux, — решали проблему с сервером.
Все мысли по поводу настоящего шумного компьютера под ухом, протягивание кабеля на кухню и переговоров с провайдером про реальный IP, были отброшены, как не соответствующие новым реалиям (со всех сторон только и говорят про облачные сервисы и прочие новинки). Но еще хотелось удобства, привычного Windows, dotNET, да и вообще возможности по-живому отлаживаться на сервере. Посему было решено: виртуальный сервер с Windows Server и удаленный рабочий стол.
Хочу передать огромное спасибо терпеливым и вежливым парням в техподдержке! Так что справились.

Распознавание номеров: от А до 9. Часть 3
Да-да, вот так все просто выглядит. Это принтскрин с удаленного доступа к виртуальному серверу (да не сочтите это рекламой 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 (возможно, тоже из интернета).

Удачи


Вообще, алгоритм обучался на очень грязных зимних номерах (и парадоксально не всегда устойчиво работает на чистых), поэтому тут то его преимущества и стоит поискать. И да, действительно, часто размытые и весьма грязные номера удавалось распознать:
Распознавание номеров: от А до 9. Часть 3
Распознавание номеров: от А до 9. Часть 3
Распознавание номеров: от А до 9. Часть 3

Ссылки:
Часть 1
Часть 2
Обновленные исходники Android-проекта

Update:
1) Оказывается, обученный каскад нами на российские автомобильные номера был замержин в основную версию OpenCV
2) при предварительном выделении номера ожидали картинки довольно больших размеров в uploadimage, сейчас поправил, все приводится к одному масштабу. Должно заработать и на мелких картинках из интернета.

Источник: http://habrahabr.ru/post/223441/

  • Видео обзор Acer Android


Другие новости по теме:


Новости по теме

19 января 2015 г., 22:09:03 Lenovo Vibe Band VB10 оснащен изогнутым дисплеем

Китайский производитель мобильной электроники Lenovo анонсировал Vibe Band VB10 – защищенный браслет с функциями фитнес-трекера и SmartWatch (компаньона смартфона). Модель получила экономичный дисплей E-Ink, изогнутый «по руке» и, вопреки обычной...

19 января 2015 г., 21:51:35 HTC

Как ожидается, уже в скором времени компания HTC представит свой новый флагманский смартфон. Устройство получило кодовое название M9, а его официальный релиз должен состояться 1 марта в рамках проведения выставки Mobile World Congress 2015. Пока...

19 января 2015 г., 21:47:58 Import-Stats-for-Lumia-535-In-India

Агрессивная, но продуманная политика продвижения данной модели на индийском рынке начала приносить первые ощутимые плоды. За месяц с хвостиком, прошедший с момента начала продаж новинки в данном регионе, с заводов в Китае было отгружено порядка...

19 января 2015 г., 21:46:37 Cree-3

Ассортимент осветительного оборудования, которым можно управлять при помощи мобильных устройств, пополнился еще одним продуктом. На этот раз это лампа Connected Cree LED Bulb от компании Cree, способная взаимодействовать со смартфонами посредством...

19 января 2015 г., 21:46:15 ISIS Softcard

Представленный в прошлом году сервис Apple Pay продолжает набирать пользователей. К примеру, Bank of America сообщает об 1,1 миллиона его карт, которые уже подключены к «яблочному» сервису мобильных платежей. К тому же эта цифра якобы быстро растет....

19 января 2015 г., 18:52:08 Мессенджер от МТС

Согласно газете “Ведомости”, российский оператор сотовой связи МТС готовит мобильный мессенджер RSC. По замыслу создателей, программа станет альтернативой Skype и Viber. Согласно словам пресс-секретаря российского оператора Дмитрий Солодовникова,...

19 января 2015 г., 18:50:26 Portal

Настало время еще раз вспомнить обо всех самых крутых мобильных играх прошлого года. На этот раз мы собрали их аж три десятка. В подборке содержатся игры самых разных жанров, есть как платные, так и бесплатные приложения, а порядок их не имеет...

19 января 2015 г., 18:36:28 screen-shot-2015-01-16-at-21-34-23

Можно с большой долей уверенности сказать, что конкуренция на рынке мобильных платежей продолжает расти, и, похоже, компания Google ищет все возможные варианты усиления своих позиций в этом сегменте. Как сообщает ресурс TechCrunch в настоящее время...

19 января 2015 г., 18:32:22 OLYMPUS DIGITAL CAMERA

Уже несколько месяцев я использую Samsung Galaxy Note 4 в качестве основного смартфона в паре с iPhone 5s. Двумя смартфонами я пользуюсь давно (один — на Android, другой — на iOS), потому что у каждого есть свои плюсы и минусы, для каждого выходит...

19 января 2015 г., 18:27:50 Android не сдаст лидерских позиций еще как минимум два года

Однако из самых авторитетных исследовательских компаний Gartner, представила свой двухлетний прогноз относительно развития рынка компьютеров, планшетов и смартфонов. Специалисты компании убеждены, что 2014 год стал последним годом, демонстрирующим...

19 января 2015 г., 18:24:10 Приглашение HTC на MWC 2015

Компания HTC уже вовсю ведет подготовку к мартовской выставке MWC 2015. Тайваньский производитель замысловато пригласил журналистов на мероприятие, на котором, по информации ведущих зарубежных СМИ, HTC может представить новый флагман и «умные»...

19 января 2015 г., 18:23:21 01-Apple-CES-15-Years

На ai появилась очень интересная статья об истории успеха Apple и том, как она в течение последних 15 лет умудрялась перетащить на себя львиную долю внимания даже во время выставки потребительской электроники CES, в которой при этом не принимала...

19 января 2015 г., 18:22:17 htc event

В последнее время мы многое слышим о будущем флагманском смартфоне от HTC. И вот компания разослала приглашения (картинка выше кликабельна) на мероприятие для прессы, которое пройдет в рамках выставки MWC 2015 1 марта. Ожидается, что там как раз...

19 января 2015 г., 18:22:05 Pipo W3F

Китайский производитель планшетов, компания Pipo, которая известна своими неплохими бюджетными «таблетками», представила новый Windows-планшет с Full HD дисплеем, процессором Intel Atom Bay Trail и подключаемой клавиатурной частью, которая превращает...

19 января 2015 г., 18:19:58

До конца июня 2015 года компания МТС обещает запустить собственный аналог мессенджера для смартфонов, который будет работать на основе технологии Rich Communication Services (RCS). Сначала он будет доступен только москвичам. Сообщения, голосовые...


Обзоры по теме

28 января 2015 г., 1:04:10 Google Nexus 6

9 User Rating: Be the first one! ...

27 января 2015 г., 23:04:56 Обзор Huawei Ascend G6

3.5 User Rating: Be the first one!...

27 января 2015 г., 22:53:41

10 User Rating: Be the first one!...

27 января 2015 г., 22:25:07 Обзор Meizu MX4

Meizu долгое время ассоциировалось с подражателем техники Apple. Первые модели ее смартфонов были очевидно скопированы с iPhone, однако чем дольше компания присутствует на рынке, тем менее солидно становится заимствовать чужие идеи. Теперь, вместо бездумного копирования, инженеры и программисты Meizu...

24 января 2015 г., 20:41:38

Достоинства: *удобный в использовании, доступная цена, красивый дизайн, наличие всех необходимых функций Недостатки: возможны зависания, камера низкого качества Кому не известна ситуация борьбы за трон у компьютера? Да уж, наверно мало кому. Наша семья нашла выход в этой ситуации, купив планшет 3Q Surf QS1023H. Данная...

24 января 2015 г., 17:51:51 Windows-10-January-Technical-Preview-1

Microsoft раньше обещанного срока выложила на сайте обновленную тестовую версию Windows 10 (January Technical Preview). Предполагалось, что релиз сборки состоится на следующей неделе. Новая Windows 10 Technical Preview доступна на 25 языках (включая русский) в 32-битной и 64-битной конфигурациях. Windows...

24 января 2015 г., 10:16:57 Дорогой снаружи, скромный изнутри: обзор фаблета Huawei Ascend G7

7 Дорогой снаружи, скромный изнутри: обзор фаблета Huawei Ascend G7 Осенью 2014-го на берлинской выставке IFA был анонсирован интересный аппарат, на фоне Ascend Mate7 не привлекший большого внимания. Выполненный по флагманским канонам, «планшетофон»...

24 января 2015 г., 0:54:09 Win10_Windows_StartScreen2_Print1

Раньше, чем ожидалось, компания Microsoft выложила новый тестовый билд операционной системы Windows 10, который включает в себя ряд нововведений, анонсированных ранее на этой неделе. К сожалению, в этой версии Technical Preview пока нет нового браузер Spartan, а также приложения Xbox One. Тем не менее,...

23 января 2015 г., 18:30:56 Обзоры / Обзор ZTE Star 1: тонкий стеклянный смартфон

В последнее время производители смартфонов из Китая стали уделять больше внимания своей продукции, работая не только над улучшением начинки, но и стараясь порадовать пользователя дизайном. ZTE Star 1 в конце прошлого года был представлен на суд российской аудитории. Успех среди операторской продукции,...

23 января 2015 г., 13:18:20

Смартфоны Lenovo серии Vibe Z2 - 5,5-дюймовая модель и 6-дюймовая Z2 Pro - представляют собой продолжение флагманской линейки Z. Оба наследуют дизайн некогда успешного K900: угловатый корпус, качественный металл, акцент на камере в оформлении задней панели. И конечно же, высокая производительность и...


Инструкции по теме

2 февраля 2015 г., 12:51:14 Обновляемая прошивка для HTC HD2. Windows Phone 7

Да, до этого уже неоднократно собирали прошивки на базе WP7 для HTC HD2… но тут другое! Теперь, появилась возможность прошить базовую версию прошивки (7004) и удобно обновляться через Zune! Правда, разработчики советуют предварительно сверяться с форумом о совместимости нового обновления с HTC HD2. Во-первых,...

2 февраля 2015 г., 0:03:43 image

В прошлую пятницу BSH Bosch und Siemens Hausgerate объявили о создании приложения, которое сможет контролировать все бытовые приборы в доме. Его название Home Connect, а отличительной особенностью станет то, что оно сможет контролировать приборы разных брендов и компаний. Bosch сказали, что данное приложение...

1 февраля 2015 г., 22:33:17 Официальная прошивка Android 2.3.4 для Texet TM-7025

Вышла новая официальная прошивка для планшета Texet TM-7025 с Android 2.3.4. Установка стандартная, ничего особенного. Можете в комментариях не писать почему я выкладываю такое старье, если есть официальная с Андроидом на 4.0.3, дело в том что у нее куча багов, вроде тормозов и зависаний. Поэтому рекомендую...

1 февраля 2015 г., 19:41:50 Модем YOTA, настройки DHCP.

Модем YOTA на сегодняшний день самое популярное и доступное устройство, работающее в сети LTE компании YOTA. Модем достаточно прост в использовании, но имеет некоторые особенности работы. Прежде всего информация будет полезна владельцам Модема YOTA. Технические характеристики Модема YOTA (lu150, lu156,Swift...

1 февраля 2015 г., 15:27:21 Тест AnTuTu Benchmark

Со времени написания прошлого обзора прошивок для Jiayu G2 ("Прошивка Jiayu G2 (обзор прошивок, инструкция по прошивке Jiayu G2)") прошло много времени.. И за это время появилось 2 отличных прошивки - посмотрим, что они из себя представляют. Android 4.2.2 для Jiayu G2 Долгожданный порт Android 2.2...

1 февраля 2015 г., 15:26:13 Root на Huawei Ascend P1 LTE

Совсем недавно был опубликован обзор на смартфон Huawei Ascend P1 LTE. В этой статье будут описаны моменты, больше интересные для владельцев данного устройства. Будет описано, как поменять местами внутреннюю и внешнюю память, как получить root доступ, выполнить прошивку и многое другое. Прошивка Huawei...

1 февраля 2015 г., 15:24:51 FAQ для владельцев Мини-PC

Я являюсь счастливым обладателем Мини-PC MK809 III, и поначалу вопросов по его эксплуатации возникало огромное количество: как обновить прошивку, чем управлять, как подключать периферийные устройства, какие приложения поставить и т.д. В данной статье я постараюсь описать наколенный опыт, чтобы им могли...

1 февраля 2015 г., 15:23:40 Yota Many не работает

С появления в продаже Yota Many прошло уже много времени, у устройства появилось множество поклонников, которые ежедневно используют Yota Many для доступа к сети Интернет. Но вместе с ростом количества пользователей растёт и количество вопросов, связанных с эксплуатацией устройства. В этой статье я постараюсь...

1 февраля 2015 г., 0:45:00 Asus Eee Pad Transformer TF300

Asus Eee Pad Transformer TF300 Инструкция о том как прошить планшет трансформер Asus Eee Pad Transformer TF300 на новую прошивку. Установка официального обновления на Asus Eee Pad Transformer TF300 1. Узнайте территориальную принадлежность Вашего планшета (SKU). Зайдите в «Настройки» > «О планшетном...

31 января 2015 г., 23:42:53

На днях OnePlus опубликовала тизер с изображением периодической таблицы, который многие приняли за намек на выпуск металлической крышки для флагмана компании. Эта версия действительно казалась вполне правдоподобной, однако, судя по следующему изображению, размещенному представителями бренда, речь идет...