mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-11-24 11:09:06 +08:00
94 lines
2.6 KiB
C++
94 lines
2.6 KiB
C++
|
/**********************************************************************
|
||
|
* File: callnet.cpp (Formerly callnet.c)
|
||
|
* Description: Interface to Neural Net matcher
|
||
|
* Author: Phil Cheatle
|
||
|
* Created: Wed Nov 18 10:35:00 GMT 1992
|
||
|
*
|
||
|
* (C) Copyright 1992, Hewlett-Packard Ltd.
|
||
|
** 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.
|
||
|
*
|
||
|
**********************************************************************/
|
||
|
|
||
|
#include "mfcpch.h"
|
||
|
#include "errcode.h"
|
||
|
//#include "nmatch.h"
|
||
|
#include "globals.h"
|
||
|
|
||
|
#define OUTPUT_NODES 94
|
||
|
|
||
|
const ERRCODE NETINIT = "NN init error";
|
||
|
|
||
|
//extern "C"
|
||
|
//{
|
||
|
//extern char* demodir; /* where program lives */
|
||
|
|
||
|
void init_net() { /* Initialise net */
|
||
|
#ifdef ASPIRIN_INCLUDED
|
||
|
char wts_filename[256];
|
||
|
|
||
|
if (nmatch_init_network () != 0) {
|
||
|
NETINIT.error ("Init_net", EXIT, "Errcode %s", nmatch_error_string ());
|
||
|
}
|
||
|
strcpy(wts_filename, demodir);
|
||
|
strcat (wts_filename, "tessdata/netwts");
|
||
|
|
||
|
if (nmatch_load_network (wts_filename) != 0) {
|
||
|
NETINIT.error ("Init_net", EXIT, "Weights failed, Errcode %s",
|
||
|
nmatch_error_string ());
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
void callnet( /* Apply image to net */
|
||
|
float *input_vector,
|
||
|
char *top,
|
||
|
float *top_score,
|
||
|
char *next,
|
||
|
float *next_score) {
|
||
|
#ifdef ASPIRIN_INCLUDED
|
||
|
float *output_vector;
|
||
|
int i;
|
||
|
int max_out_i = 0;
|
||
|
int next_max_out_i = 0;
|
||
|
float max_out = -9;
|
||
|
float next_max_out = -9;
|
||
|
|
||
|
nmatch_set_input(input_vector);
|
||
|
nmatch_propagate_forward();
|
||
|
output_vector = nmatch_get_output ();
|
||
|
|
||
|
/* Now find top two choices */
|
||
|
|
||
|
for (i = 0; i < OUTPUT_NODES; i++) {
|
||
|
if (output_vector[i] > max_out) {
|
||
|
next_max_out = max_out;
|
||
|
max_out = output_vector[i];
|
||
|
next_max_out_i = max_out_i;
|
||
|
max_out_i = i;
|
||
|
}
|
||
|
else {
|
||
|
if (output_vector[i] > next_max_out) {
|
||
|
next_max_out = output_vector[i];
|
||
|
next_max_out_i = i;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
*top = max_out_i + '!';
|
||
|
*next = next_max_out_i + '!';
|
||
|
*top_score = max_out;
|
||
|
*next_score = next_max_out;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
//};
|