| /* -*-C-*- |
| ******************************************************************************** |
| * |
| * File: bestfirst.h (Formerly bestfirst.h) |
| * Description: Best first search functions |
| * Author: Mark Seaman, OCR Technology |
| * Created: Mon May 14 11:23:29 1990 |
| * Modified: Mon Apr 29 14:21:57 1991 (Mark Seaman) marks@hpgrlt |
| * Language: C |
| * Package: N/A |
| * Status: Experimental (Do Not Distribute) |
| * |
| * (c) Copyright 1990, Hewlett-Packard Company. |
| ** Licensed under the Apache License, Version 2.0 (the "License"); |
| ** you may not use this file except in compliance with the License. |
| ** You may obtain a copy of the License at |
| ** http://www.apache.org/licenses/LICENSE-2.0 |
| ** Unless required by applicable law or agreed to in writing, software |
| ** distributed under the License is distributed on an "AS IS" BASIS, |
| ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ** See the License for the specific language governing permissions and |
| ** limitations under the License. |
| * |
| *******************************************************************************/ |
| |
| #ifndef BESTFIRST_H |
| #define BESTFIRST_H |
| |
| /*---------------------------------------------------------------------- |
| I n c l u d e s |
| ----------------------------------------------------------------------*/ |
| |
| #include "associate.h" |
| #include "blobs.h" |
| #include "closed.h" |
| #include "oldheap.h" |
| #include "ratngs.h" |
| #include "seam.h" |
| #include "states.h" |
| #include "stopper.h" |
| #include "tessclas.h" |
| |
| /*---------------------------------------------------------------------- |
| T y p e s |
| ----------------------------------------------------------------------*/ |
| struct SEARCH_RECORD |
| { |
| HEAP *open_states; |
| HASH_TABLE closed_states; |
| STATE *this_state; |
| STATE *first_state; |
| STATE *best_state; |
| int num_joints; |
| long num_states; |
| long before_best; |
| WERD_CHOICE *best_choice; |
| WERD_CHOICE *raw_choice; |
| }; |
| |
| /*---------------------------------------------------------------------- |
| V a r i a b l e s |
| ---------------------------------------------------------------------*/ |
| extern int num_seg_states; |
| extern int num_popped; |
| |
| /*---------------------------------------------------------------------- |
| M a c r o s |
| ---------------------------------------------------------------------*/ |
| /********************************************************************** |
| * chunks_gap |
| * |
| * Return the width of several of the chunks (if they were joined to- |
| * gether. |
| **********************************************************************/ |
| #define chunks_gap(chunk_widths,last_chunk) \ |
| ((last_chunk < (chunk_widths)->num_chars - 1) ? \ |
| ((chunk_widths)->widths[last_chunk * 2 + 1]) : \ |
| (0)) |
| |
| /*---------------------------------------------------------------------- |
| F u n c t i o n s |
| ----------------------------------------------------------------------*/ |
| void init_bestfirst_vars(); |
| |
| |
| int chunks_width(WIDTH_RECORD *width_record, int start_chunk, int last_chunk); |
| |
| void delete_search(SEARCH_RECORD *the_search); |
| |
| void expand_node(FLOAT32 worst_priority, |
| CHUNKS_RECORD *chunks_record, |
| SEARCH_RECORD *the_search); |
| |
| SEARCH_RECORD *new_search(CHUNKS_RECORD *chunks_record, |
| int num_joints, |
| WERD_CHOICE *best_choice, |
| WERD_CHOICE *raw_choice, |
| STATE *state); |
| |
| STATE *pop_queue(HEAP *queue); |
| |
| void push_queue(HEAP *queue, STATE *state, |
| FLOAT32 worst_priority, FLOAT32 priority); |
| |
| void replace_char_widths(CHUNKS_RECORD *chunks_record, SEARCH_STATE state); |
| |
| // Joins blobs between index x and y, hides corresponding seams and |
| // returns classification of the resulting merged blob. |
| BLOB_CHOICE_LIST *join_blobs_and_classify(TBLOB *blobs, SEAMS seam_list, |
| int x, int y, int fx); |
| |
| /* |
| #if defined(__STDC__) || defined(__cplusplus) |
| # define _ARGS(s) s |
| #else |
| # define _ARGS(s) () |
| #endif*/ |
| |
| /* bestfirst.c |
| void init_bestfirst_vars |
| _ARGS((void)); |
| |
| void best_first_search |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| A_CHOICE *best_choice, |
| A_CHOICE *raw_choice, |
| STATE *state, |
| STATE* best_state, |
| inT32 pass)); |
| |
| CHOICES_LIST rebuild_current_state(); |
| |
| void write_segmentation |
| _ARGS((char *correct, |
| CHUNKS_RECORD *chunks_record, |
| SEARCH_RECORD *the_search)); |
| |
| int chunks_width |
| _ARGS((WIDTH_RECORD *width_record, |
| int start_chunk, |
| int last_chunk)); |
| |
| void delete_search |
| _ARGS((SEARCH_RECORD *the_search)); |
| |
| CHOICES_LIST evaluate_chunks |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| SEARCH_STATE search_state, |
| STATE* this_state, |
| STATE* best_state, |
| inT32 pass)); |
| |
| inT16 evaluate_state |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| SEARCH_RECORD *the_search, |
| STATE* best_state, |
| inT32 pass)); |
| |
| void expand_node |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| SEARCH_RECORD *the_search)); |
| |
| SEARCH_RECORD *new_search |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| int num_joints, |
| A_CHOICE *best_choice, |
| A_CHOICE *raw_choice, |
| STATE *state)); |
| |
| STATE *pop_queue |
| _ARGS((HEAP *queue)); |
| |
| void push_queue |
| _ARGS((HEAP *queue, |
| STATE *state, |
| FLOAT32 priority)); |
| |
| void replace_char_widths |
| _ARGS((CHUNKS_RECORD *chunks_record, |
| SEARCH_STATE state)); |
| #undef _ARGS |
| */ |
| #endif |