2
2
Copyright (c) 1993-2008, Cognitive Technologies
5
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
8
* ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
���� ����������� �� ��������� �����, ���� ������ ������� � �����������
11
* ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
������ ����������, ������������ ��� ���������������, ������ �����������
13
��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
����������� ����� �� ��������.
15
* �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
���� ������������ � �������� �������� ��������� �/��� �����������
17
���������, ���������� �� ���� ��, ��� ���������������� �����������
20
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
������������� ������, ��������� � �������������� ��� ���������� ����������
27
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
5
Разрешается повторное распространение и использование как в виде исходного кода,
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
8
* При повторном распространении исходного кода должны оставаться указанное
9
выше уведомление об авторском праве, этот список условий и последующий
11
* При повторном распространении двоичного кода в документации и/или в
12
других материалах, поставляемых при распространении, должны сохраняться
13
указанная выше информация об авторском праве, этот список условий и
14
последующий отказ от гарантий.
15
* Ни название Cognitive Technologies, ни имена ее сотрудников не могут
16
быть использованы в качестве средства поддержки и/или продвижения
17
продуктов, основанных на этом ПО, без предварительного письменного
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
33
33
Redistribution and use in source and binary forms, with or without modification,
34
34
are permitted provided that the following conditions are met:
69
69
#include "p2libr.h"
70
70
#include "ccomdefs.h"
72
LONG EVNRecog_lp(/*c_comp*/CCOM_comp *ec, BYTE * lp, INT lth, BYTE *res );
73
extern BYTE db_status; // snap presence byte
74
extern BYTE db_trace_flag; // 2 - more detailed estimate (ALT-F7)
72
int32_t EVNRecog_lp(/*c_comp*/CCOM_comp *ec, uchar * lp, int16_t lth, uchar *res );
73
extern uchar db_status; // snap presence byte
74
extern uchar db_trace_flag; // 2 - more detailed estimate (ALT-F7)
76
extern int16_t nIncline;
77
77
extern void ErrorExit(int Code);
78
78
//#define NUMBER_OF_CELLS (0x30000/sizeof (cell))
79
extern PBYTE ED_file_bound,ED_file_end/* memory_pool_end*/;
80
static PBYTE kit_start, kit_curr;
79
extern puchar ED_file_bound,ED_file_end/* memory_pool_end*/;
80
static puchar kit_start, kit_curr;
82
82
static cell first_cell, last_cell;
83
83
static cell * empty_cell, * free_cell_chain, * cell_boundary;
84
84
extern c_comp wcomp;
85
85
extern version * start_rec, * rec_ptr;
86
extern int16_t lpool_lth;
89
static PBYTE save_kit(PBYTE c, INT l);
90
static void rest_kit(PBYTE s, PBYTE k);
91
static INT second_recog(cell *c);
92
static INT vers_to_cell(cell *c);
93
static PBYTE comp_to_kit(MN * mn);
89
static puchar save_kit(puchar c, int16_t l);
90
static void rest_kit(puchar s, puchar k);
91
static int16_t second_recog(cell *c);
92
static int16_t vers_to_cell(cell *c);
93
static puchar comp_to_kit(MN * mn);
94
94
static void comp_from_kit(cell *c);
96
static BYTE il1_pool[8192]={0}; // 19.07.2001 E.P.
96
static uchar il1_pool[8192]={0}; // 19.07.2001 E.P.
98
CHAR deb_messages[]="Virtal shape set\0Skeleton match got\0"
98
char deb_messages[]="Virtal shape set\0Skeleton match got\0"
99
99
"Create scaled shape\0"
100
100
"Vectorization in progress\0"
101
101
"Pattern matching: est = %d\0"
136
// ��������� ������� ������
136
// проверяем цепочку вперед
137
137
for ( Back = cell_f(), ForwardChain = cell_f()->next;
138
138
ForwardChain != cell_l() && ForwardChain->next != NULL;
139
139
ForwardChain = ForwardChain->next )
141
// ��������� �� �������������
141
// проверяем на зацикленность
142
142
for ( Cicle = cell_f();
143
143
Cicle != ForwardChain;
144
144
Cicle = Cicle->next )
145
145
if (ForwardChain->next == Cicle)
146
{ //���� �������������...
146
{ //если зацикливается...
147
147
ForwardChain = NULL;
150
// �������� �������� �����
150
// проверка обратной связи
151
151
if ( ForwardChain->prev != Back )
153
153
LossCell = ForwardChain->prev;
157
157
Back = ForwardChain;
160
// ���� ������ �� �����...
160
// если прошли до конца...
161
161
if ( ForwardChain == cell_l() )
164
164
if ( ForwardChain->prev != Back )
165
165
ForwardChain->prev = Back;
167
// ��������� ������� ������
167
// проверяем цепочку надзад
168
168
for ( Back = cell_l(), BackwardChain = cell_l()->prev;
169
169
BackwardChain != cell_f() && BackwardChain->prev != NULL;
170
170
BackwardChain = BackwardChain->prev )
172
// �������� �������� �����
172
// проверка обратной связи
173
173
if ( BackwardChain->next != Back )
175
// �������, ���� ���� ��������
175
// смотрим, куда идет апендикс
176
176
for ( BackTwo = BackwardChain, Appendix = BackwardChain->next;
177
177
Appendix != cell_l() && Appendix->next != NULL;
178
178
Appendix = Appendix->next )
249
249
void AKTryChainRecover( cell ** c )
252
// ���� ������ ������� �� �������� ����������,
253
// ���������, ��������� �� c � �������
252
// если правка цепочки не принесла результата,
253
// проверяем, находится ли c в цепочке
254
254
if ( (*c)->next == NULL )
256
// ���� ���, ��������� ��������� � ����������, ����� � ������
256
// если нет, попробуем вернуться к предыдущей, иначе к началу
257
257
if ( !AKCellInChain(*c) )
259
259
if ( AKCellInChain((*c)->prev) )
461
461
/////////////////////////////////////////////////////////////////////////////////////////
462
462
//======================= Kit function ===============================
464
static PBYTE save_kit(PBYTE c, INT l)
464
static puchar save_kit(puchar c, int16_t l)
467
467
if (ED_file_end - kit_curr - 2 < l)
468
468
ErrorExit (RSTR_ERR_NOPLACE);
469
*(PINT) kit_curr=l; memcpy (kit_curr+2,c,l);
469
*(pint16_t) kit_curr=l; memcpy (kit_curr+2,c,l);
470
470
w=kit_curr; kit_curr+=l+2;
474
static void rest_kit(PBYTE s, PBYTE k)
474
static void rest_kit(puchar s, puchar k)
476
memcpy(s,k+2,*(PINT)k);
476
memcpy(s,k+2,*(pint16_t)k);
479
static PBYTE comp_to_kit(MN * mn)
479
static puchar comp_to_kit(MN * mn)
484
484
lth = sizeof(c_comp) + lpool_lth + 2;
485
485
wcomp.size = (lth + 15)/16; // Vald 11-24-95 05:06pm
556
556
void online_comp(c_comp *w)
558
558
memcpy (&wcomp,w,sizeof(c_comp));
559
w = (c_comp *)((PBYTE)w + w->lines);
560
lpool_lth=*(PINT)w; w=(c_comp *)((PINT)w+1);
559
w = (c_comp *)((puchar)w + w->lines);
560
lpool_lth=*(pint16_t)w; w=(c_comp *)((pint16_t)w+1);
561
561
memcpy (lpool,w,lpool_lth);
562
562
rec_ptr=start_rec;
565
565
#define NCOMPMAX 8
567
BOOL compose_cell(INT n,cell **clist,cell *c)
567
Bool compose_cell(int16_t n,cell **clist,cell *c)
569
INT i,top,bot,left,right,hmax,imax;
569
int16_t i,top,bot,left,right,hmax,imax;
570
570
c_comp *elist[NCOMPMAX];
574
574
for ( top=left=10000,imax=hmax=bot=right=-10000,i=0; i<n && i<NCOMPMAX; i++)
631
631
// analog of compose_cell whithout deleting
632
BOOL compose_cell_save(INT n,cell **clist,cell *c)
632
Bool compose_cell_save(int16_t n,cell **clist,cell *c)
634
INT i,top,bot,left,right,hmax,imax;
634
int16_t i,top,bot,left,right,hmax,imax;
635
635
c_comp *elist[NCOMPMAX];
639
639
for (top=left=10000,imax=hmax=bot=right=-10000,i=0; i<n && i<NCOMPMAX; i++)
741
741
for (i=0; i<n; i++,lpool_lth+=l)
744
w=(PBYTE)(c[i])+c[i]->lines;
744
w=(puchar)(c[i])+c[i]->lines;
746
746
du=c[i]->upper-wcomp.upper;
747
747
dl=c[i]->left-wcomp.left;
748
l=*((INT *)w)-((i==n-1)?0:2);
749
memcpy((PBYTE)lpool+lpool_lth,w+2,l);
750
for (ln=(lnhead*)((PBYTE)lpool+lpool_lth),j=0; j<nl;
751
j++,ln=(lnhead *)((PBYTE)ln+lth))
748
l=*((int16_t *)w)-((i==n-1)?0:2);
749
memcpy((puchar)lpool+lpool_lth,w+2,l);
750
for (ln=(lnhead*)((puchar)lpool+lpool_lth),j=0; j<nl;
751
j++,ln=(lnhead *)((puchar)ln+lth))
1067
1067
cc.ends = c->env->ends;
1068
1068
cc.scale = c->env->scale;
1070
// n = (INT)EVNRecog_lp(c->env,lpool,lpool_lth,&res[0]);
1071
n = (INT)EVNRecog_lp(&cc,lpool,lpool_lth,&res[0]);
1070
// n = (int16_t)EVNRecog_lp(c->env,lpool,lpool_lth,&res[0]);
1071
n = (int16_t)EVNRecog_lp(&cc,lpool,lpool_lth,&res[0]);
1073
//�������������� �� ��������� CCOM_comp ����������� EVNRecog_lp
1073
//восстановление из структуры CCOM_comp результатов EVNRecog_lp
1074
1074
c->env->type = cc.type;
1075
1075
c->env->cs = cc.cs;
1076
1076
c->env->pidx = cc.pidx;