Система оптичного розпізнавання образів

Огляд інтелектуальних принципів організації процесу розпізнавання символів. Розробка системи безклавіатурного введення документів у комп’ютер. Опис і обґрунтування проектних рішень; розрахунки і експериментальні дані; впровадження системи в експлуатацію.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 07.05.2012
Размер файла 182,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

{ close the DSM and DS. }

if (twPendingXfer.Count = 0)

then CloseConnection(0);

SendMessage(hTmpWnd, PM_XFERDONE, 0, 0);

end;

TWRC_FAILURE: begin

SetCursor(hReady);

{ The transfer failed. }

{ Enhancement: Check Condition Code }

{ and attempt recovery. }

if (MessageLevel >= ML_ERROR)

then ShowRC_CC(hTmpWnd, 1, TWRC_FAILURE, 1,

'',

'DG_IMAGE / DAT_IMAGEMEMXFER / MSG_GET');

twRC2:= lpDSM_Entry(@appID,

@dsID,

DG_CONTROL,

DAT_PENDINGXFERS,

MSG_ENDXFER,

TW_MEMREF(@twPendingXfer));

if (twRC2 <> TWRC_SUCCESS)

then if (MessageLevel >= ML_ERROR)

then ShowRC_CC(hTmpWnd, 1, twRC2, 1,

'',

'DG_CONTROL / DAT_PENDINGXFERS / MSG_ENDXFER');

GlobalUnlock(hbm_acq);

GlobalFree(hbm_acq);

{ close the DSM and DS. }

if (twPendingXfer.Count = 0)

then CloseConnection(0);

SendMessage(hTmpWnd, PM_XFERDONE, 0, 0);

end;

else begin

SetCursor(hReady);

if (MessageLevel >= ML_ERROR)

then ShowRC_CC(hTmpWnd, 0, 0, 0,

'Unknown Return Code',

'DG_IMAGE / DAT_IMAGEMEMXFER / MSG_GET');

{ Abort the image. }

twRC2:= lpDSM_Entry(@appID,

@dsID,

DG_CONTROL,

DAT_PENDINGXFERS,

MSG_ENDXFER,

TW_MEMREF(@twPendingXfer));

if (twRC2 <> TWRC_SUCCESS)

then if (MessageLevel >= ML_ERROR)

then ShowRC_CC(hTmpWnd, 1, twRC2, 1,

'',

'DG_CONTROL / DAT_PENDINGXFERS / MSG_ENDXFER');

GlobalUnlock(hbm_acq);

GlobalFree(hbm_acq);

{ close the DSM and DS. }

if (twPendingXfer.Count = 0)

then CloseConnection(0);

SendMessage(hTmpWnd, PM_XFERDONE, 0, 0);

{ showRC_CC is a safe operation here }

{ since there will be no triplet }

{ calls generated. }

if (MessageLevel >= ML_INFO)

then begin

StrFmt(Buffer, 'Images = %d', [twPendingXfer.Count]);

ShowRC_CC(0, 0, 0, 0, buffer, 'Pending Transfers');

end;

end;

end;

until (twRC <> TWRC_SUCCESS);

end;

end;

end;

until (twPendingXfer.Count = 0);

if (TagAT.ADFRunning = True)

then begin

TagAT.ADFRunning:= False;

ADone:= True;

InvalidateRect(0, Nil, True);

end;

end; { End DoMemTransfer. }

{------------------------------------------------------------------------------}

{ FlipBitMap - Takes a memory transfer buffer and changes it to a DIB

format }

{ i.e. Memory Format }

{ 1 2 3 4 5 }

{ 6 7 8 9 10 }

{ 11 12 13 14 15 }

{ DIB bitmap Format }

{ 11 12 13 14 15 }

{ 6 7 8 9 10 }

{ 1 2 3 4 5 }

{ }

{ Memory RGBQuad order: RGB }

{ Windows DIB RGBQuad order: BGR }

{------------------------------------------------------------------------------}

procedure FlipBitMap(hTmpWnd: hWnd;

hBmp: THandle;

PixType: TW_INT16);

type TLongType = record

case Word of

0: (Ptr: Pointer);

1: (Long: Longint);

2: (Lo: Word;

Hi: Word);

end;

var hBmpT: THandle;

pBmpT: PVectorB;

hBmpB: THandle;

pBmpB: PVectorB;

pDibInfo: PBitmapInfo;

pDib: PVectorB;

Height: longint;

BitCount: word;

Offset: longint;

pixels: TW_UINT16;

items: TW_INT32;

i, j: TW_UINT32;

SaveRed: byte;

{ MCM 210996, Variables needed to handle large bitmaps. }

LongWidth: longint;

StartT: TLongType;

ToAddrT: TLongType;

BitsT: TLongType;

StartB: TLongType;

ToAddrB: TLongType;

BitsB: TLongType;

begin

pDib:= GlobalLock(hBmp);

pDibInfo:= PBitmapInfo(pDib);

Height:= pDibInfo^.bmiHeader.biHeight;

BitCount:= pDibInfo^.bmiHeader.biBitCount;

LongWidth:= (((pDibInfo^.bmiHeader.biWidth * bitCount) + 31) div 32) *

4;

hBmpT:= GlobalAlloc(GHND, LongWidth);

hBmpB:= GlobalAlloc(GHND, LongWidth);

if (hBmpT <> 0) and

(hBmpB <> 0)

then begin

pBmpT:= GlobalLock(hBmpT);

pBmpB:= GlobalLock(hBmpB);

BitsT.Ptr:= pDib;

BitsB.Ptr:= pDib;

{ Calculate Offset to start of the bitmap data. }

Offset:= SizeOf(TBitmapInfoHeader);

Offset:= Offset + pDibInfo^.bmiHeader.biClrUsed * SizeOf(TRGBQUAD);

StartT.Long:= Offset;

StartB.Long:= Offset + (LongWidth * (Height - 1));

{ For each line. }

for i:= 0 to ((Height - 1) div 2)

do begin

{$IFDEF WIN32}

{ 32 Bit code. }

ToAddrT.Long:= BitsT.Long + StartT.Long;

ToAddrB.Long:= BitsB.Long + StartB.Long;

CopyMemory(pBmpT, ToAddrT.Ptr, LongWidth);

CopyMemory(pBmpB, ToAddrB.Ptr, LongWidth);

CopyMemory(ToAddrB.Ptr, pBmpT, LongWidth);

CopyMemory(ToAddrT.Ptr, pBmpB, LongWidth);

StartT.Long:= StartT.Long + LongWidth;

StartB.Long:= StartB.Long - LongWidth;

{$ELSE}

{ 16 Bit code. }

ToAddrT.Hi:= BitsT.Hi + (StartT.Hi * Ofs(AHIncr));

ToAddrT.Lo:= StartT.Lo;

ToAddrB.Hi:= BitsB.Hi + (StartB.Hi * Ofs(AHIncr));

ToAddrB.Lo:= StartB.Lo;

hmemcpy(pBmpT, ToAddrT.Ptr, LongWidth);

hmemcpy(pBmpB, ToAddrB.Ptr, LongWidth);

hmemcpy(ToAddrB.Ptr, pBmpT, LongWidth);

hmemcpy(ToAddrT.Ptr, pBmpB, LongWidth);

StartT.Long:= StartT.Long + LongWidth;

StartB.Long:= StartB.Long - LongWidth;

{$ENDIF}

end;

{ Flip RGB color table. }

if (PixType = TWPT_RGB)

then begin

Pixels:= TW_UINT16(pDibInfo^.bmiHeader.biWidth);

StartT.Long:= Offset;

for items:= 0 to (Height - 1)

do begin

{$IFDEF WIN32}

{ 32 Bit code. }

ToAddrT.Long:= BitsT.Long + StartT.Long;

CopyMemory(pBmpT, ToAddrT.Ptr, LongWidth);

for i:= 0 to (Pixels - 1)

do begin

{ Switch Red byte and Blue byte. }

j:= i * 3;

SaveRed:= pBmpT^[j];

pBmpT^[j]:= pBmpT^[j+2];

pBmpT^[j+2]:= SaveRed;

end;

CopyMemory(ToAddrT.Ptr, pBmpT, LongWidth);

StartT.Long:= StartT.Long + LongWidth;

{$ELSE}

{ 16 Bit code. }

ToAddrT.Hi:= BitsT.Hi + (StartT.Hi * Ofs(AHIncr));

ToAddrT.Lo:= StartT.Lo;

hmemcpy(pBmpT, ToAddrT.Ptr, LongWidth);

for i:= 0 to (Pixels - 1)

do begin

{ Switch Red byte and Blue byte. }

j:= i * 3;

SaveRed:= pBmpT^[j];

pBmpT^[j]:= pBmpT^[j+2];

pBmpT^[j+2]:= SaveRed;

end;

hmemcpy(ToAddrT.Ptr, pBmpT, LongWidth);

StartT.Long:= StartT.Long + LongWidth;

{$ENDIF}

end;

end;

{ Unlock. }

GlobalUnlock(hBmp);

GlobalUnlock(hBmpT);

GlobalUnlock(hBmpB);

end

else begin

if (MessageLevel >= ML_ERROR)

then ShowRC_CC(hTmpWnd, 0, 0, 0,

'Could not allocate enough memory to flip image',

'Error in FixBitMap in TWA_ACQ.C');

GlobalUnlock(hBmp);

end;

{ Free. }

if (hBmpT <> 0)

then GlobalFree(hBmpT);

if (hBmpB <> 0)

then GlobalFree(hBmpB);

end; { End FlipBitMap. }

{------------------------------------------------------------------------------}

{ LogMessage -- Writes debug strings to log file at c:\twacker.log. Only }

{ runs when code is compiled in debug mode. }

{------------------------------------------------------------------------------}

procedure LogMessage(Msg: PChar);

{$IFDEF DEBUG}

var Afile: HFILE;

Aof: TOFSTRUCT;

{$ENDIF}

begin

{$IFDEF DEBUG}

if (integer(OpenFile('c:\twacker.log', Aof, OF_EXIST)) = HFILE_ERROR)

then Afile:= OpenFile('c:\twacker.log', Aof, OF_CREATE or

OF_WRITE or

OF_SHARE_DENY_NONE)

else Afile:= OpenFile('c:\twacker.log', Aof, OF_WRITE or

OF_SHARE_DENY_NONE);

if (_llseek(Afile, 0, FILE_END) = -1)

then OutputDebugString('LogMessage _llseek failed');

if (_lwrite(Afile, msg, lstrlen(msg)) = -1)

then OutputDebugString('LogMessage _lwrite failed');

if (_lwrite(Afile, CR_LF, lstrlen(CR_LF)) = -1)

then OutputDebugString('LogMessage _lwrite failed');

if (_lclose(Afile) = -1)

then OutputDebugString('LogMessage _lclose failed');

{$ENDIF}

end; { End LogMessage. }

{------------------------------------------------------------------------------}

{ CloseConnection -- Disables the data source UI, closes the data source, }

{ and closes the DSM }

{------------------------------------------------------------------------------}

procedure CloseConnection(hBmp: THandle);

begin

if TWDisableDS

then begin

if TWCloseDS

then begin

if TWCloseDSM(hBmp)

then begin { SUCCESS }

{ CheckSpecialMenu(hGlobalWnd, TW_APP_CLOSESM); }

AcqFlag:= 0;

end

else begin

{ CheckSpecialMenu(hGlobalWnd, TW_APP_CLOSEDS); }

AcqFlag:= 0;

end;

end

else begin

AcqFlag:= 0;

{ CheckSpecialMenu(hGlobalWnd, TW_APP_DISABLE); }

end;

end;

end; { End CloseConnection. }

{------------------------------------------------------------------------------}

{ IsSampleSourceActive - Returns True if twacker is using the sample }

{ source. Checks the WIN.INI file for the default source. }

{------------------------------------------------------------------------------}

function IsSampleSourceActive: bool;

var {$IFDEF VER70}

Result: bool;

{$ENDIF}

Winini: array[0..MAX_TWPATH] of char;

Source: array[0..MAX_TWPATH] of char;

begin

GetWindowsDirectory(Winini, SizeOf(Winini));

lstrcat(Winini,'\win.ini');

GetPrivateProfileString('TWAIN', 'Default Source', '',

Source, SizeOf(Source), Winini);

StrUpper(source);

if ((StrPos(source, 'TWSRC_16.DS') <> Nil) or

(StrPos(source, 'TWSRC_32.DS') <> Nil))

then Result:= True

else Result:= False;

end; { End IsSampleSourceActive. }

end. { End Unit twa_acq. }

Размещено на Allbest.ru


Подобные документы

  • Актуальність сучасної системи оптичного розпізнавання символів. Призначення даних систем для автоматичного введення друкованих документів в комп'ютер. Послідовність стадій процесу введення документу в комп'ютер. Нові можливості програми FineReader 5.0.

    курсовая работа [4,5 M], добавлен 29.09.2010

  • Огляд методів розпізнавання образів. Основні ідеї інформаційно-екстремального методу розпізнавання рукописних символів. Критерій оптимізації параметрів функціонування даної системи. Інформаційне та програмне забезпечення обробки рукописних символів.

    дипломная работа [291,0 K], добавлен 14.10.2010

  • Алгоритм оптичного розпізнавання образів. Універсальність таких алгоритмів. Технологічність, зручність у процесі використання програми. Два класи алгоритмів розпізнавання друкованих символів: шрифтовий та безшрифтовий. технологія підготовки бази даних.

    реферат [24,5 K], добавлен 19.11.2008

  • Історія досліджень, пов’язаних з розпізнаванням образів, його практичне використання. Методи розпізнавання образів: метод перебору, глибокий аналіз характеристик образу, використання штучних нейронних мереж. Характерні риси й типи завдань розпізнавання.

    реферат [61,7 K], добавлен 23.12.2013

  • Сегментація і нормалізація зображень. Основні функціональні можливості та режими роботи комплексу розпізнавання письмового тексту. Розробка комплексу оптичного розпізнавання символів. Шрифтові та безшрифтові алгоритми розпізнавання друкованого тексту.

    курсовая работа [1,7 M], добавлен 19.05.2014

  • Комп’ютерне моделювання системи сегментації та розпізнавання облич на зображеннях. Підвищення швидкодії моделювання за кольором шкіри та покращення якості розпізнавання при застосуванні робастних boosting-методів. Розробка алгоритмів функціонування.

    дипломная работа [1,6 M], добавлен 02.07.2014

  • Розробка, дослідження та реалізація методів вирішення завдань аналізу, розпізнавання і оцінювання зображень як один із провідних напрямків інформатики. Класифікація та аналіз існуючих методів розпізнавання образів, переваги та недоліки їх застосування.

    статья [525,8 K], добавлен 19.09.2017

  • Опис мови програмування PHP. Стратегія Open Source. Мова розмітки гіпертекстових документів HTML. Бази даних MySQL. Обґрунтування потреби віддаленого доступу до БД. Веб-сервер Apache. Реалізація системи. Інструкція користувача і введення в експлуатацію.

    курсовая работа [42,9 K], добавлен 21.12.2012

  • Проблеми друкування шрифтом, який не підтримує програма друку. Створення програми завантаження свого шрифту у принтер. Опис та обґрунтування проектних рішень по проектуванню пристрою системи. Розрахунки та експериментальні матеріали, реалізація проекту.

    курсовая работа [17,6 K], добавлен 08.08.2009

  • Специфіка застосування нейронних мереж. Огляд програмних засобів, що використовують нейронні мережі. Побудова загальної моделі згорткової нейронної мережі. Реалізація нейромережного модулю розпізнавання символів на прикладі номерних знаків автомобілів.

    дипломная работа [3,4 M], добавлен 15.03.2022

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.