вторник, 10 февраля 2015 г.

0. Распознавание цифр на изображении при помощи opencv JAVA. Вступление

В ближайшем будущем постараюсь найти время и допилить свою разработку по машинному обучению. Она разрабатывалась для определения номера железнодорожного вагона при помощи камеры.Разработка велась на java в среде netbeans 7.1.
Необходимость в данной разработке отпала когда я увидел вагоны зимой. Номер у сугроба на колесах ни одна камера не распознает.....

В пакете opencv очень много уже обученных классификаторов, например:
1. Определение российских автомобильных номеров (haarcascade_russian_plate_number.xml)
2. Фронтальное определение лица (haarcascade_frontalface_alt.xml)
3. Профильное определение лица (haarcascade_profileface.xml)
4. Определение улыбки (haarcascade_smile.xml)
5. Многие другие. (список классификаторов можно посмотреть в папке <путь до opencv>\sources\data)

Также опубликую посты по машинному обучению.
Идея такова:
1. При помощи классификатора  KNearest обучить программу определению цифр.
2. При помощи каскада Хаара обучить программу определять местонахождение определенных цифр (в данном случае необходимо "обьяснить" программе где на вагоне должны находиться номера вагонов, какие у них отличительные признаки).
3. Объединить алгоритмы, получив окончательную программу поиска номеров на вагонах.

Описание работы будет достаточно большое, поэтому планирую разбить посты на следующие части:
1. Установка и настройка opencv.
2. Тестируем возможности opencv на обученном каскаде.
3. Процедура обучения классификатора KNearest classifiers.
4. Использование классификатора KNearest classifiers.(через консоль)
5. Использование классификатора KNearest classifiers.(через форму) (реализовано не до конца)

7. Процедура обучения каскада Хаара. (не реализовано, не хватает примеров)
8. Использование каскада Хаара на собственноручно обученном примере.
9. Объединение алгоритмов.

среда, 4 февраля 2015 г.

Обработка исключительных ситуаций, коды ошибок



В PL/SQL ошибки при выполнении программы вызывают исключения (exception). Исключения могут быть системные и определенные пользователем.
Обработка исключения может быть определена в любой части pl/sql блока.
Когда происходит ошибка вызывается исключение  (командой raise). При этом нормальное выполнение кода прекращается, контроль над программой переходит к обработчику исключительной ситуации определенном в блоке с ошибкой.
Системные ошибки вызываются автоматически, команда raise для них не нужна.
Для примера:
 
declare

   d   number;

   v   varchar2 (100);

begin

   v := 'Нормальное выполнение';

   begin                                         ---Начало блока с исключением

      d := 1 / 0;

   exception

      when zero_divide

      then

         v := ('Ошибка. При вычислениях произошло деление на ноль');

      when others

      then

         begin                                               -- блок обработки

            v := ('Ошибка' || sqlcode || '      ' || sqlerrm);

         end;                                                               --

   end;                                       --окончание и исключения и блока



   dbms_output.put_line (v);


end;


В обработке исключений, как в примере, можно воспользоваться стандартными переменными, содержащие код и описание ошибки SQLCODE,SQLERRM.

Список стандартных исключений

Исключение
Код ошибки
Значение  SQLCODE
ACCESS_INTO_NULL
ORA-06530
-6530
CASE_NOT_FOUND
ORA-06592
-6592

COLLECTION_IS_NULL
ORA-06531
-6531

CURSOR_ALREADY_OPEN
ORA-06511
-6511

DUP_VAL_ON_INDEX
ORA-00001
-1

INVALID_CURSOR
ORA-01001
-1001

INVALID_NUMBER
ORA-01722
-1722

LOGIN_DENIED
ORA-01017
-1017

NO_DATA_FOUND
ORA-01403
+100

NOT_LOGGED_ON
ORA-01012
-1012

PROGRAM_ERROR
ORA-06501
-6501

ROWTYPE_MISMATCH
ORA-06504
-6504

SELF_IS_NULL
ORA-30625
-30625

STORAGE_ERROR
ORA-06500
-6500

SUBSCRIPT_BEYOND_COUNT
ORA-06533
-6533

SUBSCRIPT_OUTSIDE_LIMIT
ORA-06532
-6532

SYS_INVALID_ROWID
ORA-01410
-1410

TIMEOUT_ON_RESOURCE
ORA-00051
-51

TOO_MANY_ROWS
ORA-01422
-1422

VALUE_ERROR
ORA-06502
-6502

ZERO_DIVIDE
ORA-01476
-1476


Кгогда появится вдохновление допишу про определение собственных исключений, вызов и перевызов исключений, переопределение стандартных исключений, перезапуск транзакций при исключениях и другое.