智能家居--人脸识别

这里是用python(工厂模式)来实现,直接在所做项目的文件夹下创一个文本文档(shexian.py)

python (shexian.py)人脸代码讲解:

#coding=UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import requests                    #导包并设置字符编码,因为在py中,出现中文默认会报错
url = r'https://netocr.com/api/facerecog.do'      #翔云api的接口地址
key = r'自己购买'          
secret = r'自己购买'    
typeId = 21                                      #服务类型
rFormat = r'xml'                             
 
file1 = {'file1': open('file1.jpg', 'rb'),'file2':open('file2.jpg','rb')}
 #要比对的两张图片,file1.jpg,file2.jpg,注意照片的文件是可以自定义的,但要和树莓派上的主代码一致
 
data = {'key':key, 'secret':secret, 'typeId':typeId, 'format':rFormat}
#其他参数的字典
 
r = requests.post(url, files=file1,data = data)  #发起http请求,传参,比对后返回的信息存入r
 
print(r.text)   //用来显示输出结果,方便调试,调试后删除

if str(r.text).find('是')!=-1:
    print(1)
else:
    print(0)
#如果返回的信息中带有“是”,则表示比对成功(向缓冲区输出1,方便被popen函数调用时捕获到运行结果),否则表示比对失败(向缓冲区输出0,方便被popen函数调用时捕获到运行结果)

在这里先放一张照片进去:raspistill -o (自己照片名字)file1.jpg

摄像头人脸识别函,到时候直接在main()里面调用即可:

int shexian(void)   
{
    int init = wiringPiSetup();
    if (init == -1)
    {
        printf("init error\n");
    }
    char ch[1];
    FILE* p;
    pinMode(22, OUTPUT);
    digitalWrite(22, HIGH);
    char a;
    for(int g=0;g<5;g++)
    {
        printf("Turning on face recognition...\n");
    
            memset(ch, '0', 1);
            printf("Please do not move while taking photos........\n");//正在拍照不要移动
            system("raspistill -o file2.jpg");          //通过system函数,驱动摄像头拍照
            printf("Photo taken successfully, comparing results, please wait....\n"); //正在拍照请等一下
            p = popen("python shexian.py", "r");               //通过popen函数,运行py文件访问接口,获取 到人脸识别后程序的结果存入文件流p(1表示识别成功)
            fread(ch, 1, 1, p);                          //读取到p文件流中的信息,存入字符数组ch

            if (ch[0] == '1')                      //如果比对后的结果为1,则比对成功,开锁
            {
                printf("Identify success! The lock okokokokokokokokokokok++++++\n"); //拍照成功
                digitalWrite(22, HIGH);
                sleep(2);
                digitalWrite(22, LOW);
                break;
            }
            else {
                printf("Error recognition! Illegal visitor nononononononononno\n");
                
                sleep(2);
                digitalWrite(22, HIGH);
            }

        

    }

}

特别声明:

1.python人脸代码里面有中文符,传到SecureCRT(树莓派)上可能会出现乱码,那么在所做项目文件下vi一个shexian1.py,将shexian.py里面内容再次输入一遍,再cp shexian1.py shexian.py就好了  

2.在SecureCRT(树莓派)上shexian.py 里面的print(r.text)  一定要注释掉,不然会返回1但是就是运行不成功 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值