Система оптичного розпізнавання образів
Огляд інтелектуальних принципів організації процесу розпізнавання символів. Розробка системи безклавіатурного введення документів у комп’ютер. Опис і обґрунтування проектних рішень; розрахунки і експериментальні дані; впровадження системи в експлуатацію.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 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