当前位置:   article > 正文

从零开始搭建人脸106点关键点检测模型(一):准备数据集——调用face++ api检测人脸106关键点_面部关键点检测106点

面部关键点检测106点

        无聊的发慌打算写个搭建人脸106点关键点检测模型的简易教程,包括数据集准备,模型搭建,训练以及推理测试,保证简单易懂。第一步,就是数据集的准备。我们首先想到的就是开源的人脸关键点数据集300W,WFLW等。但是开源的缺少106点的数据集,所以我们可以调用face++的api标注106关键点作为我们训练的数据集。(虽然不是很准)。

一.下载数据。

我们选用WFLW数据集的图片(商汤开源的人脸98点数据集),下面是下载链接。链接:https://pan.baidu.com/s/1XkUe-mJQmnrVjy84DkjRNQ 
提取码:eq90 
 

二.调用face++api标注人脸。

https://www.faceplusplus.com.cn/官网链接。进入官网点击右侧控制台会进入注册页面,注册一下。到控制台应用管理创建一个APIkey。创建好会有API Key和API Secret后面会有用。准备就绪后,下面直接上调用代码。代码里的Key和Secret换上你自己的。还有下载下来的图片路径换上你的路径。

  1. # -*- coding: utf-8 -*-
  2. import urllib.request
  3. import urllib.error
  4. import time
  5. import cv2
  6. import json,os
  7. import numpy as np
  8. http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
  9. key = ""
  10. secret = ""
  11. f=open('WFLW_106landmark.txt','a')
  12. t=1
  13. dir_path=r"D:\py\datasets\WFLW_ALL"
  14. img_names=os.listdir(dir_path)
  15. for img_name in img_names:
  16. # if t<6551:
  17. # t=t+1
  18. # continue
  19. filepath=os.path.join(dir_path,img_name)
  20. #filepath = "3.jpg"
  21. boundary = '----------%s' % hex(int(time.time() * 1000))
  22. data = []
  23. data.append('--%s' % boundary)
  24. data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_key')
  25. data.append(key)
  26. data.append('--%s' % boundary)
  27. data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_secret')
  28. data.append(secret)
  29. data.append('--%s' % boundary)
  30. fr = open(filepath, 'rb')
  31. data.append('Content-Disposition: form-data; name="%s"; filename=" "' % 'image_file')
  32. data.append('Content-Type: %s\r\n' % 'application/octet-stream')
  33. data.append(fr.read())
  34. fr.close()
  35. data.append('--%s' % boundary)
  36. data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_landmark')
  37. data.append('2')
  38. data.append('--%s' % boundary)
  39. data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_attributes')
  40. data.append(
  41. "gender,age,smiling,headpose,facequality,blur,eyestatus,emotion,ethnicity,beauty,mouthstatus,eyegaze,skinstatus")
  42. data.append('--%s--\r\n' % boundary)
  43. for i, d in enumerate(data):
  44. if isinstance(d, str):
  45. data[i] = d.encode('utf-8')
  46. http_body = b'\r\n'.join(data)
  47. # build http request
  48. req = urllib.request.Request(url=http_url, data=http_body)
  49. # header
  50. req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)
  51. try:
  52. # post data to server
  53. resp = urllib.request.urlopen(req, timeout=200)
  54. # get response
  55. qrcont = resp.read()
  56. # if you want to load as json, you should decode first,
  57. # for example: json.loads(qrount.decode('utf-8'))
  58. #print(qrcont.decode('utf-8'))
  59. result=json.loads(qrcont.decode('utf-8'))
  60. #print(1)
  61. #img=cv2.imread(filepath)
  62. for i in range(result['face_num']):
  63. if 'landmark' not in result['faces'][i].keys():
  64. continue
  65. landmark=result['faces'][i]['landmark']
  66. landmark_list=[]
  67. for dict_key in landmark.keys():
  68. #print(landmark.keys())
  69. landmark_list.append([landmark[dict_key]['x'],landmark[dict_key]['y']])
  70. #cv2.circle(img,(landmark[dict_key]['x'],landmark[dict_key]['y']),2,(0,0,255))
  71. landmark_array=np.array(landmark_list)
  72. landmark_str = ' '.join(list(map(str,landmark_array.reshape(-1).tolist())))
  73. label = '{} {}\n'.format(img_name, landmark_str)
  74. f.writelines(label)
  75. # cv2.namedWindow('face++ landmark',0)
  76. # cv2.imshow('face++ landmark',img)
  77. # cv2.waitKey(0)
  78. print(t)
  79. t=t+1
  80. except urllib.error.HTTPError as e:
  81. print(e.read().decode('utf-8'))
  82. f.close()

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/340544
推荐阅读
相关标签
  

闽ICP备14008679号