一、C调用Python

1.新建一个Python文件,名称为py_multipy.py:

 #import numpy as np
def multiply(a=1,b=2):
print('Function of python called!')
print('a:',a)
print('b:',b)
print('a*b:',a*b)
#print('numpy a*b:',np.multiply(a,b))

2.新建一个C调用文件,名称为call_python.c

 #include <stdio.h>
#include <stdlib.h>
#include <Python.h> int main()
{
Py_Initialize(); if(!Py_IsInitialized())
{
printf("Python init failed!\n");
return -;
} PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')"); PyObject *pDict = NULL;
PyObject *pModule = NULL;
PyObject *pName = NULL;
PyObject *pFunc = NULL;
PyObject *pArgs = NULL; pName = PyString_FromString("py_add");
pModule = PyImport_Import(pName);
if (!pModule)
{
printf("Load py_add.py failed!\n");
getchar();
return -;
} pDict = PyModule_GetDict(pModule);
if(!pDict)
{
printf("Can't find dict in py_add!\n");
return -;
} pFunc = PyDict_GetItemString(pDict,"add");
if(!pFunc || !PyCallable_Check(pFunc))
{
printf("Can't find function!\n");
getchar();
return -;
} pArgs = PyTuple_New(); PyTuple_SetItem(pArgs,,Py_BuildValue("i",));
PyTuple_SetItem(pArgs,,Py_BuildValue("i",)); PyObject_CallObject(pFunc,pArgs); if(pName)
{
Py_DECREF(pName);
} if(pArgs)
{
Py_DECREF(pArgs);
} if(pModule)
{
Py_DECREF(pModule);
} Py_Finalize();
return ; }

3.编译C文件

gcc -I/usr/include/python2.7/ call_python.c -o call_python -L/usr/lib/ -lpython2.7

在当前目录下生成可执行文件call_python

4.执行新生成的文件:./call_python

显示结果如下:

Function of python called!

('a:',111)

('b:',222)

('a*b:',333)

二、Python调用C

1.新建一个pcallc.c

 #include <stdio.h>
#include <pcallc.h> int add(int a,int b)
{
int c= ;
c = a+b;
printf("add c:",c);
return c;
}

2.新建一个pcallc.h

 #ifndef PCALLC_H
#define PCALLC_H int add(); #endif

3.生成动态库:pcallc.so

gcc -o pcallc.so -shared -fPIC pcallc.c

4.新建pcallc.py

 #-*- coding:utf-8 -*-

 import ctypes

 loadso = ctypes.cdll.LoadLibrary
lib= loadso("./pcallc.so")
lib.add(1,2) print("***finish***")

5.运行pcallc.py

python pcallc.py

add c:3

finish!

Tensorflow模型移植Arm之一:C与Python互相调用的更多相关文章

  1. 将训练好的tensorflow模型移植到android应用中

    具体步骤如下: 1.  TFLiteConverter保存模型 修改网络模型代码,将模型通过TFLiteConverter转化成为 TensorFlow Lite FlatBuffer即为.tflit ...

  2. tensorflow初次接触记录,我用python写的tensorflow第一个模型

    tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...

  3. [翻译] Tensorflow模型的保存与恢复

    翻译自:http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ ...

  4. Tensorflow模型的格式

    转载:https://cloud.tencent.com/developer/article/1009979 tensorflow模型的格式通常支持多种,主要有CheckPoint(*.ckpt).G ...

  5. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  6. 搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型

    原文地址:搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型 0x00 环境 OS: Ubuntu 1810 x64 Anaconda: 4.6.12 P ...

  7. 一份快速完整的Tensorflow模型保存和恢复教程(译)(转载)

    该文章转自https://blog.csdn.net/sinat_34474705/article/details/78995196 我在进行图像识别使用ckpt文件预测的时候,这个文章给我提供了极大 ...

  8. TensorFlow模型保存和加载方法

    TensorFlow模型保存和加载方法 模型保存 import tensorflow as tf w1 = tf.Variable(tf.constant(2.0, shape=[1]), name= ...

  9. 使用tensorflow-serving部署tensorflow模型

    使用docker部署模型的好处在于,避免了与繁琐的环境配置打交道.使用docker,不需要手动安装Python,更不需要安装numpy.tensorflow各种包,直接一个docker就包含了全部.d ...

随机推荐

  1. pandas之数据处理操作

    1.pandas对缺失数据的处理 我们的数据缺失通常有两种情况: 1.一种就是空,None等,在pandas是NaN(和np.nan一样) 解决方法: 判断数据是否为NaN:pd.isnull(df) ...

  2. mongodb游标的使用

    1.插入数据 ;i<;i++){ db.shop.insert({_id:i+,name:+i}) } 2.查看数据数 db.shop.find().count() 3.获取游标.判断是否还存在 ...

  3. Log4j(详解)

    Log4j: Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件, 甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  4. Linux LAMP源码安装

    查看编译参数 # httpd cat /app/httpd24/build/config.nice # mysql cat /app/mysql/docs/INFO_BIN # php php -i ...

  5. 集群中配置多台机器之间 SSH 免密码登录

    集群中配置多台机器之间 SSH 免密码登录 问题描述 由于现在项目大多数由传统的单台机器部署,慢慢转变成多机器的集群化部署. 但是,这就涉及到机器间的 SSH 免密码互通问题. 当集群机器比较多的时候 ...

  6. Spring:注解(@suppresswarnings,@Valid,初始化静态配置数据,定时任务,@EnableAutoConfiguration)

    1.@suppresswarnings(" ") 2.@Valid @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字 ...

  7. Eclipse-jee-oxygen-3A版运行时出现Could not create the Java virtual machine?

    我有她就够了!!! 详情点击:[她]

  8. ES5与ES6常用语法教程之 ③模板字符串、判断字符串是否包含其它字符串

    这部分教程我们主要讲解以下几个常用语法 模板字符串 带标签的模板字符串 判断字符串中是否包含其他字符串 给函数设置默认值 模板字符串 老式的拼接字符串方法 let dessert = '

  9. 【DSP开发】【Linux开发】Linux下PCI设备驱动程序开发

    PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准.Linux的内核能较好地支持PCI总线,本文以Inte ...

  10. selenium-server--chromedriver环境

    x 准备环境: 1.selenium-server-standalone-3.8.1.jar 2.chromedriver.exe 一.查看本地电脑chrome浏览器版本信息: 二.访问代理地址:ht ...