MAC Mini M4 上测试Detectron2 图像识别库

        

     断断续续地做图像识别的应用,使用过各种图像识别算法,一开始使用openCV 做教室学生计数的程序。以后又使用YOLO 做医学伤口检测程序。最近,开始使用meta 公司的Detectron2.打算做OCR 文档结构分析

     Detectron2 的开发者是 Meta 的 Facebook AI 研究 (FAIR) 团队,他们表示“我们开发 Detectron2 的目标是支持当今各种尖端的物体检测和分割模型,同时也服务于不断变化的尖端研究领域。”

       Detectron2 是一个基于 Pytorch 框架构建的深度学习模型,据称该框架是目前最有前途的模块化目标检测库之一。

本文记录在MAC Mini M4 上做的测试。

安装

pip install 'git+https://github.com/facebookresearch/detectron2.git@v0.4#egg=detectron2'
pip install layoutparser  
pip install Pillow==9.5.0 

代码

#https://towardsdatascience.com/understanding-detectron2-demo-bc648ea569e5/
import argparseimport cv2
import numpy as np
import refrom detectron2 import model_zoo
from detectron2.config import get_cfg, CfgNode
from detectron2.data import MetadataCatalog
from detectron2.engine import DefaultPredictor
from detectron2.structures import Instances
from detectron2.utils.visualizer import Visualizer, VisImagedef _get_parsed_args() -> argparse.Namespace:"""Create an argument parser and parse arguments.:return: parsed arguments as a Namespace object"""parser = argparse.ArgumentParser(description="Detectron2 demo")# default model is the one with the 2nd highest mask AP# (Average Precision) and very high speed from Detectron2 model zooparser.add_argument("--base_model",default="COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x.yaml",help="Base model to be used for training. This is most often ""appropriate link to Detectron2 model zoo.")parser.add_argument("--images",nargs="+",help="A list of space separated image files that will be processed. ""Results will be saved next to the original images with ""'_processed_' appended to file name.")return parser.parse_args()if __name__ == "__main__":args: argparse.Namespace = _get_parsed_args()cfg: CfgNode = get_cfg()cfg.merge_from_file(model_zoo.get_config_file(args.base_model))cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.4cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(args.base_model)cfg.MODEL.DEVICE = "mps"predictor: DefaultPredictor = DefaultPredictor(cfg)image_file: strfor image_file in args.images:img: np.ndarray = cv2.imread(image_file)output: Instances = predictor(img)["instances"]v = Visualizer(img[:, :, ::-1],MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),scale=1.0)result: VisImage = v.draw_instance_predictions(output.to("cpu"))result_image: np.ndarray = result.get_image()[:, :, ::-1]# get file name without extension, -1 to remove "." at the endout_file_name: str = re.search(r"(.*)\.", image_file).group(0)[:-1]out_file_name += "_processed.png"cv2.imwrite(out_file_name, result_image)

注意:在这个过程中出现错误:

raise AssertionError("Torch not compiled with CUDA enabled")AssertionError: Torch not compiled with CUDA enabled

Mac Mini 的GPU 称为mps。我添加了 cfg.MODEL.DEVICE = "mps"。你可以测试一下:

import torch
print(torch.mps.is_available())
True

运行 

python detectron2_demo4.py --images david-clarke-KTF-gr3uWvs-unsplash.jpg

输入的图片 

输出

输出的速度比较慢,大约121秒。

另一个图片识别

姑娘与狗

耗费时间99秒。

先这样吧,日后慢慢地学习。 

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

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

相关文章

一天时间,我用AI(deepseek)做了一个配色网站

前言 最近在开发颜色搭配主题的相关H5和小程序,想到需要补充一个web网站,因此有了这篇文章。 一、确定需求 向AI要答案之前,一定要清楚自己想要做什么。如果你没有100%了解自己的需求,可以先让AI帮你理清逻辑和思路,…

机器视觉用消色差双合透镜

光学系统案例:机器视觉用消色差双合透镜 一、设计规格 1. 应用场景:专为工业相机成像而设计,工作于可见光波段,旨在满足该领域对高精度成像的需求。 2. 核心参数: • 焦距:精确要求达到 50 mm 1%&#…

批量归一化(Batch Normalization)原理与PyTorch实现

批量归一化(Batch Normalization)是加速深度神经网络训练的常用技术。本文通过Fashion-MNIST数据集,演示如何从零实现批量归一化,并对比PyTorch内置API的简洁实现方式。 1. 从零实现批量归一化 1.1 批量归一化函数实现 import t…

feedback

这个文件 lib/pages/feedback/index.dart 是一个反馈/留言表单页面的实现,主要功能是: 表单收集功能: 真实姓名(必填)联系电话(必填,需要验证手机号格式)电子邮箱(选填&a…

数据仓库标准库模型架构相关概念浅讲

数据仓库与模型体系及相关概念 数据仓库与数据库的区别可参考:数据库与数据仓库的区别及关系_数据仓库和数据库-CSDN博客 总之,数据库是为捕获数据而设计,数据仓库是为分析数据而设计 数据仓库集成工具 在一些大厂中,其会有自…

适用于 HAL 的 AIDL

目录 设计初衷 注意 编写AIDLHAL接口 查找AIDLHAL接口 扩展接口 将现有HAL从HIDL转换为AIDL AIDL与HIDL之间的主要差异 针对HAL的供应商测试套件(VTS)测试 Android 11 中引入了在 Android 中使用 AIDL 实现 HAL 的功能, 从而可以在不使用 HIDL 的情况下实现 Android 的部分…

leetcode0547. 省份数量-medium

1 题目:省份数量 官方标定难度:中 有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相…

【专题刷题】双指针(一)

📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:1,本人解法 本人屎山代码;2,优质解法 优质代码;3,精益求精,…

WebSocket 技术详解

引言 在现代Web应用中,实时通信已经成为不可或缺的一部分。想象一下聊天应用、在线游戏、股票交易平台或协作工具,这些应用都需要服务器能够即时将更新推送给客户端,而不仅仅是等待客户端请求。WebSocket技术应运而生,它提供了一…

【redis】初识redis

初识redis Redis 是一种基于键值对(key-value) 的 NoSQL 的数据库,它与很多键值数据库不同, Redis 中的值可以是 string(字符串) 、hash(哈希)、list(链表)、…

UE5 制作方块边缘渐变边框效果

该效果基于之前做的(https://blog.csdn.net/grayrail/article/details/144546427)进行修改得到,思路也很简单: 1.打开实时预览 1.为了制作时每个细节调整方便,勾选Live Update中的三个选项,开启实时预览。…

基于springboot的“嗨玩旅游网站”的设计与实现(源码+数据库+文档+PPT)

基于springboot的“嗨玩旅游网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…

grafana/loki 部署搜集 k8s 集群日志

grafana/loki 和 grafana/loki-stack 的区别 ​Grafana 提供了多个 Helm Chart 用于在 Kubernetes 集群中部署 Loki 及相关组件,其中主要包括 grafana/loki 和 grafana/loki-stack。​它们的主要区别如下:​ 1.grafana/loki Helm Chart: 专注于 Loki 部署: 该 Chart 专门…

Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置

作者:濯光、翼严 Kubernetes 配置管理的局限 目前,在 Kubernetes 集群中,配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式,注入到 Pod 中。尽管 Kubernetes 提供了这些强…

python自动化浏览器标签页的切换

#获取全部标签页的句柄返回句柄的列表 handleswebdriver.window_handles#获取全部标签页的句柄返回句柄的列表 print(len(handles)) 切换标签页 handleswebdriver.window_handles webdriver.switch_to.window(handles[index])#切换到第几个标签页就写几 关闭标签页 关闭标…

微信小程序组件传参

微信小程序组件传参感觉和vue还是挺像的 父组件向子组件传参 在小程序中父组件子组件传参,主要使用properties属性。演示下: 创建组件文件夹component,创建组件demoComponent,记得创建的时候选择组件,不是page页面 …

【嵌入式硬件】LAN9253说明书(中文版)

目录 1.介绍 1.1总体介绍 1.2模式介绍 1.2.1微控制器模式: 1.2.2 扩展模式 1.2.3 数字IO模式 1.2.4 各模式图 2.引脚说明 2.1 引脚总览 2.2 引脚描述 2.2.1 LAN端口A引脚 2.2.2 LAN端口B引脚 2.2.3 LAN端口A和、B电源和公共引脚 2.2.4 SPI/SQI PINS 2.2.5 分布式时…

【C语言基础】双指针在qsort函数中的应用

在C语言中使用 qsort 对字符串数组(如 char* 数组)排序时,必须转换为双指针(char**),这是由字符串数组的内存结构和 qsort 的工作原理决定的。以下是详细解释: 一、底层原理分析 1. 字符串数组…

批处理(Batch Processing)的详解、流程及框架/工具的详细对比

以下是批处理(Batch Processing)的详解、流程及框架/工具的详细对比: 一、批处理核心概念 定义: 批处理是离线处理大量数据或任务的自动化流程,特点是无人值守、高吞吐量、资源密集型,常用于数据清洗、报表…

基于FreeRTOS和LVGL的多功能低功耗智能手表(APP篇)

目录 一、简介 二、软件框架 2.1 MDK工程架构 2.2 CubeMX框架 2.3 板载驱动BSP 1、LCD驱动 2、各个I2C传感器驱动 3、硬件看门狗驱动 4、按键驱动 5、KT6328蓝牙驱动 2.4 管理函数 2.4.1 StrCalculate.c 计算器管理函数 2.4.2 硬件访问机制-HWDataAccess 2.4.3 …