实现计算机视觉——人脸检测

磐创AI

    概述:计算视觉是人工智能的一部分,旨在设计能够像人类视觉一样进行观察的智能算法。
    在本文中,我们将介绍三个主要范围。
    · 人脸检测
    · 物体检测
    · 面部识别
    · 对象跟踪
    在第一篇文章中,我们将重点介绍计算机视觉,以及基于 Python OpenCV 库的人脸识别应用。
    在以后的文章中,我们将演示对象识别、人脸识别和对象跟踪在实时视频中的应用。
    
    目录
    1.介绍
    2.人脸检测算法
    3.人脸检测实现
    4.OpenCV 的替代方案
    5.结论
    6.参考文献
    介绍
    本文的读者将能够了解几个视觉计算应用程序的功能、它们在后台和架构中的操作,以及实现应用程序以供实际使用的必要步骤。
    
    现在让我们看看我们之前已经讨论过的一些可以在该领域开发的其他应用程序。
    人脸检测在找到人脸时会放一个小方框,并为这些人命名。我们将做一个有点类似于这个的实现。
    我们有这张来自微软的 Kinect 图像,它与运动检测的 Xbox 视频游戏集成在一起。
    当有人移动方向盘时,你可以使用计算机视觉来检测控制汽车的人。需要计算机视觉技术来进行图像识别,也就是说,机器人需要看到它面前的东西来做出决定。
    另一个例子是自动驾驶汽车。你可以注意到这辆车中有一系列传感器,例如,它需要检测行人以避免撞到人。
    你需要检测交通标志或是否有红绿灯。
    如果信号为红色,则必须停止,如果信号为绿色,则必须继续。为此,使用计算机视觉技术,包括所使用的技术。这种人脸检测技术也用于物体检测。
    如果他识别出轨道上的物体,他就必须采取某种行动。增强现实、虚拟现实的想法使用计算机视觉技术。
    这张SD光束的图像显示的是不存在的人。算法使用了一种叫做GAN的技术生成了这些人,即生成对抗网络,这是深度学习人工神经网络中的一个超级领域。
    最后,我们还有另一个例子,称为 deep Durin,它是由神经网络生成的图像。你可以看到这些迷幻的图像,在这个图像的某些部分有一些特征,有一些动物的痕迹,即算法已经有了关于动物的信息,关于这些动物的图像非常类似于一种算法,这种算法将图像的特征与风景图像相结合。
    一个应用示例是深度人脸,它是人工智能创建的人脸。
    
    人脸检测算法
    级联分类器是一种算法,你将学习对某个对象进行分类以开始训练。
    我们需要两组图像,第一组带有你要检测的正面图像的人脸,第二组图像称为负图像,它们不是简单的图像。
    
    例如,如果你想检测汽车,你会将汽车作为正图像,将各种型号和类型的汽车作为负图像。
    任何其他类型的图像,你都需要将这两组图像提交给算法进行训练。
    在机器学习领域有一种叫做 Ada boost 的算法训练。我不会详细介绍该算法的工作原理,但基本上,你把这个算法应用到正图像和负图像上,这个想法就是特征选择。
    我们有几个特征或者是这些黑色和白色的小方块,你可以用这些特征来分类一张脸。
    这些小方块用于图像的每个子窗口。
    这个窗口概念表明它从左到右,从上到下移动。
    人脸检测实现
    我们将使用 Python OpenCV 库,它是市场上用于开发可视化计算应用程序的主要工具之一。
    
    下载训练截图,以及带有人脸识别训练的 Cascade Classifier.XLM 训练。
    现在让我们用 Python 展示我们的代码:
    import cv2 # OpenCV Import
    img = cv2.imread('/content/imagem-computer-vision.jpg', cv2.IMREAD_UNCHANGED) # Import Image with Peoples
    cv2_imshow(img)
    
    detector_face = cv2.CascadeClassifier('/content/haarcascade_frontalface_default.xml')
    imagem_cinza = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2_imshow(imagem_cinza)
    
    deteccoes = detector_face.detectMultiScale(imagem_cinza, scaleFactor=1.3, minSize=(30,30))
    deteccoes
    array([[1635,  156,  147,  147],
                      [ 284,  262,  114,  114],
                      [1149,  260,  129,  129],
                      [ 928,  491,  171,  171],
                      [ 222,  507,  151,  151]], dtype=int32)
    for (x, y, l, a) in deteccoes:
        #print(x, y, l, a)
        cv2.rectangle(img, (x, y), (x + l, y + a), (0,255,0), 2)
    cv2_imshow(img)
    
    我们通过 Google Colab notebook 可视化了人脸识别的处理过程:
    
    将返回数字 5 表示他检测到5张脸,我们有这些点来指示每张脸,以便你更好地理解,让我们使用最后一张脸。
    len(deteccoes) # Fotal Faces= 5
    5
    OpenCV 的替代方案
    在选择 OpenCV 的替代方案时,我们采用了以下标准:
    · 易于使用
    · 可用性
    · 可扩展性
    · 稳健性
    · 灵活性
    以下是我的替代方案列表,遵循上述标准:
    1.Microsoft Computer Vision API
    2.AWS Rekognition
    3.Google Cloud Vision API
    4.Scikit-Image
    5.SimpleCV
    6.Azure Face API
    7.DeepDream
    8.IBM Watson Visual Recognition
    9.Clarifi
    10.DeepPy
    结论
    在本文中,我们使用 Python OpenCV 库作为一种工具,以敏捷高效的方式加快人脸识别速度。
    参考