CV | Face++(旷视)人脸检测API使用笔记


题记:

作为最后一个假期的时光,抽空试试看~ 其实是因为一个看不到终点的小project(希望可以check掉^_____________^


Face++(旷视科技)的产品近几年受到业界广泛的关注,其应用场景的成熟(如:刷脸)影响着生活形式,也决定着其自身的发展前景。资料和推广就不粘了,大家可以自行搜索。本文的出发点是想记录一下使用其开放api的笔记。


旷视官网(API文档链接)上给出的教程很人性化,可读性很高。基本上是一步步照做的。


1. 预处理

注册、资料填写、以及验证等等。创建个人的Key和密钥,在请求API时会用到,如果是个人测试,可以勾选免费试用版本。


2. API接入

在上面的链接中找到对应版本的接入工具,下载到目标路径,解压即可。

注:示例中给出的是Linux ubuntu系统下的操作流程。OS X和Windows的操作流程大致相同,使用Pycharm操作同样可行。


进入aip-python-sdk文件夹,有setup.py文件。接下来,进行环境配置。输入指令:

python setup.py install

依赖request和pillow包,如果没有pip会报错,只要apt-get install即可。安装成功会提示出相应的版本。貌似是和baidu合作的工具,因为有baidu的字样~

Linux截图:


OS X截图:



3. 调用API

接入工具配置好之后,API就可以调用了。官网上有给相应语言的教程,我使用的是python版本。

# -*- coding: utf-8 -*-
import urllib2
import urllib
import time
http_url='https://api-cn.faceplusplus.com/facepp/v3/detect'
key = "个人APIKey"
secret = "对应密钥"
filepath = r"./../pics/test.jpg" # 图片路径
boundary = '----------%s' % hex(int(time.time() * 1000))
data = []
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_key')
data.append(key)
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_secret')
data.append(secret)
data.append('--%s' % boundary)
fr=open(filepath,'rb')
data.append('Content-Disposition: form-data; name="%s"; filename=" "' % 'image_file')
data.append('Content-Type: %s\r\n' % 'application/octet-stream')
data.append(fr.read())
fr.close()
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_landmark')
data.append('1')
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_attributes')
data.append("gender,age,smiling,headpose,facequality,blur,eyestatus,emotion,ethnicity,beauty,mouthstatus,eyegaze,skinstatus")
data.append('--%s--\r\n' % boundary)

http_body='\r\n'.join(data)
#buld http request
req=urllib2.Request(http_url)
#header
req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)
req.add_data(http_body)
try:
	#req.add_header('Referer','http://remotserver.com/')
	#post data to server
	resp = urllib2.urlopen(req, timeout=5)
	#get response
	qrcont=resp.read()
	print qrcont

except urllib2.HTTPError as e:
    print e.read()
	
	

将key和secret分别替换为之前申请的APIKey和密钥。运行,则会得到返回结果。Json格式的数据:(部分节选)

{"image_id": "u30XL08+O+LVSlNEiPmh3A==", "request_id": "1519732649,684ef3f8-cb64-42cc-aa59-f7359ce2d2b3", "time_used": 516, "faces": [{"landmark": {"mouth_upper_lip_left_contour2": {"y": 504, "x": 442}, "mouth_upper_lip_left_contour3": {"y": 512, "x": 452}, "mouth_lower_lip_right_contour3": {"y": 553, "x": 501}, "mouth_upper_lip_left_contour1": {"y": 496, "x": 451}, "left_eye_upper_left_quarter": {"y": 326, "x": 414}, "left_eyebrow_lower_middle": {"y": 310, "x": 409}, "contour_chin": {"y": 620, "x": 487}, "left_eyebrow_lower_left_quarter": {"y": 302, "x": 396}, "right_eyebrow_lower_left_quarter": {"y": 313, "x": 540}, "mouth_lower_lip_right_contour1": {"y": 533, "x": 508}, "mouth_lower_lip_left_contour2": {"y": 535, "x": 446}, "left_eye_bottom": {"y": 344, "x": 423}, "mouth_lower_lip_bottom": {"y": 554, "x": 472}, "contour_left9": {"y": 595, "x": 460}, "mouth_lower_lip_top": {"y": 534, "x": 472}, "right_eyebrow_upper_middle": {"y": 288, "x": 574}, "right_eyebrow_left_corner": {"y": 312, "x": 506}, "right_eye_bottom": {"y": 361, "x": 573}, "contour_left7": {"y": 525, "x": 436}, "contour_left6": {"y": 493, "x": 423}, "contour_left5": {"y": 461, "x": 409}, "contour_left4": {"y": 428, "x": 397}, "contour_left3": {"y": 394, "x": 389}, "contour_left2": {"y": 359, "x": 388}, "contour_left1": {"y": 325, "x": 390}, "left_eye_lower_left_quarter": {"y": 338, "x": 411}, "mouth_upper_lip_top": {"y": 499, "x": 464}, "contour_right3": {"y": 447, "x": 725}, "contour_right2": {"y": 404, "x": 732}, "mouth_left_corner": {"y": 519, "x": 442}, "contour_right4": {"y": 489, "x": 710}, "contour_right7": {"y": 587, "x": 621}, "left_eyebrow_left_corner": {"y": 295, "x": 385}, "nose_right": {"y": 454, "x": 510}, "right_eye_upper_right_quarter": {"y": 342, "x": 594}, "nose_tip": {"y": 439, "x": 446}, "contour_right5": {"y": 527, "x": 687}, "nose_contour_lower_middle": {"y": 468, "x": 455}, "right_eye_top": {"y": 337, "x": 571}, "mouth_lower_lip_left_contour3": {"y": 548, "x": 454}, "right_eye_right_corner": {"y": 354, "x": 613}, "right_eye_

此处附上测试图片:wuli TayTay ^____________________________________^


然后就各取所需~


题外话:

此刻窗外下着雨,我听着钢琴曲,写下这些文字。貌似自然而然,会有一些感性的文字。这个冬天,或许是最后一个寒假,很感激过去的这些日子,完完全全,放下一些挂念,与家人共处,与朋友畅聊。


转眼间,我将硕士毕业,研一突然空白的课表给我带来的震撼感和畅快感,还记忆犹新。那年春天空气中的阳光和树木发芽的味道,想必就是研究生的痕迹感了。研二的paper和实习,再到求职,既充实也很匆忙。研究生期间,最大的收获是自己开始对生活,对自己,有了更加真实真切的认识。有遗憾,也有惊喜。突然明白,有些事情不能太过功利,尽力做好眼前事,其余要学会顺其自然。


雨那么大,却那么安静。新的一年,期许。


狗年大吉!




  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮助你解决这个问题。 首先,你需要安装OpenCV和Pycharm。安装OpenCV的过程可以参考官方文档,安装Pycharm可以到官网下载安装程序。 接下来,你需要准备一些训练数据。可以从网上下载一些人脸数据集,如LFW、CelebA等。 然后,你可以打开Pycharm,创建一个新项目。在项目中创建一个Python文件,并引入OpenCV库。 接下来,你需要编写代码来读取摄像头的视频流,并使用OpenCV人脸检测功能来检测人脸。你可以使用Haar Cascade分类器来进行人脸检测。 最后,你可以使用已经训练好的分类器来进行人脸识别。你可以使用机器学习算法,如支持向量机(SVM)、K近邻(KNN)等来进行人脸识别。 下面是一个简单的示例代码: ```python import cv2 # 加载分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取摄像头视频流 ret, frame = cap.read() # 转化为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) # 绘制人脸框 for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 显示视频流 cv2.imshow('Face Recognition', frame) # 退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows() ``` 这段代码会打开摄像头,读取视频流,并进行人脸检测。检测到人脸后,会在视频中绘制出人脸框。你可以在这段代码的基础上进行人脸识别的实现。 希望这可以帮到你。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值