在c语言程序中调用python脚本 10C

最近在研究yolo,想在yolo源码(c语言)中调用随机森林算法来判断各检测框之间的关系。
只针对行人出检测框,提取框与框之间的四个参数:交并比、中心点距离、颜色直方图差值、面积差。以此作为输入参数。
先利用python完成了模型的训练并保存。在服务器上模拟调用也是可行的。随机生成数据,通过模型判断。
部分代码如下:test.c
srand((unsigned)time(NULL));

for (i=0;i<50;i++){

io = rand()/(double)(RAND_MAX);
printf("iou:%f\n",io);


dist = rand()/(double)(RAND_MAX/100);
printf("distance:%f\n",dist);


su = rand()/(double)(RAND_MAX/100);
printf("sub:%f\n",su);


sua = rand()%50000;
printf("suba:%d\n",sua);
Py_Initialize();
if(!Py_IsInitialized())
    {
        printf("Python init failed!\n");
        return;
    }
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('//home//wangxiangsheng//wuhao//test')");

PyObject *pName = NULL;
PyObject *pModule = NULL;
PyObject *pDict = NULL;
PyObject *pFunc = NULL;
PyObject *pArgs = NULL;
PyObject *pResult = NULL;
pName = PyString_FromString("RF");
pModule = PyImport_Import(pName);
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict,"randomF");

pArgs = Py_BuildValue("(f,f,f,i)",io,dist,su,sua);

pResult = PyObject_CallObject(pFunc,pArgs);
PyArg_Parse(pResult, "i", &res);
printf("result is %d\n",res);
 调用的python脚本:RF.py

import sklearn as skl
from sklearn.externals import joblib
from sklearn.ensemble import RandomForestClassifier

def randomF(iou,distance,sub,suba):

test_data = [[iou,distance,sub,suba]]

clf = joblib.load("//home//wangxiangsheng//wuhao//train_model.m")

output = clf.predict(test_data)
print output
return output

但是,当我按照这样改写yolo源码之后,运行起来就会出问题,
图片说明
第一帧有数据,没画面,第二帧就直接卡住了。

代码较多,放部分片断

     Py_Initialize();
    if(!Py_IsInitialized())
    {
        printf("Python init failed!\n");
        return;
    }
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('//home//wangxiangsheng//darknet//src')");

    PyObject *pName = NULL;
    PyObject *pModule = NULL;
    PyObject *pDict = NULL;
    PyObject *pFunc = NULL;
    PyObject *pArgs = NULL;
    PyObject *pResult = NULL;

    pName = PyString_FromString("RF");
    pModule = PyImport_Import(pName);
    if(!pModule)
        {
            printf("Load RF.py failed!\n");
            getchar();
        }
    pDict = PyModule_GetDict(pModule);
    if(!pDict)
        {
            printf("Can't find dict in RF!\n");
        }

    pFunc = PyDict_GetItemString(pDict,"randomF");
    if(!pFunc || !PyCallable_Check(pFunc))
        {
            printf("Can't find function!\n");
            getchar();
        }

    for(j=0;j<10;j++){
    for(w=j+1;w<39;w++){
        float media = box_iou(para[j].p, para[w].p); 
        float iout;
        if (media<=0){
        iout = 0.000000;
        } else {
        iout = media;
        }
        int p,suba;
        float res;
        suba = abs(para[j].barea-para[w].barea);
        float sub=0;
        for(p=0;p<64;p++){
        sub = sub + pow(para[j].hist[p]-para[w].hist[p],2);
        }
        float distance;
        distance = sqrt(pow(para[w].p.x-para[j].p.x,2)+pow(para[w].p.y-para[j].p.y,2));
        printf("%f-%f-%f-%d \n",iout,distance,sub,suba);
        pArgs = Py_BuildValue("(f,f,f,i)",iout,distance,sub,suba);
        pResult = PyObject_CallObject(pFunc,pArgs);
        PyArg_Parse(pResult, "f", &res);

        printf("result is %f\n",res);

求哪位指导一下,感激不尽!

1个回答

baidu_38392386
TLedTS emmm。。。我就是参考了这些网站改的,只调用一次的话没有问题,但是重复调用就不能重复Py_Finalize,扔掉这个之后反倒能正常运行。我试验了一个小demo能正常运行我写的程序,就是在嵌入yolo源码中时除了问题。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言调用python脚本
自己整理所得,当然菜鸟可以来看看,高手就可以略过啦
python脚本调用c函数
本门课程是网络上第一部讲解Python C编程的课程,课程深入、详细、完整讲解Python C编程技术,让你精通Python底层机制,精通Python,进阶程序员。
php调用C语言程序
树莓派2,开发nginx + php + sqlite,现在php和C语言的程序都写好了,C程序写的是串口通信,直接运行C程序是可以的,但是php调用C程序时,串口open失败,nFd = open("/dev/ttyAMA0", O_RDWR|O_NOCTTY);返回是-1。
汇编程序调用C语言程序?
请问汇编程序怎么调用C语言程序啊?给出具体做法吧,我试了一下,不成功!!!!
Java 调用C语言程序
Java 调用C语言程序 参考java核心技术 卷2 高级特性 第9版 第12章 P793 Linux环境下: #1.compile java javac HelloNative.java #2.generate .h javah HelloNative #3.generate dynamic link library gcc -fPIC -I /opt
matiab调用C语言程序
一个关于小波图像融合的C代码写了很久了,现在需要将其与matlab代码结合起来。想想就有些头疼,原来的C代码是调用OpenCV库实现的。做过一些matlab和C混合编程的程序,扯到opencv就有点头疼了,各种库啊,在没有opencv的电脑上可能就跑不了了。 思考了一下,其实图像就是矩阵嘛。小波变换图像融合本质就是对两个二维矩阵进行在不同的分解层上对小波系数按一定规则进行融合,而后再重构出一幅图
c程序调用python脚本,python脚本中的危险分子global变量
情况说明:当c程序循环调用某一特定脚本时,若python脚本中有global变量; 例如:脚本中存在global变量,如:global retValue="" 脚本中有对retValue的赋值,如:reValue=retValue+result(其中result是有其它函数返回获取到的); 问题:在多次调用该python脚本时,每一次得到的结果都是前几次结果的连接;
C 语言程序调用Fortran 语言程序的方法与实例
C 语言程序调用Fortran 语言程序的方法与实例 才漪
c语言程序c语言程序
本资源对《湖南省高等学校计算机水平等级考试复习指导》中的110个程序设计题进行了解答,纠正了书中答案的错误部分,对准备湖南省计算机等级考试的同学有帮助。
shell中调用python脚本
获取py脚本中print内容,同样通过output=python *.py或output=$(python *.py)获取,通过这种方式py中的print不会在控制台输出# test.py print 'test' exit('error message')# 运行脚本 x=`python test.py` echo $? echo ${x}输出 error message 1 test
PHP文件中调用Python脚本
在之前的开发中,需要在PHP文件中调用Python脚本来进行数据的传递,在网上搜索了很多资料后,发现资料大都讲得比较复杂(也可以说是本人水平有限),不利于理解和快速的开发与执行,因此记录如下,一来增加日常的积累,二来让需要此功能的朋友能快速上手: PHP文件: Python文件:
Shell脚本中调用python脚本
/usr/local/bin/python2.6 xxx.py [参数] 或 python xxx.py [参数]
c 调用Python脚本和函数(一)
1.py import numpy as np def data(): # matrix=np.arange(1,100) matrix=[[0,1,2,3],[1,1,1,1]] print matrix 1.cpp #include&lt;Python.h&gt; int main() { Py_Initialize(); PyRun_SimpleString("...
CCS 中C语言程序调用线性汇编
对DSP进行优化的时候,难免会用到线性汇编,今天找了一上午关于在C中调用线性汇编的程序,发现网上资料很少,这里自己做一个记录。
C语言程序中的文件调用详解
详细解说了文件调用,实现文件的打开与关闭方法
VB.net中调用c语言程序计算问题
做一个小程序,希望在点击button时使目录下或指定目录下某c语言程序运行(运行完后会在同一目录下形成txt文件),在网上搜了很多,查到使用shell调用,可是调用后只显示一个黑框,不生成文件啊,求大神帮忙,图片里打过的代码都试过了,没有成功的rnrnrn这个程序主要为了解决一类力学问题,需要输入一定参数然后计算出结果,参数已经在前几页中输入并存入txt,c程序的效果是读取txt中的数据并将结果输出至新生成的txt文件中,下一页就是读取新生成的txt并显示,我是用的是vs2013rnrn[img=https://img-bbs.csdn.net/upload/201412/12/1418390778_744024.png][/img]rnrn[img=https://img-bbs.csdn.net/upload/201412/12/1418390810_819382.png][/img]rnrnps:解决问题另外可送价值9刀的steam游戏(*2)与DLC(*1)或5刀一下任意游戏
Matlab调用C语言程序简单实例
matlab的功能强大,不仅仅因为matlab的强大的函数库和验算本式的计算方式,更重要的是因为他有强大的接口。 今天,我才抄着写出了一个自己的运行在matlab中的C程序,是书上原来的例子。但是,知道可以调用的惊奇还是十分令人愉快的。
delphi如何调用c语言程序???
已经编译好的c程序能不能被delphi 调用?rn如何调用?rn解决给分
C语言程序中的内存分配
对C语言程序中变量常量等在内存中的位置进行了介绍,对理解C有不小的帮助噢
C语言程序中的函数
关于局部变量和全局变量,在使用数组作为定义函数的实参时,有一些需要注意的地方。 程序1如下: #include&amp;lt;iosteam&amp;gt; using namespace std; void change(int a[])            a[] 为局部变量 { a[0]=30; a[1]=50; } int main() { int a[2]={3,5}; chan...
VC中如何调用Python脚本?
如题,最好能给个实例!
Java程序中调用Python脚本的方法
&amp;#13; 在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法。&amp;#13; 1、在Eclipse中新建Maven工程;&amp;#13; 2、pom.xml文件中添加如下依赖包之后update maven工程;&amp;#13;   &amp;#13; &amp;#13;      &amp;lt;dependency&amp;gt;&amp;#13; ...
实现python脚本调用c函数的api讲解
本门课程是网络上第一部讲解Python C编程的课程,课程深入、详细、完整讲解Python C编程技术,让你精通Python底层机制,精通Python,进阶程序员。
c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。
c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。
C语言程序
C语言程序
c语言程序
agaffaafaf
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件