Python工具箱系列(五十七)

news/2024/10/30 15:28:50/文章来源:https://www.cnblogs.com/shanxihualu/p/18515899

图像分割与人脸识别

众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。图像分割可分为语义分割和实例分割两类,区别如下:

语义分割:将图像中每个像素赋予一个类别标签,用不同的颜色来表示。例如能够区分人脸与头发、能够区分人与动物等

实例分割:无需对每个像素进行标记,只需要找到感兴趣物体的边缘轮廓。

图像分割通常应用如下所示:

专业检测:应用于专业场景的图像分析,比如在卫星图像中识别建筑、道路、森林,或在医学图像中定位病灶、测量面积等;

智能交通:识别道路信息,包括车道标记、交通标志等。

我们使用pixellib库来进行图像分割。

import timefrom pixellib.instance import instance_segmentation
from pixellib.semantic import semantic_segmentationdef semantic_seg(inputfile, outputfile):"""对图像进行语义分割(semantic segmentation)Args:inputfile (string): 输入文件outputfile (string): 输出文件"""segment_image = semantic_segmentation()segment_image.load_pascalvoc_model(r"D:\test\deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")start = time.time()segment_image.segmentAsPascalvoc(inputfile, output_image_name=outputfile,overlay = True)end = time.time()print(f"Inference Time: {end-start:.2f}seconds")def instance_seg(inputfile, outputfile):"""对图像进行实体分割Args:inputfile (string): 输入文件outputfile (string): 输出文件"""segment_image = instance_segmentation()segment_image.load_model(r"D:\test\mask_rcnn_coco.h5")start = time.time()segment_image.segmentImage(inputfile, output_image_name=outputfile,show_bboxes = True)end = time.time()print(f"Inference Time: {end-start:.2f}seconds")def test_semantic():targetimage = r'd:\test\horseandman.png'outimage = r'd:\test\semantic.png'semantic_seg(targetimage,outimage)def test_instance():targetimage = r'd:\test\food.jpg'outputfile = r'd:\test\box.png'instance_seg(targetimage,outputfile)test_semantic()
test_instance()

代码中,test_semantic函数进行语义分割的演示。其中horseandman.png如下图所示,是人、马、狗组合在一起的风景图,人类是可以理解的。

经过人工智能训练后的代码,进行语义分割后,形成的图像如下所示。

上图表明计算机也能够理解。因为输出结果中不同物体的颜色表明了模型识别出的类型。颜色示意如下图所示。

其中棕色代表人、鲜红代表马、紫色代表狗,形成了非常准确的判断。此外,函数test_instance使用模型能够对目标进行识别,并且使用矩形进行标注。下图是有名的互联网大佬聚餐图。

使用上述代码进行实体分割后的效果如下图所示。

效果还差强人意,勉强可用。在上面的代码中,我们加载了在load_pascalvoc_model上训练的用于分割对象的xception模型以及Mask RCNN模型。由于以上模型较大,建议下载后本地化保存与部署。

在实际应用中,还存在着人脸识别的需求。以下代码借助第三方库face_recognition轻松实现了人脸识别的基本能力。

import face_recognition
import cv2targetimage = r'd:\test\food.jpg'# 加载待识别图片
image = face_recognition.load_image_file(targetimage)face_location = face_recognition.face_locations(image,number_of_times_to_upsample=5, model='hog')for location in face_location:top, right, bottom, left = locationprint("已检测到人脸部位,像素区域为:top:{}, right:{}. bottom:{}, left:{}".format(top, right, bottom, left))start = (left, top)end = (right, bottom)cv2.rectangle(image, start, end, (0, 0, 255), thickness=2)cv2.imshow("window", image)
cv2.waitKey(0)

依然使用前面的大佬聚餐图,通过上述代码可以很轻松的完成人脸识别,效果如下所示。

在face_locations函数中,可以选择'hog'与'cnn'两种模型。hog模型更快,cnn更精确。此外,number_of_times_to_upsample缺省为1,如果识别时效果不好,增加这个值。最后,将第三方库的安装过程列举如下。

pip install tensorflow==2.2.0
pip install pixellib
pip install face_recognition

tensorflow推荐安装2.2.0版本,否则上述代码可能跑不下来。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 imports:dirs 事件钩子详解

title: Nuxt.js 应用中的 imports:dirs 事件钩子详解 date: 2024/10/30 updated: 2024/10/30 author: cmdragon excerpt: imports:dirs 是 Nuxt.js 中的一个生命周期钩子,用于扩展导入目录。通过这个钩子,开发者可以灵活地添加、修改或删除项目中的导入目录,从而提高模块…

OSI模型

Java 复习笔记 OSI模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI) 1-7 物联网叔会使用 (资源子网) 应用层为应用程序提供交互服务 。域名系统DNS文件传输FTP支持万维网(www)应用的HTTP协议,支持电子邮件的SMTP协议 表…

12 编程基础:语句与函数

编程有自己的语法, if,then,end if while循环 for循环 将语言打包成函数, 有专门的函数库公开使用,还有声音、图像库

ubuntu安装smaba

1、更新软件包列表sudo apt update2、安装Sambasudo apt install samba3、一旦安装完成,您可以编辑Samba配置文件sudo nano /etc/samba/smb.conf4、在此文件中,您可以设置共享目录和权限。例如,添加一个简单的共享[share]comment = Samba on Ubuntupath = /media/usb/sharer…

刚刚买的域名被DNS劫持了怎么处理

在当今数字化的时代,域名作为网络世界的重要标识,对于个人和企业的在线业务都至关重要。然而,有时会遭遇令人头疼的问题,比如新买的域名被DNS劫持。这不仅会影响网站的正常访问,还可能导致用户信息泄露、业务受损等严重后果。那么,当我们面临这种情况时,应该如何妥善处理…

【笔记】【Android】Manifest中的intent-filter使用

【笔记】【Android】Manifest中的intent-filter使用笔记系列,内容是从网络搜索的结果,不一定是正确的理解。 如果存在谬误,欢迎大家指正。intent-filter是为了标明Activity,Service或者Braodcast Receiver可以相应的intent类型。 基本结构 <activity android:name="…

IIS禁用自动回收

主要设置了线程池里面的 1、启动模式: 由默认值改为AlwaysRunning2、 固定时间间隔:由默认1740 改为 03、将闲置空闲时间改为 0

grafana如何使用定义的变量

1.先看效果 2.定义变量 3.sql语句中使用变量

日志管理系统的系统目标是什么?

在网络安全、数据管理、故障排查等领域,日志都被广泛使用并需要进行有效的管理与分析。因此,日志管理系统的系统目标显得尤为重要,如以下几方面。 1、确保数据的安全性及完整性 在企业和组织的日常运营中,各类信息数据都会通过系统生成和传递,而这种数据往往是宝贵且敏感…

239. 滑动窗口最大值(难)

目录题目法一、暴力枚举法二、双端队列 题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。法一、暴力枚举遍历数组,获取每个窗口的子数…

Jenkins执行Shell脚本超时错误处理指南

Jenkins执行Shell脚本超时错误处理指南 在使用Jenkins进行自动化测试时,经常会遇到需要执行Shell脚本的情况。然而,当Shell脚本执行时间过长,超过了Jenkins配置的超时限制时,就会导致构建任务失败。本文将为你详细介绍如何处理Jenkins执行Shell脚本时的超时错误。 问题现象…