找回密码
 注册
搜索
查看: 2722|回复: 1

找失踪孩子——人脸识别

[复制链接]
 楼主| 木翼光 发表于 2018-11-21 10:00 | 显示全部楼层 |阅读模式
本帖最后由 山西-真心 于 2018-11-21 18:35 编辑

我在用人脸识别找一个小孩
https://bbs.baobeihuijia.com/thread-218332-1-1.html


搜索用的图片都是网上别人的旅游、逛街拍的图片等等,但图片还是不够多,我在想一个大家一起找的方法:
一个志愿者上班、旅游、逛街等等时,多拍一些周边的照片,回到家对照片进行识别,
照片分享给其他人进行识别。


程序流程

为了保证您发布的信息能够及时的得到回复及关注
建议您登陆后进行发帖操作.请点击这里
登陆注册
 楼主| 木翼光 发表于 2018-11-21 18:49 | 显示全部楼层
  1. import face_recognition
  2. import cv2
  3. import os
  4. import shutil

  5. """
  6. 根据失踪儿童照片所在目录known_children,获取人脸特征
  7. 匹配判断unknown_pic目录中人脸
  8.     a1.jpg a2.jpg a3.jpg 是匹配的同一个人
  9.     图片来源可以是摄像头拍的照片、百度微博上爬取(比如搜索 街道 热闹)
  10. 结果输出到result目录(匹配的图片以 'A_' 前缀)
  11. 处理后的图片放入finish目录
  12. """

  13. # 当前目录
  14. GlobalDir = os.getcwd()
  15. # 储存失踪儿童的名字,取自文件名(不要使用中文,会乱码。需要的自行修改代码),用于标注
  16. names = []
  17. # 失踪儿童的脸型数据
  18. face_encodings = []
  19. # 脸型数据匹配的阈值
  20. recognizeTolerance=0.50


  21. def recognizeFace(unknown_image,filename, outputUnknow=False):
  22.     """
  23.     :param unknown_image: 需要进行判断的图片
  24.     :param outputUnknow: 未找到匹配时,是否还输出图片
  25.     """

  26.     print(filename)

  27.     unknown_face_encodings = face_recognition.face_encodings(unknown_image)

  28.     face_locations = face_recognition.face_locations(unknown_image)

  29.     finded=False
  30.     for i in range(len(unknown_face_encodings)):

  31.         unknown_encoding = unknown_face_encodings[i]

  32.         face_location = face_locations[i]

  33.         top, right, bottom, left = face_location

  34.         results = face_recognition.compare_faces(face_encodings, unknown_encoding, tolerance=recognizeTolerance)
  35.         for j in range(len(results)):
  36.             if results[j]:
  37.                 finded=True
  38.                 name = names[j]
  39.                 cv2.putText(unknown_image, name, (left - 10, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

  40.         cv2.rectangle(unknown_image, (left, top), (right, bottom), (0, 255, 0), 2)

  41.     if (outputUnknow or finded):

  42.         unknown_image_rgb = cv2.cvtColor(unknown_image, cv2.COLOR_BGR2RGB)

  43.         # filename = time.strftime('%m%d_%H%M%S', time.localtime(time.time()))
  44.         if finded:
  45.             filename = 'A_'+filename # 有匹配脸型的文件名前缀 A

  46.         cv2.imwrite(GlobalDir + "\\result\" + filename, unknown_image_rgb)


  47. def main():

  48.     rootdir = GlobalDir + '\\known_children'
  49.     list = os.listdir(rootdir)
  50.     for i in range(0, len(list)):
  51.         path = os.path.join(rootdir, list[i])
  52.         if os.path.isfile(path) and path.endswith('.jpg'):
  53.             image = face_recognition.load_image_file(path)
  54.             # images.append(image)
  55.             encoding = face_recognition.face_encodings(image)[0]
  56.             face_encodings.append(encoding)

  57.             names.append(path.split("\")[-1].split(".")[0])

  58.     # unknown_image = face_recognition.load_image_file(GlobalDir + "\\unknown_pic\\a4.jpg")
  59.     # analyzeFace(unknown_image, False)

  60.     rootdir = GlobalDir+'\\unknown_pic'
  61.     list = os.listdir(rootdir)  # 列出文件夹下所有的目录与文件
  62.     for i in range(0, len(list)):
  63.         path = os.path.join(rootdir, list[i])
  64.         if os.path.isfile(path) and path.endswith('.jpg'):
  65.             unknown_image = face_recognition.load_image_file(path)
  66.             recognizeFace(unknown_image,path.split("\")[-1], False)
  67.             shutil.move(path, GlobalDir + '\\finish\\'+path.split("\")[-1])

  68. if __name__ == '__main__':
  69.     main()
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宝贝回家志愿者协会 ( 吉ICP备08101543号 )

GMT+8, 2024-12-22 12:19 , Processed in 0.037833 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表