目录
1.准备工作
- 注册翔云账号,购买人脸识别接口
- 访问接口需要的参数
- key 与 Secret 可以在个人中心查看
- USB 摄像头测试
-
首先将 USB 摄像头插入到香橙派 的 USB 接口中
-
然后通过 lsmod 命令可以看到内核自动加载了下面的模块
3. 安装 fswebcam
sudo apt updatesudo apt-get install -y fswebcam
安装完 fswebcam 后可以使用下面的命令来拍照
sudo fswebcam -d /dev/video0 --no-banner -r 1280x720 -S 5 ./image.jpg
-d 选项用于指定 USB 摄像头的设备节点--no-banner 用于去除照片的水印-r 选项用于指定照片的分辨率-S 选项用设置于跳过前面的帧数./image.jpg 用于设置生成的照片的名字和路径
拍完照后可以将
拍好的图片传到电脑上观看。
注意:在执行程序前需要在执行文件的路径先保存有一张用来识别的图片
- 继电器及电磁锁的接线
2、编写访问接口的代码,采用python编程访问
#coding=UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import requests #导包并设置字符编码,因为在py中,出现中文默认会报错
url = r'https://netocr.com/api/facerecog.do' #翔云api的接口地址
key = r'用户个人的key码,可在个人中心查看'
secret = r'用户个人的secret码,可在个人中心查看'
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
if str(r.text).find('是')!=-1:
print(1)
else:
print(0)
#如果返回的信息中带有“是”,则表示比对成功输出1,否则表示比对失败输出0
#如果想查看接口返回的所有数据,用print(r.text)
3. 主程序的编写
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<wiringPi.h>
int main(){
FILE *p;
int start;
int init;
char cmd[1];
init=wiringPiSetup ();
pinMode(16,OUTPUT);
digitalWrite(16,HIGH);
if(init==-1)
{
printf("init error\n");
}
while(1){
printf("输入1开启人脸识别...\n");
scanf("%d",&start);
if (start == 1){
memset(cmd,'0',1);
printf("请勿移动........\n");
system("fswebcam --no-banner ./file2.jpg"); //通过system函数,驱动摄像头拍照
printf("正在识别,请稍等....\n");
p=popen("python p1.py","r"); //通过popen函数,运行py文件访问接口,获取到人脸识别的结果存入文件流p(1表示识别成功)
fread(cmd,1,1,p); //读取到p文件流中的信息,存入字符数组cmd
if(strstr(cmd,"1")!=NULL)
{
printf("识别成功!开锁\n");
digitalWrite(16,LOW);
delay(4000);
digitalWrite(16,HIGH);
}
else{
printf("识别错误!\n");
}
}
}
return 0;
}
4. 运行程序
识别成功后开锁,开锁后自动恢复成初始状态