视频检测+定位+测距+控制鼠标移动

简介: 视频检测+定位+测距+控制鼠标移动

项目需求


  自己也是一时心血来潮,想着把自己以前的东西串以下,借用一个例子,将以往的知识点串一次。这次需要串的知识点有:目标的检测+目标测距+鼠标移动


  需要完成的构想功能点如下描述:运行程序可以打开摄像头,摄像头显示画面可以检测出是否有人脸,当存在人脸的时候将其框住,并测定人脸距离摄像头的距离,当人脸移动的时候鼠标能够跟着移动。




需求拆分


  根据项目需求,我将功能点拆分如下几点:


  1. 借用OpenCv中的xml进行人脸检测(详细可见往期链接:juejin.cn/post/707483… );


  1. 使用单目相机进行“张氏标定”后得FX&FY计算目标物距离镜头距离(详细可见往期链接:juejin.cn/post/711974…


  1. 使用pymouse进行鼠标坐标点控制移动(详细可见往期链接:juejin.cn/post/713348…




验证调试


  由于上述各功能点我已全部实现,现在需要的是将上述功能点进行“搭积木”并进行调试优化,其中人脸检测部分可直接见我在功能拆分中的部分


format_image(image)...
复制代码


 进行距离测试的时候,需要自己先行获取自己摄像头的焦距,我这里采用了矩形框计算距离(除了必相机的焦距还需要指导自己人脸的宽高值,其单位为米),代码部分如下:

def GetDistens(w, h):
    FX = 1321.395754
    FY = 1308.603399
    Face_x = 0.15
    Face_y = 0.22
    Distensx = (FX * Face_x) / w
    Distensy = (FY * Face_y) / h
    Distens = (Distensx + Distensy) / 2
    return Distens
复制代码


  使用的是pymouse进行鼠标的移动,大家需要注意的一点就是还有pymouse配套的库,大家可以自行搜索,代码如下:

def MoveMouse(x, y, w, h):
    labx = (x+w)
    laby = (y+h)
    labx , laby = int(labx), int(laby)
    m = PyMouse()
    m.move(labx , laby )  # 鼠标移动到(x,y)位置
复制代码


  大家需要注意的是进行在图像中进行putText过程中需要调整一下排列的位置,还有就是只有在含有目标的时候才会有目标距离显示。主程序如下:

if __name__ == "__main__":
    capture = cv2.VideoCapture(1)
    fps = 0.0
    while (True):
        t1 = time.time()
        ref, frame = capture.read()
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # 进行检测
        (p_image, face_coor) = format_image(frame)
        if face_coor is not None:
            # 获取人脸的坐标,并用矩形框出
            [x, y, w, h] = face_coor
            Distens = GetDistens(w,h)
            cv2.putText(frame, "Distens= %.2f" % (Distens), (0, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 1)
            MoveMouse(x, y, w, h)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        fps = (fps + (1. / (time.time() - t1))) / 2
        cv2.putText(frame, "FPS= %.2f" % (fps), (0, 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1)
        cv2.imshow("video", frame)
        c = cv2.waitKey(1) & 0xff
        if c == 27:
            capture.release()
            break
    capture.release()
    cv2.destroyAllWindows()
复制代码




结果展示


  今天先欠下一张鼠标跟着人脸移动的动图,掘金还不能上传视频,后期补偿给大家,喜欢的可以点个赞再走。image.png


image.png


相关文章
|
JSON 数据格式
【异常】com.alibaba.fastjson.JSONException: unclosed string : U
【异常】com.alibaba.fastjson.JSONException: unclosed string : U
2771 0
|
机器学习/深度学习 人工智能 API
如何在 TensorRT-LLM 中支持 Qwen 模型
大型语言模型正以其惊人的新能力推动人工智能的发展,扩大其应用范围。然而,由于这类模型具有庞大的参数规模,部署和推理的难度和成本极高,这一挑战一直困扰着 AI 领域。此外,当前存在大量支持模型部署和推理的框架和工具,如  ModelScope 的 Model Pipelines API,和 HuggingFace 的 Text Generation Inference 等,各自都有其独特的特点和优势。然而,这些工具往往未能充分发挥  GPU 的性能。
72341 0
如何在 TensorRT-LLM 中支持 Qwen 模型
|
传感器 存储 监控
树莓派的应用场景有哪些
树莓派是一种小型、低成本的计算机,广泛应用于教育、家庭自动化、媒体中心、游戏、机器人、物联网项目等领域,支持多种操作系统和编程语言。
2251 8
|
人工智能 测试技术
真相了!大模型解数学题和人类真不一样:死记硬背、知识欠缺明显,GPT-4o表现最佳
【8月更文挑战第15天】WE-MATH基准测试揭示大型多模态模型在解决视觉数学问题上的局限与潜力。研究涵盖6500题,分67概念5层次,评估指标包括知识与泛化不足等。GPT-4o表现最优,但仍存多步推理难题。研究提出知识概念增强策略以改善,为未来AI数学推理指明方向。论文见: https://arxiv.org/pdf/2407.01284
251 1
|
机器学习/深度学习 计算机视觉 Python
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
|
测试技术 Linux 应用服务中间件
Linux测试工具httpd-tools
Linux测试工具httpd-tools
640 0
|
存储 边缘计算 弹性计算
云计算技术与服务
云计算技术与服务
1275 1
|
关系型数据库 MySQL Linux
docker-compose 部署 MySQL 8
docker-compose 部署 MySQL 8
|
数据可视化 算法 安全
自动检测图像中的圆形目标并可视化检测到的圆
说明如何自动检测图像中的圆或圆形目标并可视化检测到的圆。
631 0
|
传感器 SQL 安全
瑞数信息《2023 API安全趋势报告》重磅发布: API攻击持续走高,Bots武器更聪明
如今API作为连接服务和传输数据的重要通道,已成为数字时代的新型基础设施,但随之而来的安全问题也日益凸显。为了让各个行业更好地应对API安全威胁挑战,瑞数信息作为国内首批具备“云原生API安全能力”认证的专业厂商,近年来持续输出API安全相关观点,为政企用户做好API安全防护提供参考指南。
426 0
瑞数信息《2023 API安全趋势报告》重磅发布: API攻击持续走高,Bots武器更聪明