opencv、dlib、paddlehub人脸检测

news2024/11/25 4:30:04

opencv、dlib、paddlehub检测效果对比。dlib和paddlehub的效果相对好一点。

说明:本文只做人脸检测不识别,找识别的不用看本文。

## 部署说明
# 1. 安装python或conda
# 2. 安装依赖,pip install -r requirements.txt
# 3. 192.168.1.41 修改为你部署机器的IP
# 4. python app_dlib.py启动
# 5. 试验,http://192.168.1.41:7049
# 6. 接口,http://192.168.1.41:7049/run/predict/
接口参数,post请求,body传1个包含base64图片的JSON,替换图片就行
{
    fn_index: 0, 
    data: ["data:image/jpeg;base64,/9j/4AAQSkZJtXlnut7A8QOeSpiTO/DNIrhn3HpugKCATj590EhqShGP8VInOz6TrioYTyGR0oyiMh/dnEpkQ0Pu+Yy+QWamDMkbve9U6MyWdEa+MqHDn1zUtpCT4f/AC//2Q=="], 
    session_hash: "s1oy98lial"
}

依赖(用1个就行)

dlib需要C++编译器(gcc 或 vs)

gradio
opencv-python
dlib
paddlehub

opencv检测

import gradio as gr
import cv2

# 加载人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye_tree_eyeglasses.xml')

# UGC: Define the inference fn() for your models
def model_inference(image):
    # 加载图像
    # image = cv2.imread(image)
    # 将图像转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 进行人脸检测
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    # 在图像上标记人脸
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 3)
    # 显示结果
    # cv2.imshow('Face Detection', image)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
    json_out = {"result": len(faces)}
    return image,json_out


def clear_all():
    return None, None, None

with gr.Blocks() as demo:
    gr.Markdown("人脸检测")

    with gr.Column(scale=1, min_width=100):
        img_in = gr.Image(value="1.png",
                          label="Input")

        with gr.Row():
            btn1 = gr.Button("Clear")
            btn2 = gr.Button("Submit")
        img_out = gr.Image(label="Output").style(height=400)
        json_out = gr.JSON(label="jsonOutput")

    btn2.click(fn=model_inference, inputs=img_in, outputs=[img_out, json_out])
    btn1.click(fn=clear_all, inputs=None, outputs=[img_in, img_out, json_out])
    gr.Button.style(1)

demo.launch(server_name='192.168.1.41', share=True, server_port=7048)



 

 

dlib检测

import gradio as gr
import cv2
import dlib

detector = dlib.get_frontal_face_detector()
# predictor = dlib.shape_predictor(
#     "dlib_model/shape_predictor_68_face_landmarks.dat"
# )

# UGC: Define the inference fn() for your models
def model_inference(image):
    # 加载图像
    # image = cv2.imread(image)
    # 将图像转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 进行人脸检测
    faces = detector(gray, 1)
    for face in faces:
        # 在图片中标注人脸,并显示
        left = face.left()
        top = face.top()
        right = face.right()
        bottom = face.bottom()
        cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)

        # shape = predictor(image, face)  # 寻找人脸的68个标定点
        # # 遍历所有点,打印出其坐标,并圈出来
        # for pt in shape.parts():
        #     pt_pos = (pt.x, pt.y)
        #     cv2.circle(image, pt_pos, 1, (0, 255, 0), 2)
    json_out = {"result": len(faces)}
    return image,json_out


def clear_all():
    return None, None, None

with gr.Blocks() as demo:
    gr.Markdown("人脸检测")

    with gr.Column(scale=1, min_width=100):
        img_in = gr.Image(value="1.png",
                          label="Input")

        with gr.Row():
            btn1 = gr.Button("Clear")
            btn2 = gr.Button("Submit")
        img_out = gr.Image(label="Output").style(height=400)
        json_out = gr.JSON(label="jsonOutput")

    btn2.click(fn=model_inference, inputs=img_in, outputs=[img_out, json_out])
    btn1.click(fn=clear_all, inputs=None, outputs=[img_in, img_out, json_out])
    gr.Button.style(1)

demo.launch(server_name='192.168.1.41', share=True, server_port=7049)



 PaddleHub检测

import gradio as gr
import paddlehub as hub
import cv2

#直接调用PaddleHub中的人脸检测
module = hub.Module(name="ultra_light_fast_generic_face_detector_1mb_640")

def model_inference(image):
    # images(list[numpy.ndarray]): 图片数据,ndarray.shape为[H, W, C],BGR格式;
    # paths(list[str]): 图片的路径;
    # batch_size(int): batch的大小;
    # use_gpu(bool): 是否使用GPU;
    # visualization(bool): 是否将识别结果保存为图片文件;
    # output_dir(str): 图片的保存路径,当为None时,默认设为face_detector_640_predict_output;
    # confs_threshold(float): 置信度的阈值。
    faces = module.face_detection([image], visualization=False)[0]["data"]
    for face in faces:
        # 在图片中标注人脸,并显示
        left = int(face["left"])
        top = int(face["top"])
        right = int(face["right"])
        bottom = int(face["bottom"])
        cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)

    json_out = {"result": len(faces)}
    return image,json_out


def clear_all():
    return None, None, None

with gr.Blocks() as demo:
    gr.Markdown("人脸检测")

    with gr.Column(scale=1, min_width=100):
        img_in = gr.Image(value="1.png",
                          label="Input")

        with gr.Row():
            btn1 = gr.Button("Clear")
            btn2 = gr.Button("Submit")
        img_out = gr.Image(label="Output").style(height=400)
        json_out = gr.JSON(label="jsonOutput")

    btn2.click(fn=model_inference, inputs=img_in, outputs=[img_out, json_out])
    btn1.click(fn=clear_all, inputs=None, outputs=[img_in, img_out, json_out])
    gr.Button.style(1)

demo.launch(server_name='192.168.1.41', share=True, server_port=7050)



APIPOST调接口测试

 

 

axios调用示例

var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'http://192.168.1.41:7050/run/predict/',
  headers: {'content-type': 'application/json'},
  data: '{\r\n    fn_index: 0, \r\n    data: ["data:image/jpeg;base64,/9j/4gM5jj4ihEoiOUxSpDKSBjsPFBYRtXlnut7A8QOeSpiTO/DNIrhn3HpugKCATj590EhqShGP8VInOz6TrioYTyGR0oyiMh/dnEpkQ0Pu+Yy+QWamDMkbve9U6MyWdEa+MqHDn1zUtpCT4f/AC//2Q=="], \r\n    session_hash: "s1oy98lial"\r\n}'
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

jquery调用示例

const settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://192.168.1.41:7050/run/predict/",
  "method": "POST",
  "headers": {
    "content-type": "application/json"
  },
  "data": "{\r\n    fn_index: 0, \r\n    data: [\"data:image/jpeg;base64,/9j/4AAQSkZJUWYgM5jj4ihEoiOUxSpDKSBjsPFBYRtXlnut7A8QOeSpiTO/DNIrhn3HpugKCATj590EhqShGP8VInOz6TrioYTyGR0oyiMh/dnEpkQ0Pu+Yy+QWamDMkbve9U6MyWdEa+MqHDn1zUtpCT4f/AC//2Q==\"], \r\n    session_hash: \"s1oy98lial\"\r\n}"
};

$.ajax(settings).done(function (response) {
  console.log(response);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 基本使用

安装 Linux安装 # 1、查看当前Linux系统版本 Linux系统版本需要>3.0 [rootzjrs_test2_152 ~]# uname -a Linux zjrs_test2_152 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [rootzjrs_test2_152 ~]# uname -r 3.10.0-957.el…

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭(C#) Baumer工业相机Baumer工业相机BGAPI SDK的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK控制相机数据流的方式2.使用BGAPISDK控…

AOP--@DeclareParents--引入新功能

目录 引入 解析 示例 引入 Java不是动态语言;一旦类编译完成了,我们就很难再为该类添加新的功能了切面能够为现有的方法增加额外的功能,为什么不能为一个对象增加新的方法呢?实际上,利用被称为引入的AOP概念&#x…

从数据开始,构建值得信赖的生成式AI应用

生成式AI有望从根本上打开新世界机遇的大门:从能够个性化回复的对话式聊天机器人,到各种应用的代码,再到营销传播的定制化内容......生成式AI正在彻底改变企业的运作方式。越来越多的领先企业正在构建可信的生成式AI应用,让它们在…

信息共享、管理协作!工程劳务管理模板让企业内部更加通畅

随着建筑行业的快速发展,工程劳务管理变得越来越复杂,同时企业也需要更加高效地管理劳务人员的信息、工资、考勤等方面。因此,工程劳务管理系统应运而生,帮助企业解决这些问题。作为一款低代码开发平台,百数根据市面上…

面向 MSP 的IT管理

MSP(管理服务提供商)是通过建立自己的网络运作中心(NOC,Network Operating Center)来实施管理服务的。用户的网络通过WAN与MSP的NOC相连,并使用加密技术保证信息在网络上的传输安全。通过NOC,MSP可以实现远程的管理、实…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 (1)客户端发送请求到 Director Server&a…

前后端 java 对接海康威视监控-hls实现h5播放

海康的获取监控预览流的接口当中支持 rtsp、rtmp、hls等协议。 这篇文章主要是说hls协议的。 贴上海康的开发平台地址,其中有对应的API:海康开发平台 1、java层面代码 这里除了main方法之外,有两个方法,分别是: 1&am…

【Python】一文教你如何使用 Requests 库

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

审视自己再出发,在职读研从人民大学与加拿大女王大学金融硕士项目起航

有人说,人生并非一帆风顺。是的,在人生的道路上,总会出现各种各样的麻烦。或者认真学习不见成效,或是努力工作得不到赏识。人生中最困难的事情就是审视自己,当我们意识到自己需要提升时,往往是拥有强大能量…

【Linux】线程分离和线程互斥

终于到线程互斥了~ 文章目录 前言一、线程分离 如何理解线程库和线程ID二、线程互斥总结 前言 在上一篇文章中我们学习了线程控制,比如创建一个线程,取消一个线程以及等待线程,这篇文章我们讲两个非常重要的概念,一个是线…

CDH 之 hive 升级至 hive-3.1.3 完美踩坑过程

一、准备工作 1.1 前言 这是博主在升级过程中遇到的问题记录,大家不一定遇到过,如果不是 CDH 平台的话,单是 hive 服务升级应该是不会有这些问题的,且升级前博主也参考过几篇相关 CDH 升级 hive 服务的博文,前面的升级…

go语言操作以太坊智能合约

操作中要注意版本问题 geth版本、golang版本等 在remix环境中写好合约后,进行编译得到abi文件 简单举例 Hello.sol合约 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0;contract Hello {string Msg;function setMsg(string memory _msg) public{Msg_msg…

SM2密码算法规范介绍

目录 1、SM2的密钥对 1.1、SM2公钥 1.2、SM2私钥 2、密钥数据格式 2.1、 GMT0009 2.2、 GMT0016 2.3、 GMT0018 3、加密数据格式 3.1、GMT0009 3.2、GMT0016 3.3、GMT0018 4、签名数据格式 4.1、GMT0009 4.2、GMT0016 4.3、GMT0018 1、SM2的密钥对 1.1、SM2公钥…

java版DVD影碟片出租赁系统C/S模式 java电影购票系统课程设计

系统采用c/s架构,当然,你可以服务端、客户端都在同一台电脑上运行; 也可以在同一局域网内服务端、客户端在其它不同电脑上运行; 如果你有云服务器,可将Service端代码部署至云服务器上,客户端在任何一台有…

不愧是阿里P8出手的并发编程笔记!颠覆了我以往“正确“的认知

对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。 那到底应该怎么学习并发编程…

浅析给水管网动态水力建模数据及其管理

摘要:给水管网在城市生产及生活中发挥着十分重要的作用,所以,保证其正常运行便显得尤为必要了。本文将基于给水管网动态水力建模数据及其管理展开相应的分析,以期促进城市给水管网运行质量的提高,为同行提供一些有益的…

HTML4

前序知识 认识两位先驱 计算机基础知识 计算机俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算、逻辑计算,还具有存储记忆功能。计算机由 硬件 软件组成 C/S架构与B/S架构 上面提到的应用软件,又分为两大类…

软件测试之登录测试详解

一、功能测试--登录功能性测试用例包括:1.什么都不输入,点击提交按钮,看提示信息。(非空检查)2.输入已注册的用户名和正确的密码,验证是否登录成功;3.输入已注册的用户名和不正确的密码&#xf…

PerformanceRunner即将发布2023年新版本,具体功能有哪些?

PerformanceRunner(简称PR)是国内专业的支持http、https、websocket、tcp/ip、MQ等各种协议、10万海量并发、可靠的性能测试工具/压力测试工具,降低了应用系统运行风险。 PerformanceRunner即将发布2023年新版本,具体功能有哪些? 1.录制时单机…