# include <cassert>
# include <cstdio>
# include <cstdlib>
# include "tensorflow/c/c_api.h"
void * read_file ( const char * path , size_t * out_len ) {
FILE * f = fopen ( path , " r " ) ;
if ( ! f ) {
return NULL ;
}
fseek ( f , 0 , SEEK_END ) ;
long f_len = ftell ( f ) ;
rewind ( f ) ;
char * buf = ( char * ) calloc ( f_len , 1 ) ;
assert ( buf ) ;
size_t num_read = fread ( buf , f_len , 1 , f ) ;
fclose ( f ) ;
if ( num_read ! = 1 ) {
free ( buf ) ;
return NULL ;
}
if ( out_len ) {
* out_len = f_len ;
}
return buf ;
}
static void DeallocateBuffer ( void * data , size_t ) {
free ( data ) ;
}
int main ( int argc , char * argv [ ] ) {
TF_Buffer * buf ;
TF_Graph * graph ;
TF_Status * status ;
char * path = argv [ 1 ] ;
// load model
{
size_t model_size ;
char tmp [ 1024 ] ;
snprintf ( tmp , sizeof ( tmp ) , " %s.pb " , path ) ;
printf ( " loading model %s \n " , tmp ) ;
uint8_t * model_data = ( uint8_t * ) read_file ( tmp , & model_size ) ;
buf = TF_NewBuffer ( ) ;
buf - > data = model_data ;
buf - > length = model_size ;
buf - > data_deallocator = DeallocateBuffer ;
printf ( " loaded model of size %d \n " , model_size ) ;
}
// import graph
status = TF_NewStatus ( ) ;
graph = TF_NewGraph ( ) ;
TF_ImportGraphDefOptions * opts = TF_NewImportGraphDefOptions ( ) ;
TF_GraphImportGraphDef ( graph , buf , opts , status ) ;
TF_DeleteImportGraphDefOptions ( opts ) ;
TF_DeleteBuffer ( buf ) ;
if ( TF_GetCode ( status ) ! = TF_OK ) {
printf ( " FAIL: %s \n " , TF_Message ( status ) ) ;
} else {
printf ( " SUCCESS \n " ) ;
}
}